Docker

[Docker] 컨테이너 실행 시 매개변수 지정

비번변경 2021. 7. 5. 23:13

Docker는 VM과 다르게 운영 체제를 호스팅 하지 않고, 특정 task나 프로세스를 실행한다. 따라서 프로세스가 종료되면 도커로 실행한 Container도 종료된다.

예시로, 아래의 명령어를 실행하면 우분투 이미지를 이용한 컨테이너가 실행되고 즉시 종료된다.

docker run ubuntu bash

Bash는 프로세스가 아니라 단말기 입력을 수신하는 Shell로, 터미널을 찾지 못하면 종료되는데 도커는 기본적으로 컨테이너 실행 때 터미널을 연결하지 않는다. 따라서 bash는 터미널을 찾지 못해 종료되며 컨테이너도 함께 종료된다.

 

CMD

컨테이너 실행 명령 지정은 명령어를 통해서도 할 수 있지만 아래와 같이 Dockerfile에서 정의할 수도 있다.

FROM ubuntu

# 쉘 형식
CMD command param1
# json array 형식
CMD ["command", "param1"]

# 예시
# CMD sleep 5
# CMD ["sleep", "5"]

JSON Array 형식으로 지정할 때는 Array의 첫 번째 요소가 반드시 실행 파일이어야 한다.

명령어를 통해서 컨테이너 실행 명령이 전달된 경우, CMD 명령은 전달된 명령으로 대체된다. 위 예시의 Dockerfile을 빌드해서 매개변수 지정 없이 또는 지정하여 실행해보았다.

  • 매개변수 없이 실행한 경우

    CMD - 매개변수 없이 실행한 경우
  • 매개변수 지정하여 실행한 경우

    CMD - 매개변수 지정하여 실행한 경우
    bash를 실행하는 경우에는 터미널 연결도 해주어야 한다.

 

ENTRYPOINT

CMD 명령어와 유사하게 컨테이너가 실행될 때 실행할 프로세스를 지정할 수 있다.

FROM ubuntu

ENTRYPOINT ["command"]

명령어를 통해서 컨테이너 실행 명령이 전달된 경우에는 ENTRYPOINT 명령은 전달된 명령이 추가된다.

매개변수 없이 실행되는 경우에는 피연산자가 누락되었다는 오류가 발생한다. 위 예시의 Dockerfile을 빌드해서 매개변수 지정 없이 또는 지정하여 실행해보았다.

  • 매개변수 없이 실행한 경우

    ENTRYPOINT - 매개변수 없이 실행한 경우
  • 매개변수 지정하여 실행한 경우

    ENTRYPOINT - 매개변수 지정하여 실행한 경우

ENTRYPOINT와 CMD를 함께 사용하면 매개변수를 사용하되, 반드시 매개변수를 지정하지 않아도 오류 없이 실행될 수 있도록 명령의 기본값을 설정할 수 있다.

FROM Ubuntu

ENTRYPOINT ["command"]
CMD ["param"]

# 예시
# ENTRYPOINT ["sleep"]
# CMD ["5"]
  • 매개변수 없이 실행한 경우

    혼용 - 매개변수 없이 실행한 경우
  • 매개변수 지정하여 실행한 경우

    혼용 - 매개변수 지정하여 실행한 경우

물론, --entrypoint을 이용하여 명령어로 ENTRYPOINT를 별도로 지정할 수도 있다.

docker run --entrypoint echo ubuntu-sleep:3 10

docker cli entrypoint