Cloud/k8s-CKAD

[CKAD] Dockerfile과 yaml 실행 필드 관련 관계

jinkwon.kim 2024. 1. 29. 22:54
728x90
반응형

개요

dockerfile의 실행 관련 필드들이 yaml에서 어떻게 연관되는지 알아보겠습니다.

연관 관계

Dockerfile(좌)의 ENTRYPOINT과 CMD 옵션이yaml(우)에 command와 args로 override 됩니다.

주의 사항

1. Dockerfile에 ENTRYPOINT와 CMD 필드가 있는데 yaml에 command만 있으면 어떻게 되는가?

[Dockerfile]

ENTRYPOINT ["/bin/myapp"]
CMD ["defaultarg"]

[yaml]

command: ["/bin/otherapp"]

이 경우, Kubernetes YAML 파일의 command 설정은 Docker 이미지의 ENTRYPOINT를 재정의합니다. 그러나 args가 지정되지 않았기 때문에, Docker 이미지의 CMD는 무시됩니다. 결과적으로, 컨테이너는 다음 명령으로 실행됩니다:

/bin/otherapp

 

2. Dockerfile에 ENTRYPOINT와 CMD 필드가 있는데 yaml에 args만 있으면 어떻게 되는가?

[Dockerfile]

ENTRYPOINT ["/bin/myapp"]
CMD ["defaultarg"]

[yaml]

args: ["newarg1", "newarg2"]

이 경우, Kubernetes YAML 파일의 args 설정은 Docker 이미지의 CMD를 재정의합니다. 그러나 command가 지정되지 않았기 때문에, Docker 이미지의 ENTRYPOINT는 그대로 유지됩니다. 결과적으로, 컨테이너는 다음 명령으로 실행됩니다

/bin/myapp newarg1 newarg2

 

yaml 파일의 container 실행 관련 필드

command 필드 사용방법

형식

command ["excutable_binary", "param1", "param2"]

값 의미

  • 첫 번째 인자는 실행가능한 파일을 넣어주어야 합니다. 
  • 각 값들은 " "로 감싸주어야 합니다.
  • 숫자의 경우 " " 로 감싸지 않으면 cannot convert int64 to string 이러한 오류가 발생합니다.

args 필드 사용법

형식

args ["parm3", "param4" ]

값 의미

나열된 모든 값은 command의 param으로 추가로 전달이 됩니다.

 

아래 예제의 경우 

command ["excutable_binary", "param1", "param2" ]

args ["parm3", "param4" ]

 

container에서 아래와 같이 처음에 실행이 됩니다.

"excutable_binary" "param1" "param2" "param3" "parma4"

kubectl로 명령어 전달하기 

args만 수정

kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>

Ex) kubectl run webapp-green --image==kodekloud/webapp-color -- --color green

command 까지 수정

kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>

Ex) kubectl run webapp-green --image==kodekloud/webapp-color --command -- python app.py --color green

정리

Dockerfile과 yam파일에서 실행 관련된 연관필드는 아래와 같습니다. 

항목 Dockerfile YAML
필드1 ENTRYPOINT command
필드2 CMD args

 

ENTRYPINT/command는 첫 번째인 자로 "실행 파일"을 넣어야 하고, CMD/args는 ENTRYPINT/command의 추가 인자로 전달이 됩니다. 

yaml파일에서 comman를 사용하게되면 ENTRYPOINT를 override 하며 CMD를 초기화시켜버립니다. 이점을 유의해야 합니다. 

그러나 yaml파일에서 args를 사용하면 ENTRYPINT는 그대로 유지하며 CMD만 재정의합니다.

728x90
반응형

'Cloud > k8s-CKAD' 카테고리의 다른 글

[CKAD] 환경 변수 Configmap 과 Secret 사용하기  (0) 2024.01.30
[CKAD] Dockerfile의 모든것  (0) 2024.01.10