인프런, 유데미/개발자를 위한 쉬운 도커

이미지와 컨테이너의 라이프사이클

5_hyun 2025. 5. 31. 21:40
반응형

이미지

소프트웨어의 실행법부터 알아보자

  • 하드웨어 자원을 이용할 수 있게 해주는 OS가 필요
  • 라이브러리패키지에 의존하여 실행 혹은 런타임 언어가 필요
  • 개발자가 개발한 애플리케이션이나 다운로드 받은 소프트웨어가 필요

하지만 도커에서는 이런 과정 없이 이미지를 실행함.

어떻게 가능한걸까?

  • 예를 들어 Nginx 이미지를 실행하면, 이미지를 통해서 컨테이너를 실행했기 때문
  • 이미지는 파일 시스템의 특점 시점을 저장해 놓은 압축 파일임
  • 이미지는 소프트웨어가 실행되기 위해 필요한 모든 것들을 미리 준비해서 압축
  • 따라서 이미지를 다운 받아서 OS의 격리된 공간에서 컨테이너가 실행되는 것

-이미지의 특성

  • 이미지는 운영 체제의 백업 기능(스냅샷)과 유사하다.
    • 언제든지 해당 시점의 소프트웨어를 실행할 수 있기 때문이다.
  • 하지만 이미지는 백업 기능이나 스냅샷보다 크기가 작음
    • 따라서 인터넷을 통해서 저장하고 공유하기 수월하다.

이미지와 컨테이너

  • 이미지는 프로그램, 컨테이너는 프로세스라고 생각하면 된다.
  • 이미지는 디스크를 차지, 컨테이너는 메모리와 CPU를 점유
    • 격리된 공간에서 이미지에서 사전에 지정해 둔 프로그램이 프로세스로 실행
  • 하나의 이미지로 여러 개의 컨테이너 실행 가능

이미지와 메타데이터

  • 이미지 메타데이터는 이미지가 실제로 압축된 데이터
  • 메타데이터는 이미지의 데이터를 기록하는 데이터(이미지의 이름, 아이디, 사이즈 등등)
  • 메타데이터에는 env, cmd를 주로 봐야 함,
    • env는 애플리케이션이 사용하는 환경 설정 값이며 key=value 형식, 소프트웨어 정보나 프로그램을 실행할 때 필요한 파일 경로 같은 정보가 포함, 즉 소프트웨어가 사용할 설정 정보 
    • cmd는 이미지를 컨테이너로 실행 시 명령어를 지정할 수 있다. 이미지를 컨테이너로 실행할 때 CMD에 있는 명령어를 통해서 어떤 프로그램을 실행할지를 메타데이터에서 결정
  • 즉, 이미지의 압축 파일과 메타데이터를 사용해서 컨테이너가 만들어짐
  • 메타데이터는 컨테이너를 실행할 때 새로운 값으로 덮어쓸 수 있음
    • 따라서 이미지 안에 있는 다른 프로그램을 실행할 수도 있음

컨테이너의 라이프사이클

  • create
    • 이미지를 컨테이너로 만들 수 있음
    • 컨테이너를 실행하기 위한 격리된 공간이 만들어지는 상태
    • 네트워크, 스토리지, 환경 변수 같은 모든 리소스가 격리된 공간인 컨테이너로 분리된 상태
    • 하지만 생성 단계에서는 내부에서 프로세스를 실제로 실행하지 않기 때문에 호스트 OS의 CPU와 메모리를 사용하지 않음
    • 컨테이너  메타데이터의 cmd와 env 명령어를 사용해서 컨테이너를 러닝 상태로 만들 수 있음
  • running
    • 컨테이너에서 프로세스가 실행 중이라는 것을 의미
    • 호스트 OS의 CPU와 메모리를 사용
    • 실행 중인 프로세스에 종료나 재시작 신호를 보내면 보내면 10초 뒤에 명령 수행
  • paused
    • 컨테이너에서 실행 중인 모든 프로세스가 일시 중지된 상태
    • 일시 중지한다는 것은 현재의 상태를 모두 메모리에 저장해 두는 것
    • CPU는 사용하지 않고, 메모리만 사용
    • unpause 명령어를 사용하면 프로세스를 일시 정지한 시점부터 재시작 가능
  • stopped
    • 컨테이너에서 실행 중인 프로세스를 완전히 중단시켰다는 것을 의미
    • 메모리와 CPU 사용이 모두 중단
    • 종료된 컨테이너를 다시 시작하면 프로세스가 처음부터 다시 실행
  • deleted
    • rm 명령어를 이용해서 삭제 가능
    • 실행 중인 컨테이너를 삭제하려면 -f 옵션을 사용해야 함

 

-출처

https://www.inflearn.com/courses/lecture?courseId=332726&type=LECTURE&unitId=199036&subtitleLanguage=ko

 

이미지 레지스트리 실습 | 개발자를 위한 쉬운 도커

이미지 레지스트리 실습

www.inflearn.com

 

반응형