[Docker] Docker와 Container에 대해 이해하기

 

Docker & Container 이해하기

Docker & Container 란?

  • Docker란?
    Docker는 애플리케이션의 실행에 필요한 환경을 하나의 이미지로 모아두고, 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용하기 위한 오픈소스 플랫폼입니다.
  • 컨테이너란?
    Docker 이미지로 부터 생성되며, 호스트 OS상에 논리적인 구획을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션을 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것입니다.
    • 호스트 OS의 리소스를 논리적으로 분리시키고, 여러 개의 컨테이너가 공유하여 사용함
    • 컨테이너는 오버헤드가 적기 때문에 가볍고 고속으로 작동 함 (시작 및 종료 사용되는 리소스 작음)

 

가상화 기술과 컨테이너 기술 비교

 

  • 가상 머신(VM)
    • 하드웨어 기반의 여러 게스트 운영 체제
    • 하이퍼바이저를 통해 에뮬레이션됨
    • 운영체제 및 다양한 라이브러리가 같이 올라가기 때문에 크기가 큼 (GB)
  • 컨테이너
    • 애플리케이션 수준 구성
    • 커널 하나를 공유하는 여러 가상 환경을 에뮬레이션함
    • 애플리케이션 및 파일 시스템만 올라가기 때문에 크기가 작음 (MB)

 

Docker 아키텍처

출처 : https://pt.wikiversity.org/wiki/Ficheiro:ArquiteturaDocker.png

 

Client

클라이언트인 CLI(Docker)를 통해 각 커맨드로 데몬 프로세스와 통신합니다.

  • docker 이미지 만들기: docker image build (빌드)
  • docker 이미지 공유: docker image push/pull (공유)
  • docker 컨테이너 작동 : docker container run (실행)

 

Docker_Host

  • Docker daemon
    다른 Docker 데몬과 통신하거나 Docker API요청을 기다리고 이미지, 컨테이너, 네트워크, 볼륨 등을 관리하는 역할을 합니다.
  • Images
    Docker컨테이너를 구성하는 파일 시스템과 실행할 애플리케이션 설정을 하나로 합친 것으로, 컨테이너를 생성하는 템플릿 역할을 합니다.
  • Containers
    Docker 이미지를 기반으로 생성되며, 파일 시스템과 애플리케이션이 구체화 되어 실행되는 상태입니다.

 

Registry

  • Docker 이미지 저장소로 기본적으로 Docker Hub라는 퍼블릭 레지스트리로 설정되어 있고 프라이빗 레지스트리도 생성할 수 있습니다. docker datacenter(DDC) 를 사용하는 경우,  Docker Trusted Registry(DTR) 로 부터 pull, push 할 수 있습니다.

 

Docker 이미지와 컨테이너의 관계

 

이미지 변경 (레이어)

도커 이미지는 여러 레이어로 구성되어 있습니다. 예를 들어, application A라는 베이스 이미지가 있다고 가정해보겠습니다.

  1. application A
    실행 파일과 라이브러리 등을 포함한 베이스 이미지입니다.
  2. application A'
    기존 이미지 위에 일부 파일(코드, 설정 등)을 수정하면 새로운 레이어가 추가됩니다. 이때 도커는 전체를 다시 만드는 게 아니라 변경된 부분만 새로운 레이어로 덧붙입니다.
  3. application A"
    다시 또 수정이 이루어지면, 또 하나의 변경 레이어가 추가됩니다.

이처럼 도커 이미지는 기존 레이어 + 변경 레이어의 누적 구조로 구성됩니다. 변경 사항이 누적될수록 여러 레이어가 겹쳐지며, 실제 이미지는 계층 구조를 가지게 됩니다.

 

컨테이너 실행 (프로세스 관점)

도커 컨테이너가 실행되면 도커 엔진은 해당 이미지의 **모든 레이어를 합쳐서 읽기 전용(Read-Only)**으로 마운트한 후, 여기에 하나의 읽기-쓰기 가능한 레이어를 최상단에 덧붙입니다.

  • 이 최상단 레이어가 바로 컨테이너가 동작하면서 변경하는 파일, 로그 등이 저장되는 공간입니다.
  • 따라서 컨테이너 내에서 파일을 수정하면, 실제로는 이 writable 레이어에만 적용되고, 이미지 자체는 변경되지 않습니다.

 

정리

  • 도커 이미지는 레이어 방식으로 효율적이고 재사용 가능한 구조를 갖습니다.
  • 컨테이너는 이미지의 모든 레이어 + 실행 중 발생하는 변경 사항을 포함하는 writable 레이어로 구성됩니다.
  • 이 구조 덕분에 도커는 이미지 버전 관리와 컨테이너 실행을 빠르고 유연하게 할 수 있습니다.