반응형
Docker에서 명령어
예를 들어, 도커에서 docker run ubuntu
로 우분투 이미지를 돌리면, 실행 즉시 종료되어 버린다.
docker ps
에는 아무것도 보이지 않고,docker ps -a
를 해야 그나마 종료되었다는 사실만을 알 수 있을것이다.- 왜째서인가?
- Ubuntu의 Dockerfile을 보면,
CMD ["bash"]
라고 되어 있다. - bash는 터미널을 찾을 수 없으면 exit한다.
- CMD가 끝났기 때문에, 컨테이너도 끝난다.
- Ubuntu의 Dockerfile을 보면,
docker run ubuntu 우분투에서-실행할-명령어
를 하면, Dockerfile의 CMD ["bash"]
가 오버라이드(대체) 된다.
- 혹은, 다음처럼 새로운 Dockerfile을 만들 수도 있다.
FROM ubuntu
CMD sleep 5
CMD는 다음과 같은 형식을 할 수 있다.
CMD command param1
CMD ["command", "param1"]
주의:
CMD ["command param1"]
은 불가능하다.
Entrypoint
CMD
가 아니라 ENTRYPOINT
를 사용하면-
FROM ubuntu
ENTRYPOINT ["sleep"]
docker run ubuntu-sleeper 10
을 했을 때, sleep 10
이 실행되게 된다. (파라미터가 오버라이드되지 않고 append됨)
ENTRYPOINT
와 CMD
를 동시에 사용하면, CMD에 기본값을 넣는 식으로 응용할 수가 있다.
- 위의 예제는 별도 파라미터 없이
docker run ubuntu-sleeper
를 했을 때, 그냥sleep
이 파라미터 없이 실행돼서sleep: missing operand
같은 오류를 뿜을 것이다. - 하지만,
ENTRYPOINT ["sleep"]
로 하고,CMD ["5"]
로 지정한다면?
엔트리포인트도 override가 가능하긴 하다 - --entrypoint
옵션을 주면 된다
- 권장되는 것은 아님
쿠버에서 명령어
Docker 명령행에서 docker run --name 컨테이너명 이미지명 파라미터
같은 식으로 들어갔는데, Pod에서는 이 파라미터를 어떻게 줄 수 있는가?
spec.containers.args
에 주면 된다.args
은, Dockerfile의CMD
를 오버라이드한다.
spec:
containers:
- name: ubuntu-sleeper
image: ubuntu-sleeper
args: ["10"]
만약 Entrypoint를 오버라이드하고 싶으면?
spec.containers.command
를 넣으면 된다.- 역시 권장되는 사항은 아니다.
spec: containers: - name: ubuntu-sleeper image: ubuntu-sleeper command: ["sleep2.0"]
- 역시 권장되는 사항은 아니다.
쿠버의 command 와 Dockerfile의 CMD가 서로 덮어씌우는 관계에 있지 않다는 것에 유의!
반응형
'콤퓨우터 > 필기: KodeKloud CKA 강의' 카테고리의 다른 글
122-127. OS Upgrades, Kubernetes Software Versions, Cluster Upgrade Process (0) | 2024.05.17 |
---|---|
100-104. Environment Variables and Configure Secrets in Application (0) | 2024.05.17 |
92. Rolling Updates and Rollbacks (0) | 2024.05.17 |
84-87. Monitor Cluster Components, Managing Application Logs (0) | 2024.05.17 |
80. Configuring Scheduler Profiles (0) | 2024.05.17 |