Dockerfile 작성 시 사용되는 명령문 중 실행과 관련된 명령어는 RUN, CMD, ENTRYPOINT 가 있습니다.
RUN
RUN 명령문은 쉘(shell)에서 커맨드를 실행하는 것처럼 이미지 빌드 과정에서 필요한 커맨드를 실행하기 위해 사용됩니다.
보통 이미지 안에 특정 소프트웨어를 설치하기 위해 많이 사용됩니다.
FROM node:16
RUN mkdir -p /app
WORKDIR /app
COPY package*.json ./
# local machine 에서 npm install 실행
RUN npm install
실행 시점 : 도커 이미지 빌드
ENTRYPOINT
ENTRYPOINT 명령문은 CMD 명령문과 비슷하지만, 컨테이너를 띄울 때 항상 실행되어야 하는 커맨드를 지정할 때 사용합니다.
Docker 이미지를 하나의 실행 파일처럼 사용할 때 매우 유용합니다.
그 이유는 컨테이너가 실행될 때 ENTRYPOINT 명령문으로 지정된 커맨드가 실행되고, 이 커맨드로 실행된 프로세스가 죽으면 컨테이너도 함께 종료되기 때문입니다.
# 예시) ENTRYPOINT ["<커맨드>", "<파라미터1>", "<파라미터2>"]
# Express 서버 실행 예제
CMD [ "node", "app.js" ]
실행 시점 : 컨테이너 실행
CMD
CMD 명령어는 도커 이미지를 컨테이너로 띄울 때 Default로 실행할 커맨드나, ENTRYPOINT 명령문으로 지정된 커맨드에 디폴트로 넘길 파라미터를 지정할 때 사용합니다.
예를 들어 아래와 같이 Dockerfile 을 작성합니다.
ENTRYPOINT ["node"]
CMD ["app.js"]
docker run 명령어로 인자 없이 실행하게 되면 CMD 명령문에 정의된 "app.js" 가 실행됩니다.
node app.js 실행
docker run testnode
node src/bin/www.js 실행
docker run testnode src/bin/www.js
파라미터로 src/bin/www.js 를 입력하게 되면 Dockerfile에 정의된 node.js 가 아닌 입력 파라미터를 실행하게 됩니다.
CMD 와 ENTRYPOINT 의 차이점
컨테이너 실행 시 CMD 명령문은 파라미터 입력이 없을 경우 정의된 파라미터가 실행되며, 상황에 따라 파라미터 추가 입력 시 입력 파라미터가 우선순위를 갖게 됩니다.
하지만, ENTRYPOINT의 경우 컨테이너 실행 시 항상 실행되기 때문에 Default 실행 명령어를 사용할 때 유용합니다.
정리하자면,
CMD : 입력 파라미터 존재 여부에 따라 실행 여부가 결정됩니다.
ENTRYPOINT : 항상 실행됩니다.
'Docker' 카테고리의 다른 글
로컬에서 Docker 를 이용한 Express 서버 어플리케이션 개발 (0) | 2022.12.01 |
---|---|
도커 컨테이너 환경변수 주입 (0) | 2022.11.10 |
계속해서 restart 상태인 컨테이너 디버깅하기 (0) | 2022.11.10 |
[Error] unable to start container process: exec: "bash" (0) | 2022.11.10 |
Docker Compose 개념과 사용하는 이유 (0) | 2022.11.09 |