Docker Best Practices Choosing Between RUN, CMD and ENTRYPOINT
도커 이미지를 실행하기 위해 사용할 수 있는 명령어가 여러 가지 있는데 해당 명령어들을 각 상황에 맞게 사용하는 것이 좋습니다.
run, cmd, entrypoint 명령어에 대해 알아보며, 어느 상황에 사용하면 좋은지 알아보겠습니다.
Multiple methods are available to accomplish similar tasks, and users must understand the pros and cons of the available options to choose the best approach for their projects.
One Confusing area concerns the RUN, CMD and ENTRYPOINT Dockerfile instructions.
같은 작업을 수행하는 여러 메서드가 있는데, 개발자는 진행하고 있는 프로젝트에 Best Pratice 선택하여야 한다.
→ 각 상황에 맞는 메서드가 있는데 이것을 잘 구분하여 사용하여야 한다.
RUN
The RUN instruction is used in Dockerfiles to execute commands that build and configure the Docker image
RUN 명령어는 Dockerfile에 사용되며, 도커 이미지 빌드 및 설정에 관해서 명령어를 실행할 때 사용합니다. → 도커 이미지 빌드를 위해 필요한 패키지나 명령어가 필요할 때 사용합니다.
Theses commands(RUN) are executed during the image build process
RUN apt update && apt -y install apache2
CMD
The CMD instruction specifies the default command to run when a container is started from the Docker image.
If no command is specified during the container startup, this default is used.
CMD can be overridden by supplying command-line arguments to docker run
CMD 명령어는 컨테이너 실행시 사용되는 기본 명령어입니다.
중요!!
컨테이너 실행 과정에 특정한 명령어가 없다면 기본으로 사용되지만, CMD는 docker run 시 전달하는 command-line arguments (Args)에 의해 덮어 써질 수 있습니다.
→ 즉, CMD 명령어는 Args에 작성된 명령어에 overriden 되어질 수 있음
CMD ["apache2ctl", "-DFOREGROUND"]
ENTRYPOINT
The ENTRYPOINT instruction sets the default executable for the container.
Any arguments supplied to the docker run command are appended to the ENTRYPOINT command.
docker run 명령어에 전달받은 arguments는 ENTRYPOINT 명령어 뒤에 붙습니다.
Note:
Use ENTRYPOINT when you need your container to always run the same base command, and you want to allow users to append additional commands at the end.
One caveat is that ENTRYPONT can be overridden on the docker run command line by supplying the --entrypoint flag.
→ 동일한 명령어로 항상 컨테이너를 실행시키고 싶으면 ENTRYPOINT를 사용하는 것이 좋습니다. 또한 명령어 끝에 arguments를 추가하여 실행하는 경우에 적합하다.
ENTRYPOINT ["my_script"]
참고자료
Docker Best Practices: Choosing Between RUN, CMD, and ENTRYPOINT | Docker
'Infra > Docker' 카테고리의 다른 글
[Jib] Gradle Jib 을 통한 빌드 사용법 및 Jib 이해하기, 빌드 시간 단축하기기 - gradlew jib (0) | 2024.08.09 |
---|---|
[Docker] Docker compose로 redis 실행하기 - redis.conf, requirepass, data 설정 (0) | 2024.04.21 |
[Docker] Docker network, volume 이해 및 docker-compose에 network, volume 지정하기 (0) | 2024.04.21 |
[Docker] springboot와 vue, mysql 배포부터 연동까지 (0) | 2023.12.03 |
[Docker] 도커 허브 연결하기, 도커 컴포즈 docker-compose 파일 작성하기 (1) | 2023.12.03 |