리그캣의 개발놀이터

도커 컨테이너 docker container lifecycle 본문

인프라/Docker

도커 컨테이너 docker container lifecycle

리그캣 2021. 8. 3. 21:00

도커 컨테이너 라이프사이클에 대해서 알아봐야겠다.

Docker Container 생성시의 상태는 아래의 값을 따른다.

  • Created : 생성되었지만 컨테이너는 시작하지 않은 상태 (컨테이너를 구동할 수 있는 준비상태를 만드는 단계)
  • Running : 컨테이너상 프로세스와 함께 컨테이너를 실행하는 상태
  • Paused : 프로세스가 일시 중지된 컨테이너 상태
  • Stopped : 컨테이너가 중지된 상태
  • Deleted :  중지되어있는 컨테이너가 삭제된 상태

화살표에 표시된것은 docker의 명령어이고, 해당 명령어를 통해 변화되는 컨테이너 상태를 동그라미로 표현했다.

내가 Container Lifecycle에 대해서 궁금증을 갖은 이유는 하기 문제를 풀게되면서 부터이다.

testdome이라는 사이트인데, DevOps 관련 questions를 제공해주기도 한다. 심심할때 풀어보길 추천한다.

https://www.testdome.com/questions/docker/container-lifecycle/50933?visibility=3&skillId=1005 

 

1. When a virtual machine completes startup, it runs the following command to ready the custom container image:

docker create --name balanced-container company-image

2. When the load balancer detects high usage, it signals the virtual machine to make the container available for use. The VM runs the following command: 나는 하기의 명령어가 start라고 생각한다.

docker '     '  balanced-container

3. The load balancer detects that a container has been underutilized for more than 15 minutes. It signals the VM to suspend the container to conserve CPU resources. The VM runs the command: 나는 하기의 명령어가 pause라고 생각한다.

docker '     ' balanced-container

4. Finding an increased load again, the load balancer signals the VM to awaken the container. The VM runs the command: 나는 해당 명령어가 unpause라고 생각한다.

docker '    ' balanced-container

5. After an hour of underutilization, the load balancer signals the VM to gracefully end all processes in the container to conserve RAM resources. The VM runs the command: 나는 하기 명령어가 stop이라고 생각한다.

docker '    ' balanced-container

정답 제출 결과 맞았다는 것을 확인할 수 있었다. 

 

그렇다면, docker command를 사용하여 해당 상태변경을 어떤식으로 유도할 수 있을지 알아보자.

 

맨 처음 그렸던 그림을 참고하며 진행해보자.

 

1. 컨테이너 생성하기 (Create container)

컨테이너를 생성하지만, 실행되어 있지는 않은 상태이다.

docker create --name <container name> <image name>

2. 컨테이너 실행하기 (Running container)

-d 플래그는 백그라운드에서 컨테이너를 실행하며, -i는 표준입력(stdin)을 활성화 하여 컨테이너와 연결되어 있지않더라도 표준입력을 유지,  -t 는 tty 모드를 사용한다. (bash를 사용하려면 해당 옵션을 필수적으로 설정해야한다.)

docker run -it -d --name <container name> <image name> bash

 * 가끔 컨테이너 생성 후 실행을 동시에 하고 싶으면 create를 하지않고 docker run 명령어만 사용하면 된다.

3. 컨테이너 일시중지 (Pause container)

프로세스를 일시중지하여 해당 컨테이너를 사용하지 않을시 리소스 낭비를 줄인다.

docker pause <container-id/name>

4. 컨테이너 일시중지 해제 (Unpause container)

docker unpause <container-id/name>

5. 컨테이너 시작 (Start container)

stopped 된 컨테이너를 시작할 수 있다.

docker start <container-id/name>

6. 컨테이너 중지 (Stop container)

컨테이너와 컨테이너 내부에서 실행중인 프로세스를 중지시킨다.  <- 컨테이너도 중지시킨다는 점이 pause랑 다른것같다.

docker stop <container-id/name>

7. 컨테이너 삭제 (Remove container)

created 되거나, stopped된 컨테이너를 삭제할 수 있다.

docker rm <container-id/name>

도커 컨테이너의 간단한 라이프 사이클에 대해서 알아봤다.

틀리거나 다른점이 있으면 언제든지 정정해주시면 감사하겠습니다!

ref

- https://medium.com/@BeNitinAgarwal/lifecycle-of-docker-container-d2da9f85959

- https://k21academy.com/docker-kubernetes/docker-container-lifecycle-management/

- https://racoonlotty.tistory.com/entry/Docker-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EB%9D%BC%EC%9D%B4%ED%94%84-%EC%82%AC%EC%9D%B4%ED%81%B4?category=730303 

 

 

 

Comments