Application Command

Yu Sang Min·2025년 6월 4일

CKA

목록 보기
31/110

📌 Docker file CMD

📖 시나리오

Docker Image로 ubuntu 컨테이너 운용

$ docker run ubuntu
  • 실행하자마자 즉시 증료된다
$ docker ps
  • 위 명령어로 실행중인 컨테이너를 출력시 아무것도 보이지 않는다
$ docker ps -a
  • 새 컨테이너가 종료 상태로 보인다

❓why

  • 가상 컴퓨터와 달리 컨테이너는 OS를 호스팅하도록 되어 있지 않다
  • 컨테이너는 특정 작업이나 프로세스를 실행한다(웹 서버, 응용 프로그램 서버, 데이터베이스 인스턴스 호스팅, 연산 또는 분석 수행 등등)
  • 작업을 마치면 컨테이너를 빠져나온다
  • 컨테이너는 그 안의 과정이 살아 있어야만 살 수 있다!
  • 컨테이너 안의 웹 서비스가 멈추거나 충돌하면 컨테이너는 종료

⚙️ 컨테이너 안에서 실행되는 프로세스는 누가 정의하는가?


👆🏻 Dockerfile 의 CMD 필드에 주목

  • 명령을 뜻하는데 프로그램을 정의 : 시작되면 컨테이너 안에서 실행될 명령
  • NGINX는 NGINX의 명령어
  • MySQL 이미지는 mysqld

➡️ Ubuntu Docker file

  • 위에서 하려고 했던건 Ubuntu 운영 체제로 컨테이너를 실행하는 것
  • 기본 명령으로(CMD 부분 참고) [“bash”]를 사용함
  • bash는 웹 서버나 DB 서버 같은 프로세스는 아님
  • 터미널의 인풋을 listen 하는 shell > 터미널을 못 찾으면 빠져나오게 됨
  • 때문에 기본값으로 Docker는 실행 중일때 컨테이너에 터미널을 연결하지 않음
  • bash 프로그램은 터미널을 찾지 못해 종료됨

💡 How to config CMD

  1. Docker run 명령어에 CMD 추가하기
    => 이미지에 지정된 기본 명령을 재정의
$ docker run ubuntu [COMMAND]
$ docker run ubuntu sleep 5
  • 위 예시는 컨테이너가 작동할때 sleep 5 를 실행하여 5초 기다렸다가 종료

이를 영구적으로 만들기 위해서는? 👉 컨테이너 시작시 sleep 명령어를 항상 실행하는 이미지를 만든다

  • shell command 방식이나 JSON 배열 포멧으로 입력하여 이미지에 CMD 필드를 작성한다.
  • JSON 방식으로 작성시 배열의 첫 번째 인덱스가 실행 가능 해야한다
  • JSON 방식으로 작성시 명령과 파라미터(매개변수)를 같이 입력하지 말것
  • 위 사진 처럼 작성 후 빌드 하여 실행하면 늘 5초만 sleep 하는 ubuntu 이미지를 만들 수 있다.

🔨 Change Parameter

$ docker run ubuntu-sleeper sleep 10
  • ubuntu-sleeper 라는 이미지는 이미 sleep 5명령을 가지고 있다- Dockerfile을 정의할때 CMD가 아닌 ENTRYPOINT 필드를 작성한다
  • ENTRYPOINT 가 컨테이너가 실행되고 수행할 명령을 의미함
  • 때문에 docker run ubuntu-sleeper 10 명령어 작동시 10초 슬립 후 종료됨
  • 이것이 CMDENTRYPOINT의 차이이다.
  • CMD의 지시사항에 따라 매개변수를 변경할 수 없다

🤪 매개변수 없이 ubuntu-sleeper 이미지를 실행하면?

  • 에러가 발생
  • default 값을 명시해주어야함
  • CMDENTRYPOINT를 모두 사용
  • 이 경우 매개변수를 지정하지 않았다면 5초 슬립한다!
  • 이렇게 구현 하기 위해 항상 ENTRYPOINTCMD를 JSON 배열 포멧으로 명시해야함

🏃🏻 런타임(실행중인) 동안 매개변수를 수정 하려면?

  • 위 사진대로 명령어를 실행
  • ENTRYPOINT를 하나 더 생성하고 다른 매개변수를 전달
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글