Docker 개념 및 도커 핵심 기반 기술

Docker 개념

Docker란?

애플리케이션을 컨테이너화하고, 격리된 환경에서 실행할 수 있는 오픈 소스 컨테이너 플랫폼입니다.
도커 내부적으로 containerd라는 컨테이너 런타임이 사용됩니다. ★

도커는 이미지라는 읽기 전용 템플릿을 기반으로 컨테이너를 생성합니다.
컨테이너 이미지를 공유할 수 있는 레지스트리로 Docker Hub, Amazon ECR 등이 있습니다.

도커 이미지는 여러 개의 읽기 전용 레이어로 구성되며,
유니온 파일시스템 방식으로 각 레이어가 하나의 파일시스템처럼 결합됩니다.

컨테이너 실행 시에는 이미지의 읽기 전용 레이어 위에 쓰기 가능한 컨테이너 레이어가 추가됩니다.
각 레이어에는 이전 레이어 대비 변경된 파일 시스템의 변경 사항이 저장됩니다.

컨테이너화란?

애플리케이션 실행에 필요한 코드와 라이브러리,
설정 파일 등 의존성을 하나의 컨테이너 이미지로 패키징하여 ★
다양한 인프라 환경에서 일관되게 실행할 수 있도록 만드는 방식입니다.

컨테이너를 실행하기 위해서는 컨테이너 런타임이 필요합니다. ★
일반적으로 AWS EKS 등 쿠버네티스 환경에서는 containerd가 사용됩니다.

VM, Container 차이점

VM은 Hypervisor라는 소프트웨어가 CPU, 메모리, 디스크 등 하드웨어 자원을 가상화하고
각각의 VM이 독립된 OS를 격리된 환경에서 실행할 수 있도록 합니다.

Container는 호스트 OS 커널을 공유하고, 컨테이너 엔진이 각 애플리케이션을 격리된 환경에서 실행합니다.
Windows, macOS에서는 Linux VM을 생성하고, Linux 커널을 이용해 Docker 컨테이너가 실행됩니다.


Docker 핵심 기반 기술

도커 컨테이너 기술은 리눅스 운영체제 커널의 namespace, cgroup 기능을 사용하여
다른 프로세스에 영향을 주지 않도록 격리하고 CPU 시간, 메모리 등 자원 사용량을 제한 및 관리합니다.

cgroup

프로세스 그룹별로 CPU 시간, 메모리 등 자원 사용량을 제한하고 관리할 수 있는 리눅스 커널 기능입니다.

컨테이너별 자원 제한 설정 및 사용량은 /sys/fs/cgroup에 마운트된 cgroup 파일시스템에
파일 형태의 인터페이스로 표현되며, 리눅스 커널이 자원 사용을 제어하게 됩니다.

Namespace

프로세스가 볼 수 있는 시스템 자원을 서로 분리하는 리눅스 커널 기능입니다.

도커는 각 컨테이너가 서로 독립된 환경처럼 동작하도록 별도의 Namespace를 사용하여
다른 컨테이너와 프로세스, 네트워크 자원, 파일시스템 등을 격리합니다.

Network Namespace를 통해 각 컨테이너는 독립된 네트워크 스택을 가질 수 있습니다.