Dockerfile 자세히 알아보기

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

CMD

CMD는 컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행합니다. 즉 docker run 명령으로 컨테이너를 생성하거나, docker start 명령으로 정지된 컨테이너를 시작할 때 실행됩니다. CMD는 Dockerfile에서 한 번만 사용할 수 있습니다.

셸(/bin/sh)로 명령 실행하기

Dockerfile

CMD touch /home/hello/hello.txt

CMD <명령> 형식이며 셸 스크립트 구문을 사용할 수 있습니다. FROM으로 설정한 이미지에 포함된 /bin/sh 실행 파일을 사용하게 되며 /bin/sh 실행 파일이 없으면 사용할 수 없습니다.

셸 없이 바로 실행하기

Dockerfile

CMD ["redis-server"]

셸 없이 바로 실행할 때 매개 변수 설정하기

Dockerfile

CMD ["mysqld", "--datadir=/var/lib/mysql", "--user=mysql"]

CMD ["<실행 파일>", "<매개 변수1>", "<매개 변수2>"] 형식입니다. 실행 파일과 매개 변수를 배열 형태로 설정합니다. FROM으로 설정한 이미지의 /bin/sh 실행 파일을 사용하지 않는 방식입니다. 셸 스크립트 문법이 인식되지 않으므로 셸 스크립트 문법과 관련된 문자를 그대로 실행 파일에 넘겨줄 수 있습니다.

ENTRYPOINT를 사용하였을 때

Dockerfile

ENTRYPOINT ["echo"]
CMD ["hello"]

CMD ["<매개 변수1>", "<매개 변수2>"] 형식입니다. ENTRYPOINT에 설정한 명령에 매개 변수를 전달하여 실행합니다. Dockerfile에 ENTRYPOINT가 있으면 CMD는 ENTRYPOINT에 매개 변수만 전달하는 역할을 합니다. 그래서 CMD 독자적으로 파일을 실행할 수 없게 됩니다.

다음과 같이 Dockerfile을 빌드하여 컨테이너를 생성하면 hello가 출력됩니다.

$ sudo docker build --tag example .
$ sudo docker run example
hello

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

30 November 2014