RUN, CMD, ENTRYPOINT 명령어의 개념과 차이점

2022. 5. 9. 15:42프로그래밍 개발(Development)/Docker

반응형

도커 파일(Dockerfile) 작성시 사용되는 명령문 중에 실행과 관련된 명령어는 RUN, CMD, ENTRYPOINT 가 있다.

각각의 명령어를 쉽고 빠르게 이해해보자.


반응형

RUN

RUN 명령문는 쉘(shell)에서 커맨드를 실행하는 것처럼 이미지 빌드 과정에서 필요한 커맨드를 실행하기 위해 사용된다.

보통 이미지 안에 특정 소프트웨어를 설치하기 위해서 많이 사용된다.

FROM python:lastest

RUN apt-get -y install vim
RUN pip instlal -r requirements.txt
RUN useradd -r username

실행 시점 : 이미지 빌드

 

ENTRYPOINT

ENTRYPOINT 명령문는 CMD 명령문와 비슷하지만, 컨테이너를 띄울 때 항상 실행되야 하는 커맨드를 지정할 때 사용한다. Docker 이미지를 하나의 실행 파일처럼 사용할 때 매우 유용하다.

이유는 컨테이너가 실행될때 ENTRYPOINT 명령문으로 지정된 커맨드가 실행이 되고, 이 커맨드로 실행 된 프로세스가 죽으면, 컨테이너도 함께 종료 되기 때문이다.

# 예) ENTRYPOINT ["<커맨드>","<파라미터1>","<파라미터2>"]

# Django 서버 실행 예제
ENTRYPOINT ["python" "manage.py", "runserver"]

실행 시점 : 컨테이너 실행

 

CMD

CMD 명령어는 해당 이미지를 컨테이너로 띄울 때 디폴트로 실행할 커맨드나, ENTRYPOINT 명령문으로 지정된 커맨드에 디폴트로 넘길 파라미터를 지정할 때 사용한다.

예를 들어 아래와 같이 Dockerfile을 작성한다.

ENTRYPOINT ["python"]
CMD ["helloworld.py"]

docker run 명령어로 인자 없이 실행을 하게 되면 CMD 명령문에 정의된 "helloworld.py"이 실행이 된다.

  • python helloworld.py 실행
docker run testpython
  • python testworld.py 실행
docker run testpython testworld.py

파라미터에 testworld.py 를 입력하게 되면 Dockerfile에 정의된 helloworld.py가 아닌 입력 파라미터를 실행하게 된다.

실행 시점 : 컨테이너 실행

 

CMD와 ENTRYPOINT 차이점

컨테이너 실행시 CMD 명령문은 파라미터 입력이 없을 경우 정의된 파라미터가 실행이 되며, 상황에  따라 파라미터를 추가 입력시 입력 파라미터가 우선순위를 갖게 된다.

하지만, ENTRYPOINT의 경우 컨테이너가 실행시 항상 실행이 되기 때문에 디폴트 실행 명령어를 사용할때 유용하다.

 

간단히 요약하자면

CMD : 사용자 파라미터 입력에 따라 변동

ENTRYPOINT : 항상 실행

반응형