콤퓨우터/필기: KodeKloud CKA 강의

96-97. Commands on Docker and Kubernetes

파란화면 2024. 5. 17. 00:25
반응형

Docker에서 명령어

예를 들어, 도커에서 docker run ubuntu로 우분투 이미지를 돌리면, 실행 즉시 종료되어 버린다.

  • docker ps에는 아무것도 보이지 않고, docker ps -a를 해야 그나마 종료되었다는 사실만을 알 수 있을것이다.
  • 왜째서인가?
    • Ubuntu의 Dockerfile을 보면, CMD ["bash"]라고 되어 있다.
    • bash는 터미널을 찾을 수 없으면 exit한다.
    • CMD가 끝났기 때문에, 컨테이너도 끝난다.

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됨)

ENTRYPOINTCMD를 동시에 사용하면, 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가 서로 덮어씌우는 관계에 있지 않다는 것에 유의!

반응형