공부하는 책
완벽한 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 컴포넌트
- Docker Engine: (핵심기능) Docker 이미지 생성, 컨테이너 기동
- Docker Registry: 이미지 공개 및 공유
- Docker Compose: 컨테이너 일원 관리
- Docker Machine: Docker 실행 환경 구축
- 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