Section 5-3. Commands And Arguments
udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 및 쿠버네티스 인 액션 (마르코 룩샤)를 참고하여 정리한 글입니다.
Section05. Application Lifecycle Management
Commands and Arguments
도커파일의 CMD와 ENTRYPOINT
- 컨테이너는 그 안의 프로세스가 들어가는 동안에만 살아있는다. 즉 컨테이너 안에 서비스가 멈추게 되면 컨테이너는 종료된다.
- CMD : 도커 파일을 이용해서 이미지를 빌드하고 컨테이너가 시작되었을 때 실행되는 커맨드이다.
1 2
FROM alpine CMD ["echo", "Hello, World!"]
- 예를 들어 도커 파일에서 CMD [“echo”, “Hello World!”] 라고 지정하면 컨테이너가 시작되었을 때 echo Hello, World! 커맨드가 실행된다.
- 이 때 만약
docker run my-container echo "Hello again!"
으로 컨테이너를 시작한다면 CMD 인수를 재정의하므로 컨테이너가 시작되었을 때 echo Hello again! 커맨드가 실행된다.
- ENTRYPOINT : CMD와 같이 재정의하여 실행할 수도 있지만 ENTRYPOINT를 이용할 수 있다.
1 2
FROM apline ENTRYPONT ["echo"]
- ENTRYPONT를 echo로 지정한 후 컨테이너를 생성할 때
docker run my-container Hello
로 컨테이너를 시작하면 컨테이너 내부에서 echo Hello 커맨드를 정상적으로 실행시킨다. - 즉 argument가 필요할 때 ENTRYPOINT를 사용하면 간편하지만 argument를 지정하지 않으면 에러가 난다.
- ENTRYPONT를 echo로 지정한 후 컨테이너를 생성할 때
- argument 지정 없이도 default로 값을 지정하기 위해서는 CMD를 이용하여 default argument를 지정할 수 있다.
1 2 3
FROM apline ENTRYPONT ["echo"] CMD ["This is default Command"]
쿠버네티스의 command와 args
- 위 도커파일에서 정의했던 CMD와 ENTRYPOINT와 마찬가지로 쿠버네티스에서는 파드 안에서 동작하는 컨테이너를 위한 command와 args를 정의할 수 있다.
- 도커파일의 CMD 와 쿠버네티스의 args
1 2 3
FROM apline ENTRYPONT ["echo"] CMD ["Default Command"]
- 위 도커 파일을 통해 만들어진 my-container 이미지는 컨테이너가 실행되었을 때 echoDefault Command 커맨드가 실행된다. ``` apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers:
- name: my-pod image: my-container args: [“K8S Command”] ```
- 이를 쿠버네티스에서는 args를 이용하여 argument를 지정해줄 수 있다.
- 위 도커 파일을 통해 만들어진 my-container 이미지는 컨테이너가 실행되었을 때 echoDefault Command 커맨드가 실행된다. ``` apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers:
- 도커파일의 ENTRYPOINT와 쿠버네티스의 command
- 마찬가지로 도커 파일의 ENTRYPOINT에는 쿠버네티스의 command가 대응되어 오버라이딩하여 사용할 수 있다. ``` apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers:
- name: my-pod image: my-container command: [“echo”] args: [“K8S Command”] ```
- 마찬가지로 도커 파일의 ENTRYPOINT에는 쿠버네티스의 command가 대응되어 오버라이딩하여 사용할 수 있다. ``` apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers:
This post is licensed under CC BY 4.0 by the author.