- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
Dockerfile 자세히 알아보기
이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20
ENTRYPOINT
ENTRYPOINT는 컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행합니다. 즉 docker run 명령으로 컨테이너를 생성하거나, docker start 명령으로 정지된 컨테이너를 시작할 때 실행됩니다. ENTRYPOINT는 Dockerfile에서 단 한번만 사용할 수 있습니다.
셸(/bin/sh)로 명령 실행하기
ENTRYPOINT touch /home/hello/hello.txt
ENTRYPOINT <명령>
형식이며 셸 스크립트 구문을 사용할 수 있습니다. FROM으로 설정한 이미지에 포함된 /bin/sh 실행 파일을 사용하게 되며 /bin/sh 실행 파일이 없으면 사용할 수 없습니다.
셸 없이 바로 실행하기
ENTRYPOINT ["/home/hello/hello.sh"]
ENTRYPOINT ["/home/hello/hello.sh", "--hello=1", "--world=2"]
ENTRYPOINT ["<실행 파일>", "<매개 변수1>", "<매개 변수2>"]
형식입니다. 실행 파일과 매개 변수를 배열 형태로 설정합니다. FROM으로 설정한 이미지의 /bin/sh 실행 파일을 사용하지 않는 방식입니다. 셸 스크립트 문법이 인식되지 않으므로 셸 스크립트 문법과 관련된 문자를 그대로 실행 파일에 넘겨줄 수 있습니다.
CMD와 ENTRYPOINT는 컨테이너가 생성될 때 명령이 실행되는 것은 동일하지만 docker run
명령에서 동작 방식이 다릅니다.
다음과 같이 Dockerfile에서 CMD로 echo
명령을 사용하여 hello를 출력합니다.
FROM ubuntu:latest
CMD ["echo", "hello"]
컨테이너를 생성할 때 docker run <이미지> <실행할 파일>
형식인데 이미지 다음에 실행할 파일을 설정할 수 있습니다. docker run
명령에서 실행할 파일을 설정하면 CMD는 무시됩니다.
$ sudo docker build --tag example .
$ sudo docker run example echo world
world
CMD ["echo", "hello"]
는 무시되고 docker run
명령에서 설정한 echo world
가 실행되어 world가 출력되었습니다. docker run
명령에서 설정한 <실행할 파일>과 Dockerfile의 CMD는 같은 기능입니다.
이제 ENTRYPOINT입니다. 다음과 같이 Dockerfile에서 ENTRYPOINT로 echo
명령을 사용하여 hello를 출력합니다.
FROM ubuntu:latest
ENTRYPOINT ["echo", "hello"]
Dockerfile을 빌드하여 docker run
명령으로 실행합니다. docker run
명령에서 실행할 파일을 설정하면 ENTRYPOINT 무시되지 않고, 실행할 파일 설정 자체를 매개 변수로 받아서 처리합니다.
$ sudo docker build --tag example .
$ sudo docker run example echo world
hello echo world
ENTRYPOINT ["echo", "hello"]
에서 echo hello
가 실행되어 hello가 출력되고, docker run
명령에서 설정한 내용이 ENTRYPOINT ["echo", "hello"]
의 매개 변수로 처리되어 echo world도 함께 출력됩니다. 셸에서는 다음과 같이 표현할 수 있습니다.
$ echo hello echo world
hello echo world
echo
명령 아닌 다른 방식으로 실행해봅니다. 다음과 같이 1 2 3 4를 넘겨주면 그대로 1 2 3 4가 출력됩니다.
$ sudo docker run example 1 2 3 4
hello 1 2 3 4
ENTRYPOINT는 docker run
명령에서 --entrypoint
옵션으로도 설정할 수 있습니다. --entrypoint
옵션으로 cat
을 실행하고 /etc/hostname 파일의 내용을 출력합니다.
$ sudo docker run --entrypoint="cat" example /etc/hostname
9efe43ea4d40
--entrypoint
옵션을 설정하면 Dockerfile에 설정한 ENTRYPOINT는 무시됩니다.
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.