본문 바로가기
  • 포르쉐타고싶다
인포테인먼트 - development/docker

[Docker] container을 run, start 했을 때, 바로 꺼지는(Exitted) 이유

by 지오ㄴl 2020. 5. 30.

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

 

를 사용하여 옵션을 구경해봐야겠다

 

 

 

 

참고:

https://www.popit.kr/%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%B2%98%EC%9D%8C-docker-%EC%A0%91%ED%95%A0%EB%95%8C-%EC%98%A4%EB%8A%94-%EB%A9%98%EB%B6%95-%EB%AA%87%EA%B0%80%EC%A7%80/

반응형

댓글