[docker] 컨테이너 기술과 Docker의 개요

develop, docker
written byzuhern1zuhern

in

2021. 02. 14


공부하는 책
완벽한 IT 인프라 구축을 위한 Docker (2판)
복습을 위해 요약한 것.

목표

docker 책 2장 내용 숙지

  • Docker의 배경에 있는 컨테이너 기술이 어떤 것인지 학습
  • Docker는 컨테이너 기술을 사용하여 애플리케이션의 실행 환경을 구축 및 운용하기 위한 플랫폼
  • 애플리케이션의 실행에 필요한 것을 하나로 모아, Docker 이미지를 관리함으로서 애플리케이션의 이식성을 높일 수 있음

2.1 컨테이너 기술의 개요

2.1.1 컨테이너

  • 컨테이너란 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 마치 하나의 별도 서버인 것 처럼 사용할 수 있게 만든 것
  • 호스트 OS의 리소스를 논리적으로 분리

2.2 Docker의 개요

  • 어플의 실행환경을 하나의 이미지로 모아두고, 그 이미지를 사용하여 다양한 환경에서 어플 실행환경을 구축,운용하기 위한 오픈소스 플랫폼
  • 내부에서 컨테이너 기술을 사용하고 있는 것이 특징
  • 인프라 환경을 컨테이너로 관리 (어플의 실행에 필요한 모든 파일, 디렉토리들을 컨테이너로 모음)
  • 컨테이너의 바탕이 되는 Docker 이미지를 Docker Hub와 같은 레포지토리에서 공유

2.3 Docker의 기능

  • build: Docker 이미지를 만드는 기능
  • ship: Docker 이미지를 공유하는 기능
  • run: 컨테이너를 작동시키는 기능

2.3.1 Build (Docker 이미지 생성)

  • 프로그램, 라이브러리, 미들웨어, OS나 네트워크 설정을 하나로 모아 Docker 이미지를 생성
  • Docker 이미지의 정체는 어플 실행에 필요한 파일들이 저장된 디렉토리

2.3.2 Ship (Docker 이미지 공유)

  • Docker hub

2.3.3 Run (Docker 컨테이너 작동)

  • Docker 설치된 환경에 Docker 이미지로 컨테이너 작동시킬 수 있음.
  • 여러개의 컨테이너 기동시킬 수도 있음

2.3.4 Docker 에디션

  • Docker Community Edition (CE): 무료
  • Docker Enterprise Edition (EE): 상용 이용에 적합 (Basic, Standard, Advanced)

2.3.4 Docker 컴포넌트

  1. Docker Engine: (핵심기능) Docker 이미지 생성, 컨테이너 기동
  2. Docker Registry: 이미지 공개 및 공유
  3. Docker Compose: 컨테이너 일원 관리
  4. Docker Machine: Docker 실행 환경 구축
  5. Docker Swarm: 클러스터 관리

2.4 Docker의 작동 구조

2.4.1 컨테이너를 구획화하는 장치 (namespace)

  • 컨터이너 구획하는 기술은 Linux 커널의 namespace 라는 기능을 사용

6개의 독립된 환경 구축 (다른 namespace 에서 접근 불가)

namespace 독립 대상
PID1 PID와 프로세스
network 네트워크 리소스2
UID UserId, GroupId 권한
MOUNT3 마운트
IPC 호스트명, 도메인명

2.4.2 릴리스 관리 장치 (cgroups4)

  • Linux 커널 기능인 control groups(cgroups) 기능을 사용하여 자원의 할당 등을 관리함
  • 계층 구조를 사용하여 프로세스를 그룹화화여 관리할 수 있음
  • 부모의 제한을 초과할 수 없다

2.4.3 네트워크 구상(가상 브리지/가상 NIC)

Docker에서는 NAPT5에 Linux의 iptables를 사용

2.4.4 Docker 이미지의 데이터 관리 장치

  • Copy on Write: 변경이 없는 복사는 참조시키고, 원본이나 복사본에 수정이 가해진 시점에 데이터를 복사
  • Docker는 Copy on Write 방식으로 컨테이너 이미지를 관리

Docker 이미지를 관리하는 스토리지 디바이스

  • AUFS
  • Btrfs
  • Device Mapper
  • OverlayFS
  • ZFS



  1. PID: Linux에서 각 프로세스에 할당한 고유ID

  2. 네트워크 디바이스, IP 주소, 포트 번호, 라우팅 테이블, 필터링 테이블 등.

  3. MOUNT: 연결기기, 기억장치 OS 인식시켜 이용 가능한 상태로 만드는 것

  4. cgroups: 프로세스와 스레드를 그룹화하고 관리하기 위한 기능

  5. NAPT: Network Address Port Translation: 하나의 IP 주소를 여러 컴퓨터가 공유하는 기술. IP 주소와 포트 번호를 변환하는 기능