코알못

[Docker] 설정 방법 및 실행중인 컨테이너 접속 본문

ETC

[Docker] 설정 방법 및 실행중인 컨테이너 접속

코린이s 2022. 3. 25. 19:14
728x90

엔트리 포인트와 커맨드 차이는 무엇일까?

두개의 정의는 아래와 같다.

- 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 를 통해 접속하여 문제 발생시 원인 파악을 유용하게 할 수 있다.

끝!

728x90

'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
Comments