롸?
Dockerfile 명령어 RUN, CMD, ENTRYPOINT 차이 본문
Dockerfile을 작성하다 보면, RUN, CMD, ENTRYPOINT 차이를 알아야 하는 경우가 생긴다. 이 세 가지 명령어의 차이를 알아보자.
1. RUN
보통 이미지에 새로운 패키지를 설치 등에 사용됨.
RUN 명령어는 실행할 때마다 레이어가 생성된다. 따라서 RUN 명령어를 하나에 통합해준다면 보다 깔끔하게 레이어를 관리할 수 있다.
# 통합 전
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y python3 python3-pip wget git less neovim
RUN pip3 install pandas
# 통합 후
FROM ubuntu:18.04
RUN apt-get update \
&& apt-get install -y python3 python3-pip wget git less neovim \
&& pip3 install pandas
RUN 명령어를 통합하기 전처럼 apt-get update와 install을 따로 실행하면 install시 update가 다시 실행되지 않아서 최신 패키지를 설치할 수 없다.
2. CMD
CMD 명령어는 RUN 명령어가 이미지를 빌드할 때 실행되는 것과 달리, 이미지로부터 컨테이너를 생성하여 최초로 실행할 때 수행된다.
#dockerfile_cmd
FROM ubuntu:16.04
CMD ["echo", "CMD test"]
위 와 같은 도커파일이 있을 때,
docker build . -f dockerfile_cmd -t cmd_test
명령어로 이미지를 빌드하고
docker run cmd_test
위의 명령어로 컨테이너를 생성하고 실행해보면, 컨테이너가 생성되서
CMD test 라고 출력을 하고 컨테이너가 종료되는 것을 확인할 수 있다.
3. ENTRYPOINT
CMD와 유사하게 컨테이너가 생성되고 최초로 실행할 때 수행되는 명령어를 지정한다.
CMD와 다른 점은 ENTRYPOINT는 항상 실행이 되고, CMD는 docker run 명령어를 실행할 때, 변경이 가능하다.
#dockerfile_entrypoint
FROM ubuntu:16.04
ENTRYPOINT ["echo", "ENTRYPOINT test"]
위와 같이 도커파일을 작성한 후
docker build . -f dockerfile_entrypoint -t entrypoint_test
docker run entrypoint_test
위와 같이 빌드하고 실행하면 CMD 명령어처럼 ENYRYPOINT test 라고 출력된다.
4. 차이점
CMD의 경우 위 도커파일에
docker run cmd_test echo hello |
로 실행하면 CMD test 대신에 hello가 출력되지만
docker run entrypoint_test echo hello |
로 ENTRYPOINT 도커파일을 실행할 경우 ENTRYPOINT test echo hello 라고 출력된다.
그래서 ENTRYPOINT는 컨테이너가 최초에 꼭 실행해야만 하는 명령어가 있을 때, CMD는 컨테이너 실행시 시작되는 명령어지만 변경할 필요가 있을 때 활용하면 된다.
참고
1. https://williamjeong2.github.io/blog/10-docker-run-vs-cmd-vs-entryporint/
'WEB > Docker' 카테고리의 다른 글
컨테이너 개념 이해하기 (0) | 2021.12.06 |
---|---|
도커 입문 공부1 (0) | 2021.11.12 |