ENTRYPOINT
ENTRYPOINT는 컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행합니다. 즉 docker run 명령으로 컨테이너를 생성하거나, docker start 명령으로 정지된 컨테이너를 시작할 때 실행됩니다. ENTRYPOINT는 Dockerfile에서 단 한번만 사용할 수 있습니다.
셸(/bin/sh)로 명령 실행하기
Dockerfile
ENTRYPOINT touch /home/hello/hello.txt
ENTRYPOINT <명령> 형식이며 셸 스크립트 구문을 사용할 수 있습니다. FROM으로 설정한 이미지에 포함된 /bin/sh 실행 파일을 사용하게 되며 /bin/sh 실행 파일이 없으면 사용할 수 없습니다.
셸 없이 바로 실행하기
Dockerfile
ENTRYPOINT ["/home/hello/hello.sh"]
Dockerfile
ENTRYPOINT ["/home/hello/hello.sh", "--hello=1", "--world=2"]
ENTRYPOINT ["<실행 파일>", "<매개 변수1>", "<매개 변수2>"] 형식입니다. 실행 파일과 매개 변수를 배열 형태로 설정합니다. FROM으로 설정한 이미지의 /bin/sh 실행 파일을 사용하지 않는 방식입니다. 셸 스크립트 문법이 인식되지 않으므로 셸 스크립트 문법과 관련된 문자를 그대로 실행 파일에 넘겨줄 수 있습니다.
CMD와 ENTRYPOINT는 컨테이너가 생성될 때 명령이 실행되는 것은 동일하지만 docker run 명령에서 동작 방식이 다릅니다.
다음과 같이 Dockerfile에서 CMD로 echo 명령을 사용하여 hello를 출력합니다.
Dockerfile
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를 출력합니다.
Dockerfile
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는 무시됩니다.
'Docker' 카테고리의 다른 글
Docker Kali Linux Install(윈도우에 kali linux docker 설치) (0) | 2020.09.07 |
---|---|
docker container에서 locale UTF-8로 사용하기 (0) | 2020.08.26 |
docker network 생성 (0) | 2020.08.26 |
Redis container 다운 및 바로 실행하기 (0) | 2020.08.26 |
VMware Workstation and Hyper-V are not compatible. Remove the Hyper-V role from the system before running VMware Workstation (0) | 2020.08.26 |