컨테이너 생명주기와 관련 명령어

혀어어언·2023년 4월 7일
0

Docker

목록 보기
4/11

이번 포스트에서는 도커 컨테이너의 생명주기와 관련 명령어에 대해서 알아보겠습니다.

컨테이너 생명주기(Container Lifecycle)

1. Created(생성된)

  • 컨테이너가 생성되었지만 실행되고있지 않은 상태

  • 예시

    $ docker create --name app1 nginx:alpine 
    # nginx:alpine 를 사용해서 appi1이라는 이름의 컨테이너 생성

2. Running(실행중인)

  • 컨테이너가 활성화되어 실행중인 상태, 즉 프로세스가 실행중이라는 의미

  • 컨테이너가 생성되었거나 중지된 경우, docker start를 사용해 시작될 수 있습니다

  • 예시

    $ docker start app1
    # app1 실행
    $ docker run -d --name app2 nginx:alpine
    # 도커 생성과 실행을 한꺼번에 하려면 run 명령어를 사용하면 됩니다.
    # d 명령어를 통해 백그라운드에서 실행

3. Paused(일시 중지된)

  • 실행중인 컨테이너는 docker pause 명령어를 통해 일시 중지할 수 있습니다.

  • 특정 컨테이너 내부의 모든 프로세스를 일시 중지(suspending or freezing)하는 효과가 있으며 디스크(파일 시스템) 부분과 메모리(RAM) 부분 모두 컨테이너의 상태가 그대로 유지됩니다.

    • [참고] 일시 중지되었던 컨테이너는 자신이 일지정지되었다는 사실을 인식하지 못합니다.
    $ docker pause app1	# app1 컨테이너 일시중지
     $ docker unpause app1 # app1 컨테이너 일시중지 해제
  • [참고] 구현 세부사항
    • 일시중지(pause) 를 구현하기 위해 유닉스의 POSIX 신호가 아니라 freezer cgroup이 사용되었습니다.

4. Stopped(중지된)

  • 컨테이너가 중지되어도 디스크 부분의 상태는 유지되지만, 메모리 부분의 상태는 지워진다는 것이 일시중지(pause) 상태와 다른 점입니다.

    컨테이너가 중지되는 4가지 경우

    • docker stop 명령어 사용

      • 명령어 입력시 메인 컨테이너 프로세스는 기본적으로 SIGTERM를 받게 되고 유예기간이 지난 후 SIGKILL 신호를 받게 됩니다.
      • 유예기간은 기본적으로 10초이며 별도로 지정가능합니다.
      $ docker stop app1	# 유예기간 후 프로세스 종료
    • docker kill 명령어 사용

      • 기본동작으로 메인 컨테이너 프로세스에 SIGKILL 신호가 직접 전송됩니다.
      • 즉, 유예기간 없이 즉시 프로세스가 종료됩니다.
      • 참고로, docker killSIGKILL뿐만 아니라, -signal/-s 인수를 사용하여 컨테이너 프로세스에 모든 신호를 발행하는 데에도 사용할 수 있습니다.
      $ docker kill app2	# 프로세스 즉시 종료
      $ docker kill -s SIGINT app1	# SIGINT 신호 발행
    • 메인 컨테이너 프로세스가 종료 또는 완료된 경우

      • 컨테이너의 메인 프로세스가 종료/완료된 경우 컨테이너는 자동으로 중지됩니다.
        • 메인프로세스에 예외/인터럽트가 발생한 경우
        • 특정 시점 이후에 작업이 완료되는 경우
      $ docker run alpine echo "hi"	
      # 알파인 컨테이너 내에서 echo "hi" 명령을 실행하고 콘솔에 "hi"를 출력한 다음 echo 명령이 완료되면 즉시 종료
    • 메모리 부족 예외(OOME; Out Of Memory Exception) 가 발생한 경우

      • 컨테이너가 시스템에서 사용가능한 메모리보다 더 많으 메모리를 사용하려고 하는 경우 커널의 OOM killer에 의해 컨테이너 또는 도커 데몬이 종료됩니다.
      $ docker run -m 50m redis:alpine
      # m 옵션을 사용하여 컨테이너의 최대 가용 메모리를 제한
      # redis:alpine 이미지로 컨테이너를 실행, 최대 가용 메모리는 50mb로 제한

5. Deleted(삭제된)

  • 생성(created)되거나 중지(stopped)된 컨테이너는 docker rm 명령어로 삭제될 수 있습니다.

  • 즉, 실행중(running)이거나 일시중지(paused)된 컨테이너를 삭제하려고 시도할 경우에는 에러가 발생할 수 있습니다.

  • 해당 명령어를 통해 프로세스들, 파일 시스템, 볼륨과 네트워크 매핑 등의 컨테이너와 관련된 모든 데이터를 삭제할 수 있습니다.

    $ docker rm app1

[참고이미지] 컨테이너 생명주기 - 고급

0개의 댓글