1. 배경
1) container를 run, start했을 때, 결과가 나오고 바로 Exitted되는 이유
도커의 이미지로 centos:7 배포판을 내려받고(pull)
centos의 /bin/cal 의 캘린더를 실행시킨다고 해보자
centos:7 을 내려받고
apple@appleui-MacBookPro ~$ docker image pull centos:7
apple@appleui-MacBookPro ~$ docker image ls
7: Pulling from library/centos
524b0c1e57f8: Pull complete
Digest:
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
apple@appleui-MacBookPro ~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 b5b4d78bc90c 3 weeks ago 203MB
centos:7의 /bin/cal의 캘린더를 켜는 container를 run해보자
apple@appleui-MacBookPro ~$ docker container run -it --name "test1" centos:7 /bin/cal
May 2020
Su Mo Tu We Th Fr Sa
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
31
이렇게 잘 나온다
하지만 이 container의 상태를 보면?
apple@appleui-MacBookPro ~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec1ad271b5d7 centos:7 "/bin/cal" 2 minutes ago Exited (0) 2 minutes ago test1
이렇게 status가 바로 exit 상태가 된다
2) 이미 생성된 container를 start하면 결과가 나오지 않는 이유
위에서 생성된 container를 다시 한번 실행시켜보자
apple@appleui-MacBookPro ~$ docker container start ec1ad271b5d7
ec1ad271b5d7
이렇게 run했을 때 나왔던 캘린더의 모습이 나오지 않고
container id만 띡 하고 나온다.
무슨 일이 벌어진건지 보기 위해
이 container의 log를 봐보자
apple@appleui-MacBookPro ~$ docker container logs -t ec1ad271b5d7
2020-05-29T17:18:26.499689300Z May 2020
2020-05-29T17:18:26.499730200Z Su Mo Tu We Th Fr Sa
2020-05-29T17:18:26.499746700Z 1 2
2020-05-29T17:18:26.499761400Z 3 4 5 6 7 8 9
2020-05-29T17:18:26.499778900Z 10 11 12 13 14 15 16
2020-05-29T17:18:26.499792600Z 17 18 19 20 21 22 23
2020-05-29T17:18:26.499808800Z 24 25 26 27 28 29 30
2020-05-29T17:18:26.499888200Z 31
이렇게 나온 기록은 나와있다.
2. 개념
Docker를 사용할 때 가장 기본이 되는 개념중 하나는
container는 Virtual Machine이 아니라는 점이다!
1) 에서 centos의 /bin/cal를 실행했는데 왜 아무것도 실행되지 않고 바로 Exit 되었을까?
바로 container는 Virtual Machine같은 한 서버환경이 아니라
명령을 실행하는 한 환경이고 명령을 이행시켜줄 뿐이다.
이는 docker ps -a를 입력해서 나오는 리스트에 있는
Command 속성을 보면 유추할 수 있다.
apple@appleui-MacBookPro ~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec1ad271b5d7 centos:7 "/bin/cal" 2 minutes ago Exited (0) 2 minutes ago test1
그렇게 명령을 이행하고 나면
Machine을 켠 것 마냥 계속 켜져있는 것이 아니라
본분을 이행하고 꺼지는 것이다.
이는 무조건 꺼지는 것이 아니라 Command에 따라 다르다.
예를 들어
apple@appleui-MacBookPro ~$ docker container run -d -p 8080:80 nginx
이렇게 nginx라는 이미지(docker hub로부터 pull받은 official 이미지이다)를
별다른 command를 뒤에 붙이지 않고
container로 run 했다면
각각 기본 command로 정해진 command들이 실행되고
nginx의 경우
apple@appleui-MacBookPro ~$ docker ps -a [2:23:09]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d023acc091e6 nginx "nginx -g 'daemon of…" 31 seconds ago Up 30 seconds 0.0.0.0:8080->80/tcp competent_clarke
이런 Command를 가진 container가 실행되는데
이는 계속 해당 Command에 의해 계속 켜져있게 된다.
2) 에서 container start는 왜 docker container run과 같이 실행될 때 보여지지 않는 것인가?
docker container start는 기본적으로
표준입력과 표준출력이 데스크탑의 키보드와 화면에 대해 열려있지 않다.
그래서 /bin/bash나 /bin/cal 같은 명령을 실행하고 그 입력이나 출력을 보려면
interactive 모드를 꼭 붙여줘야 한다.
apple@appleui-MacBookPro ~$ docker container start -i ec1ad271b5d7
이렇게 말이다.
도커는 커맨드상의 옵션이 굉장히 중요한 것 같으니 매번
--help
를 사용하여 옵션을 구경해봐야겠다
참고:
'인포테인먼트 - development > docker' 카테고리의 다른 글
[Docker] 내 컴퓨터의 디렉토리 -> docker container에 복사 (0) | 2020.05.31 |
---|---|
[Docker] Docker '이미지'와 '컨테이너' 차이 (0) | 2020.05.29 |
[docker-error] is docker daemon running? 에러 해결 (0) | 2020.05.26 |
댓글