IT/CKA

CKA 준비과정 - Application Lifecycle Management (2) / Command

Primes 2023. 5. 31. 10:18
728x90

쿠버네티스에 대해 알아보기 전, Docker로 맛보기를 하고 들어간다.

 

docker run ubuntu 명령어를 실행하여도 실행중인 컨테이너 목록에는 보이지 않는다. 이는 즉시 종료되었기 때문이다.

=> VM과 달리, 컨테이너는 운영체제를 직접 호스팅하지 않는다. 특정 작업 및 프로세스를 실행하기 위한 공간이기 때문이다.

 

컨테이너 내에서 실행되는 프로세스는 프로그램을 정의하는 명령어가 실행한다.

위의 명령어들은 컨테이너 내에서 실행될 명령어이다. nginx는 cmd nginx, mysql은 cmd mysqld 가 프로세스를 시작하는 명령어이다.

 

하지만 ubuntu OS 이미지의 경우, 위와같은 프로세스를 "실행" 하는 명령어가 없다.

bash 는 default command로, 무언가 프로세스를 실행하는 명령어가 아니다. 터미널에서 명령 입력을 대기하는 쉘이 실행되는 것이며, 프로세스를 실행하는 것이 아니므로 종료된다.

따라서 컨테이너는 실행이 종료된다.

 

그렇다면 어떻게 해야 ubuntu 컨테이너를 종료시키지 않고 유지할 수 있도록 할 수 있는가?

 

 

컨테이너가 실행되고, 특정 프로세스가 실행되도록 하면 된다.

이미지 내 지정된 기본 명령인 cmd bash 를 무시하고 컨테이너 내의 ubuntu에서 특정 프로세스를 시작한다.

위 이미지에서는 sleep 5 커맨드를 지정해 5초 뒤에 컨테이너가 잠들도록 한다.

 

 

 

=> 하지만 이렇게 지정할 경우 컨테이너는 5초만 살아있고 다시 종료된다. 그렇다면 계속 돌아갈 수 있도록 하려면 어떻게 해야 하는가?

 

먼저 아래 명령어부터 알아본다.

상기 이미지에서 정의했던 5초 대기 커맨드를 가진 컨테이너를 이미지화 한다.

따라서 기본 ubuntu 이미지가 아닌 개인 커스텀 이미지를 생성한다. (ubuntu-sleeper)

이렇게 지정하게 되면, 명령어를 실행할 때마다 5초동안 타이머를 돌리고 종료되는 ubuntu 이미지를 생성할 수 있다.

이 때 주의할점은 명령어와 파라미터는 구분하여야 한다는 것이다. "sleep 5" 는 불가.

 

 

명령어로 파라미터를 수정하는 방법도 알아본다.

현재 설정은 5초만 잠들고 종료되도록 설정되어 있다. 그렇다면 10초 후 잠들도록 설정하려면 어떻게 하는가?

커맨드 자체를 직접 내릴 수도 있다.

docker run ubuntu-sleeper sleep 10

위와 같이 설정하면 컨테이너가 10초 후 잠들도록 직접적으로 명령을 내린다. 하지만 위와 같이 매번 명령을 내리는 것은 좋지 못하다.

 

이럴 때, Entrypoint(진입점) 을 사용한다.

진입점을 지정하게 되면, 명령어만 지정하고 파라미터는 지정하지 않는다. 명령을 내릴 때 파라미터를 지정하게 된다. 즉, 변수값이 되는 것이다.

 

진입점을 지정하였는데 파라미터를 설정하지 않으면, 위와같이 오류가 난다.

 

이제 쿠버네티스에서 살펴보도록 한다.

 

쿠버네티스에서도 동일한 방식으로 진행한다. 명령어의 차이와, yaml 파일로 작성 가능하다는 점에 차이가 있다.

yaml 파일에서는 command 필드를 추가함으로써 정의할 수 있다.

반응형