Kubernetes

[Kubernetes] Commands and Arguments in Docker

thdwldud 2026. 10. 4. 18:17
728x90
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator(CKA) with Practice Tests 강의를 공부한 내용입니다.

 

Certified Kubernetes Administrator (CKA) with Practice Tests

<p><strong>CKA Certification Course – Certified Kubernetes Administrator</strong></p><p>Kubernetes is one of the highest trending technology in Cloud Computing as of today. Kubernetes had the fastest growth in job searches, over 173% from a year before,

www.udemy.com

컨테이너에서 실행되는 명령

Ubuntu 이미지 실행

docker run ubuntu

실행하면 컨테이너가 생성되었다가 바로 종료

실행 중인 컨테이너를 확인하면 아무것도 보이지 않음

docker ps

모든 컨테이너(종료된 것 포함)를 확인하면 컨테이너는 이미 종료됨

docker ps -a
CONTAINER ID    IMAGE    COMMAND      STATUS
45aacca36850    ubuntu   "/bin/bash"  Exited (0)

가상머신(VM)은 부팅되면 계속 실행됨. 하지만 컨테이너는 하나의 프로세스를 실행하기 위해 존재

예를 들어

  • 웹 서버
  • 데이터베이스
  • 애플리케이션 서버
  • 특정 작업(batch)

등 하나의 작업을 수행

컨테이너의 생명주기는 내부에서 실행되는 메인 프로세스(PID 1) 와 동일

Docker 이미지의 기본 명령

모든 Docker 이미지는 컨테이너가 시작될 때 실행할 기본 명령(Default Command) 을 가지고 있음

이미지 기본 CMD
nginx nginx
MySQL mysqld
Ubuntu bash

nginx Dockerfile 예시

Dockerfile에는 다음과 같이 CMD가 정의되어 있음

CMD ["nginx"]

즉, docker run nginx 로 nginx 이미지를 실행하면 nginx 프로세스가 실행되고 웹 서버는 계속 동작하기 때문에 컨테이너도 종료되지 않음

Ubuntu Dockerfile

Ubuntu는 다음과 같이 정의되어 있음

CMD ["bash"]

즉, docker run ubuntu 로 실행하면 bash 프로세스가 실행 됨

하지만 Bash는 쉘일 뿐이기에 터미널(TTY)이 연결되어 있지 않으면 컨테이너가 종료됨

  • 참고) Bash는 웹 서버처럼 계속 실행되는 프로세스가 아님. 따라서 터미널이 연결되지 않은 상태에서는 즉시 종료됨

기본 CMD 변경하기

Docker 실행 시 기본 CMD를 다른 명령으로 변경할 수 있음

예를 들어 Docker는 sleep 5를 실행해서 5초가 지나면 컨테이너가 종료됨

docker run ubuntu sleep 5

Dockerfile에서 CMD 변경하기

항상 sleep 5를 실행하도록 새로운 이미지를 만들 수도 있음

Shell 형식

FROM ubuntu
CMD sleep 5

Exec(JSON) 형식

FROM ubuntu
CMD ["sleep","5"]

이미지를 생성

docker build -t ubuntu-sleeper .

실행하면

docker run ubuntu-sleeper

자동으로 sleep 5 가 실행됨

ENTRYPOINT 사용하기

CMD만 사용하면 실행 시 전달한 값이 기본 명령 전체를 대체함

예시 Dockerfile

FROM ubuntu

ENTRYPOINT ["sleep"]
CMD ["5"]

이미지를 생성

docker build -t ubuntu-sleeper .

실행하면

docker run ubuntu-sleeper

실제로는 sleep 5 가 실행됨

실행 시 인자만 변경하기

docker run ubuntu-sleeper 10

 

📝CMD와 ENTRYPOINT의 차이

  • CMD만 사용하는 경우: 실행 시 전달한 값이 기본 명령 전체를 대체
  • ENTRYPOINT를 사용하는 경우: 실행 시 전달한 값은 ENTRYPOINT 뒤에 인자(Arguments)로 추가

ENTRYPOINT 자체 변경하기

sleep 대신 sleep2.0 같은 다른 실행 파일 사용하고 싶을 경우 --entrypoint 옵션 사용

예시 Dockerfile

FROM ubuntu

ENTRYPOINT ["sleep"]
CMD ["5"]

이미지 생성

docker build -t ubuntu-sleeper .

시간 변경 하려면

docker run ubuntu-sleeper 10

ENTRYPOINT 자체를 변경하려면

docker run --entrypoint sleep2.0 ubuntu-sleeper 10

CMD와 ENTRYPOINT 관계 정리

Dockerfile docker run 실제 실
CMD ["sleep","5"] docker run image sleep 5
CMD ["sleep","5"] docker run image 10 10 (CMD 전체가 대체됨)
ENTRYPOINT ["sleep"] + CMD ["5"] docker run image sleep 5
ENTRYPOINT ["sleep"] + CMD ["5"] docker run image 10 sleep 10
ENTRYPOINT ["sleep"] + CMD ["5"] docker run --entrypoint sleep2.0 image 10 sleep2.0 10

Kubernetes와의 연결

이 개념은 Kubernetes의 Pod 정의에서 그대로 사용

Docker의 ENTRYPOINT 는 Kubernetes의 command:

Docker의 CMD 는 Kubernetes의 args:

핵심 요약

  • 컨테이너는 하나의 메인 프로세스(PID 1) 를 실행하기 위해 존재한다.
  • 메인 프로세스가 종료되면 컨테이너도 종료된다.
  • Docker 이미지에는 기본 실행 명령인 CMD가 정의되어 있다.
  • docker run <image> <command>를 사용하면 기본 CMD를 변경할 수 있다.
  • CMD는 실행 시 전달한 값으로 전체 명령이 대체된다.
  • ENTRYPOINT는 실행 파일을 고정하고, 실행 시 전달한 값을 인자(Arguments) 로 추가한다.
  • -entrypoint 옵션을 사용하면 ENTRYPOINT 자체를 다른 실행 파일로 변경할 수 있다.
  • Kubernetes에서는 ENTRYPOINT → command, CMD → **args**로 대응된다.
728x90
반응형