도커 (Docker)

2025. 1. 4. 23:07CI CD/Docker

도커(Docker)란?

도커는 소프트웨어를 실행하는 데 필요한 모든 것을 하나의 패키지로 묶어, 다양한 환경에서 동일하게 동작하도록 보장하는 컨테이너 기반 오픈 소스 플랫폼. 이를 통해 개발, 배포, 실행 환경 간의 불일치를 해소하고, 애플리케이션 실행을 단순화하며 효율적으로 만든다.


도커의 역사

  1. 컨테이너 기술의 기원
    • 컨테이너 기술은 1970년대 UNIX의 chroot 명령어에서 시작되었습니다. chroot는 프로세스를 별도의 파일 시스템으로 격리하는 초기 기술로, 이후 컨테이너 기술의 기반이 되었다.
    • 2000년대 중반에는 Solaris Zones(2004), OpenVZ(2005), Linux Containers(LXC) 등이 등장하며 컨테이너 기술이 본격적으로 발전.
  2. 도커의 등장과 발전
    • 도커는 2013년, 솔로몬 하이크스(Solomon Hykes)와 그의 팀이 dotCloud라는 회사에서 개발.
    • 도커는 기존 컨테이너 기술(LXC)을 기반으로 더 간단하고 유연한 도구를 제공하며, 컨테이너화 기술의 대중화를 이끌었다.
    • 2014년에는 자체 기술인 libcontainer를 도입하며 LXC에 의존하지 않게 되었고, 오픈 컨테이너 이니셔티브(OCI)를 통해 컨테이너 표준을 정립하는 데 기여.

도커의 동작 원리

1. 컨테이너의 개념

컨테이너는 애플리케이션과 그 실행에 필요한 환경(라이브러리, 설정 파일 등)을 하나의 단위로 묶어, 운영체제 수준에서 격리된 환경에서 실행되도록 한다.
컨테이너는 호스트 운영체제의 커널을 공유하므로 가상머신보다 가볍고 빠른 실행이 가능.


2. 도커의 구성 요소

(1) 도커 이미지(Docker Image)

  • 도커 이미지는 애플리케이션 실행에 필요한 모든 것을 포함한 변하지 않는 템플릿.
  • 이미지는 여러 레이어(layer)로 구성되어 있으며, 각 레이어는 이전 상태에서 변경된 내용만 포함하여 효율적인 저장 및 배포를 가능하게 한다.

(2) 도커 컨테이너(Docker Container)

  • 컨테이너는 이미지를 실행한 애플리케이션의 인스턴스.
  • 이미지의 읽기 전용 레이어 위에 쓰기 가능한 레이어가 추가되어, 실행 중 데이터가 저장되거나 변경될 수 있다.

(3) 도커 데몬(Docker Daemon)

  • 데몬은 도커의 백그라운드 프로세스로, 컨테이너 생성, 실행, 중지 등을 관리.
  • 도커 CLI(명령줄 인터페이스)로부터 명령을 받아 작업을 수행.

(4) 도커 클라이언트(Docker CLI)

  • 도커 클라이언트는 사용자가 도커와 상호작용할 수 있는 도구.
  • 주요 명령어:
    • docker build: 이미지를 생성
    • docker run: 컨테이너 실행
    • docker ps: 실행 중인 컨테이너 확인

(5) 도커 레지스트리(Docker Registry)

  • 레지스트리는 도커 이미지를 저장하고 배포하는 공간.
  • 가장 많이 사용되는 공용 레지스트리는 Docker Hub.

3. 도커의 작동 과정

  1. 이미지 생성
    • 사용자가 작성한 Dockerfile을 기반으로 도커 이미지를 생성.
    • Dockerfile에는 애플리케이션 실행 환경, 의존성 설치 방법, 실행 명령 등이 포함.
  2. 컨테이너 실행
    • 생성된 이미지를 기반으로 컨테이너를 실행.
    • 컨테이너는 호스트 운영체제의 커널을 공유하며 독립적으로 실행.
  3. 호스트 시스템과의 상호작용
    • 컨테이너는 네트워크와 파일 시스템을 통해 호스트 시스템과 데이터를 주고받을 수 있다.

4. 도커의 핵심 기술

(1) 네임스페이스(Namespaces)

  • 리눅스 커널 기술로, 프로세스를 격리하여 독립적인 환경을 제공.
  • 컨테이너마다 별도의 파일 시스템, 프로세스 ID, 네트워크 등을 할당.

(2) Cgroups(Control Groups)

  • 컨테이너가 사용할 수 있는 CPU, 메모리, 네트워크 등을 제한하거나 관리.
  • 이를 통해 특정 컨테이너가 시스템 리소스를 독점하지 못하도록 함.

(3) UnionFS (Union File System)

  • 여러 파일 시스템 레이어를 하나로 결합하여 읽기 전용 이미지를 기반으로 쓰기 가능한 컨테이너를 제공.
  • 이를 통해 효율적인 저장과 빠른 배포가 가능.

도커의 특징

특징 설명
경량성 컨테이너는 가상머신과 달리 별도의 운영체제를 포함하지 않아 빠르고 가볍다.
이식성 컨테이너는 동일한 환경을 제공하므로 어디에서든 똑같이 실행된다.
격리성 컨테이너는 애플리케이션을 격리하여 충돌을 방지.
확장성 여러 컨테이너를 손쉽게 생성, 실행, 종료할 수 있어 대규모 배포에 적합.

도커와 기존 가상화 기술의 차이점

항목 도커(컨테이너) 가상머신(Virtual Machine)
운영체제 공유 호스트 운영체제 커널 공유 각 가상머신에 별도의 운영체제 포함
속도 빠르고 경량 느리고 무겁지만 더 높은 격리 제공
리소스 사용량 적음 많음
배포 편의성 빠르고 간단 복잡하고 무거운 이미지를 배포해야 함

도커의 주요 활용 사례

  1. 개발 및 테스트 환경 구축
    • 개발자들이 동일한 환경에서 프로그램을 실행하고, 테스트할 수 있도록 지원.
  2. 마이크로서비스 아키텍처
    • 각 서비스마다 별도의 컨테이너를 사용해 독립적으로 배포 및 관리할 수 있다.
  3. CI/CD 파이프라인
    • 컨테이너를 통해 지속적인 통합 및 배포 프로세스를 자동화.

참고 자료

  1. 도커 공식 문서: https://docs.docker.com/
  2. 리눅스 컨테이너 기술 개요: https://linuxcontainers.org/
 

Home

Docker Documentation is the official Docker library of resources, manuals, and guides to help you containerize applications.

docs.docker.com

 

Linux Containers

The umbrella project behind Incus, LXC, LXCFS, Distrobuilder and more.

linuxcontainers.org

 

'CI CD > Docker' 카테고리의 다른 글

Docker 볼륨 (Volume)  (0) 2024.08.03
Docker 바인드 마운트 (Bind Mount)  (0) 2024.08.03
Docker 컨테이너 실행 옵션  (0) 2024.08.03
Docker 기본 사용법  (0) 2024.08.03