엔트리포인트와 커맨드

  • 엔트리포인트 (Entrypoint)
    • 도커 컨테이너가 실행할 때 고정적으로 실행되는 스크립트 혹은 명령어
    • 생략 가능, 생략될 경우 커맨드에 지정된 명령어로 수행
  • 커맨드 (Command)
    • 단독으로 사용될 때는 도커 컨테이너가 실행할 때 수행할 명령어
    • 엔트리포인트와 같이 사용될 때는 엔트리포인트에 지정된 명령어에 대한 인자 값

실제 수행되는 컨테이너 명령어는 [Entrypoint] [Command] 이다. 엔트리포인트는 커맨드와 달리 docker run 으로 컨테이너 실행 시 인자값을 전달해도 기존의 명령이 실행된다는 차이점이 있다.

FROM node:12-alpine
RUN apk add --no-cache python3
WORKDIR /app
COPY . .
RUN yarn install --production

ENTRYPOINT ["/bin/echo", "hello"]  # 커맨드가 실행되기에 앞서 실행되는 프로그램 
CMD ["world"]

위의 도커파일로 이미지를 빌드한 뒤에 docker run -it [image]를 실행하면 hello world가 출력되지만, docker run -it [image] test 를 실행하면 hello test가 출력되어 hello는 바뀌지 않고 출력된다.

Dockerfile의 엔트리포인트와 커맨드

FROM node:12-alpine
RUN apk add --no-cache python3
WORKDIR /app
COPY . .
RUN yarn install --production

ENTRYPOINT ["docker-entrypoint.sh"]  # 커맨드가 실행되기에 앞서 실행되는 프로그램 
CMD ["node"]

도커 명령어의 엔트리포인트와 커맨드

docker run 명령어로 엔트리포인트와 커맨드를 오버라이드 한다.

$ docker run --entrypoint sh ubuntu:focal
$ docker run --entrypoint echo ubuntu:focal hello world

image

docker inspect 로 설정을 보면 아래와 같이 기본적으로 커맨드는 bash, 엔트리포인트는 아무것도 없는 것을 확인할 수 있다.

image

이제 엔트리포인트를 설정해 보자.

image

엔트리포인트와 커맨드를 모두 설정해 보자.

image