일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 클러스터
- Docker
- gradle
- 로그인
- Kafka
- hive
- Zeppelin
- fastcampus
- vue
- 예제
- 자바
- Mac
- 간단
- login
- java
- 머신러닝
- ec2
- redash
- config
- 레디스
- 설정
- EMR
- Jenkins
- 젠킨스
- aws
- Redis
- SpringBoot
- 자동
- Cluster
- spring
- Today
- Total
코알못
[Docker] 설정 방법 및 실행중인 컨테이너 접속 본문
엔트리 포인트와 커맨드 차이는 무엇일까?
두개의 정의는 아래와 같다.
- entrypoint : 도커 컨테이너가 실행할때 고정적으로 실행 되는 스크립트 혹은 명령어 (생략가능, 생략시 커맨드 명령어가 실행됨)
- command : 도커 컨테이너가 실행할때 수행할 명령어 또는 엔트리 포인트에 정의된 명령어에 대한 인자값
얼핏 보면 비슷해 보이지만 다른 개념이다.
만약 docker 시작시 test.sh 을 인자로 'test' 를 넣어서 실행 시키고 싶다면 [entrypoint]에 'test.sh' 를 넣고 [command]에 'test' 를 넣으면 된다.
실습을 진행해보자!
entrypoint 로 echo 를 주고 추가 인자를 hello world 를 넣는다.
컨테이너 리스트를 보면 command 에 echo hello world 가 입력된것을 볼 수 있다.
$ docker run --entrypoint echo ubuntu:focal hello world
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57315ce3c53b ubuntu:focal "echo hello world" 6 seconds ago Exited (0) 5 seconds ago heuristic_moser
컨테이너의 상세정보를 보면 cmd 로 hello world 가 입력 되었고, entrypoint 가 echo 인것을 볼 수 있다.
$ docker inspect 57315ce3c53b
"Cmd": [
"hello",
"world"
],
"Image": "ubuntu:focal",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"echo"
],
이제 환경 변수에 대해 알아보자.
'-e' 옵션을 이용하여 환경 변수를 넘겨 줄 수 있으며 아래와 같이 MY_HOST 라는 환경 변수를 넘겨준뒤 정상적으로 설정 되어 있는지 확인 한다.
$ docker run -i -t -e MY_HOST=co-de.tistory.com ubuntu:focal bash
root@36f0f1a6dbaf:/# echo $MY_HOST
co-de.tistory.com
root@36f0f1a6dbaf:/# env
HOSTNAME=36f0f1a6dbaf
PWD=/
HOME=/root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
TERM=xterm
MY_HOST=co-de.tistory.com
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/env
inspect 를 통해 확인 하여도 정상적으로 환경 설정이 적용 되어 있다.
$ docker inspect 36f0f1a6dbaf
"Env": [
"MY_HOST=co-de.tistory.com",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
그러나 위와 같이 매번 넘길시 관리 운영에 어려움이 따른다.
환경 설정 파일을 만들어 컨테이너를 생성해본다.
아래와 같이 만든뒤에
$ sample.env
$ cat sample.env
MY_HOST=co-de.tistory.com
'--env-file' 옵션을 통해 환경 설정 파일을 넘기고 env 를 커맨드로 입력 되도록 하여 바로 확인 가능하도록 한다.
정상적으로 적용됨을 확인 할 수 있다.
$ docker run -i -t --env-file sample.env ubuntu:focal env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=819fa6d2987e
TERM=xterm
MY_HOST=co-de.tistory.com
HOME=/root
자 이제 실행중인 컨테이너에 명령어를 실행해보자!
'exec' 를 이용하면 실행중인 상태의 컨테이너에 접속할 수 있다.
$ docker run -d --name my-nginxs nginx
ee3478c47bd5c4d87877ff63c837745404b4f3cdf303cc214c890a5181ea0458
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee3478c47bd5 nginx "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 80/tcp my-nginxs
$ docker exec my-nginxs env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=ee3478c47bd5
NGINX_VERSION=1.21.6
NJS_VERSION=0.7.2
PKG_RELEASE=1~bullseye
HOME=/root
$ docker exec -i -t my-nginxs bash
root@ee3478c47bd5:/# cd /etc/nginx/
root@ee3478c47bd5:/etc/nginx# ls -ll
total 32
drwxr-xr-x 1 root root 4096 Mar 25 10:03 conf.d
-rw-r--r-- 1 root root 1007 Jan 25 15:03 fastcgi_params
-rw-r--r-- 1 root root 5349 Jan 25 15:03 mime.types
lrwxrwxrwx 1 root root 22 Jan 25 15:13 modules -> /usr/lib/nginx/modules
-rw-r--r-- 1 root root 648 Jan 25 15:13 nginx.conf
-rw-r--r-- 1 root root 636 Jan 25 15:03 scgi_params
-rw-r--r-- 1 root root 664 Jan 25 15:03 uwsgi_params
위와 같이 실행중인 nginx 에 bash 를 통해 접속하여 문제 발생시 원인 파악을 유용하게 할 수 있다.
끝!
'ETC' 카테고리의 다른 글
[Docker] 볼륨 (0) | 2022.03.26 |
---|---|
[Docker] 네트워크 (0) | 2022.03.26 |
[Docker] 구성 및 기본 명령어 (0) | 2022.03.25 |
[Docker] 설치 (0) | 2022.03.25 |
[Kubernetes & Docker] 무엇인가? (0) | 2022.03.25 |