도커란 무엇인가? (컨테이너와 이미지)

컨테이너와 이미지의 차이점

Docker Compose
도커와 컨테이너와 이미지의 차이점이해하기
Author

gabriel yang

Published

October 10, 2024


도커란 무엇인가?

도커(Docker)는 소프트웨어를 컨테이너라는 독립적인 단위로 포장, 배포, 실행할 수 있게 해주는 플랫폼입니다. 컨테이너는 애플리케이션과 그 애플리케이션이 필요로 하는 모든 종속성을 포함하고 있어, 어떤 환경에서도 일관된 방식으로 실행될 수 있습니다. 이는 개발자와 운영팀 간의 협업을 더욱 용이하게 만들고, 소프트웨어 개발 및 배포의 효율성을 크게 향상시킵니다.

도커는 다음과 같은 이점을 제공합니다:

  • 이식성: 도커 컨테이너는 어디서나 동일하게 실행될 수 있습니다. 이를 통해 개발 환경과 운영 환경의 불일치 문제를 해결할 수 있습니다.
  • 경량화: 도커는 애플리케이션을 격리하여 실행할 수 있기 때문에, 가상 머신보다 적은 리소스를 사용합니다. 이는 더 많은 애플리케이션을 같은 서버에서 실행할 수 있게 해줍니다.
  • 빠른 배포: 컨테이너는 빠르게 생성하고 제거할 수 있어, 소프트웨어 배포 및 업데이트가 간편해집니다.

도커 시스템 구조

도커 시스템은 크게 세 가지 주요 구성 요소로 나눌 수 있습니다: 도커 클라이언트(Docker Client), 도커 데몬(Docker Daemon), 도커 이미지(Docker Image)도커 컨테이너(Docker Container)입니다.

  1. 도커 클라이언트 (Docker Client):
    • 도커 클라이언트는 사용자가 도커와 상호작용하는 인터페이스입니다. 사용자는 CLI(명령어 인터페이스) 또는 GUI(그래픽 사용자 인터페이스)를 통해 도커 명령어를 입력하고, 이를 통해 도커 이미지와 컨테이너를 관리합니다.
  2. 도커 데몬 (Docker Daemon):
    • 도커 데몬은 도커 클라이언트의 요청을 처리하고, 컨테이너를 생성, 실행 및 관리하는 백그라운드 프로세스입니다. 이 데몬은 도커 이미지를 빌드하고, 저장소에서 이미지를 다운로드하며, 컨테이너의 상태를 관리합니다.
  3. 도커 이미지 (Docker Image):
    • 도커 이미지는 애플리케이션과 그 애플리케이션이 필요로 하는 모든 파일, 라이브러리, 환경 변수, 설정 등을 포함한 읽기 전용 템플릿입니다. 이미지는 여러 계층으로 구성되어 있으며, 각 계층은 변경 사항을 포함합니다.
  4. 도커 컨테이너 (Docker Container):
    • 도커 컨테이너는 도커 이미지를 실행한 인스턴스입니다. 즉, 이미지를 기반으로 실행되고, 실제로 애플리케이션이 동작하는 환경을 제공합니다. 컨테이너는 각기 격리되어 있으며, 다른 컨테이너와 독립적으로 동작합니다.

도커 구조 다이어그램

다음은 도커를 실행 후 docker image를 사용하는 상태의 도커 시스템 구조를 나타낸 다이어그램입니다.

+-----------------------------------+
|           Docker Host             |
|                                   |
|  +-----------------------------+  |
|  |       Docker Daemon        |   |
|  |   (Manages Containers)     |   |
|  +-------------+---------------+  |
|                |                  |
|                |                  |
|                |                  |
|    +-----------v----------+       |
|    |   Docker Containers   |      |
|    |                       |      |
|    +-----------+-----------+      |
|                |                 |
|    +-----------v-----------+      |
|    |     Docker Images      |     |
|    +-----------------------+      |
+-----------------------------------+

컨테이너와 이미지의 차이

도커의 두 핵심 개념인 컨테이너이미지는 서로 밀접하게 연관되어 있지만, 그 기능과 역할은 다릅니다.

이미지 (Image)

도커 이미지란 애플리케이션과 그 애플리케이션이 필요로 하는 모든 파일, 라이브러리, 환경 변수, 설정 등을 포함한 읽기 전용 템플릿입니다. 이러한 이미지는 다음과 같은 특징이 있습니다:

  • 정적: 이미지는 생성된 후에는 수정할 수 없으며, 변경이 필요할 경우 새로운 이미지를 만들어야 합니다.
  • 복제 가능: 이미지는 여러 환경에서 재사용할 수 있으며, 특정 버전의 애플리케이션을 쉽게 배포할 수 있습니다.
  • 버전 관리: 이미지에는 태그를 붙일 수 있어, 다양한 버전을 관리하고 특정 버전으로 쉽게 롤백할 수 있습니다.

컨테이너 (Container)

도커 컨테이너는 도커 이미지를 실행한 인스턴스입니다. 즉, 이미지를 기반으로 실행되고, 실제로 애플리케이션이 동작하는 환경을 제공합니다. 컨테이너의 특징은 다음과 같습니다:

  • 동적: 컨테이너는 실행 중에 상태가 변경될 수 있으며, 로그 파일이나 데이터 파일과 같은 쓰기 가능한 파일을 포함할 수 있습니다.
  • 격리된 환경: 각 컨테이너는 다른 컨테이너와 격리되어 실행되므로, 서로의 환경에 영향을 미치지 않습니다.
  • 운영 중: 컨테이너는 애플리케이션이 실행되고 있는 상태이기 때문에, 실제로 사용자 요청을 처리하고 있습니다.

정리

요약하자면, 도커 이미지는 애플리케이션을 실행하기 위한 템플릿이며, 도커 컨테이너는 그 이미지를 기반으로 실제로 실행되는 인스턴스입니다. 이미지는 정적이고 읽기 전용인 반면, 컨테이너는 동적이며 실행 중에 상태가 변경될 수 있습니다. 이 두 개념은 도커의 핵심 기능을 이해하는 데 중요한 요소입니다.