공부합시다!/Container

Docker(Container) 기술 : namespace & cgroups

간서치 2022. 2. 28. 11:42
728x90

Container 기술의 등장으로 찬밥(?)이 되어버린 Virtualization 기술!

그래도 Cloud의 핵심 기술인데! ㅎㅎㅎ

 

그럼 대체 어떤 면에서 뛰어나길래 이렇게 Docker는 사실상 업계 표준(de-facto)이 되면서 Virtualization기술을 대체하게 되었을까요? 어느 날 바로 하늘에서 뚝 떨어진 기술은 아닐텐데......!

 

1. Docker

 1.1. LXC에서 사용하는 Linux Kernel Container 기술을 이용해 만든 Container Management Util

 1.2. MSA, DevOps, Test 등의 다양한 분야에서 활용

 1.3. Linux Container 구현체의 de-facto

 

2. Container vs Hypervisor

 2.1. Hypervisor와 유사한 Virtualization을 목표로 함.

 2.2. Hypervisor :

  2.2.1. OS 및 Kernel 전체 가상화 

  2.2.2. VM은 Hardware Emulation

 2.3. Container :

  2.3.1. Filesystem Virtualization 

  2.3.2. Host PC의 Kernel 공유

  2.3.3. init(1)의 프로세스 불필요

  2.3.4. Virtualization App에 비해 적은 메모리 사용량, 적은 Overhead 

  2.3.5. Host PC의 자원을 Isolation 된 상태로 사용하여 성능 저하가 작다.

Container 성능 (https://tech.ssut.me/what-even-is-a-container/)

  2.3.6. Container 사용으로 인한 성능 손실은 native에 비해 1% 수준에 불과

  2.3.7. Virtualization 하지 않는 부분에서 오는 Container의 가장 큰 장점

 

3. Container 기술

 3.1. namespace

  3.1.1. Virtualization 에서는 각 Guest VM(Virtual Machine) 독립적인 공간을 제공하며 충돌방지 기능

  3.1.2. Linux Kernel에는 이와 동일한 역할을 하는 namespace 기능 내장

  3.1.3. 6개의 namespace 

name space

 3.2. cgroups(Control Groups)

  3.2.1. 자원(Resources)에 대한 제어를 가능케하는 Linux Kernel 기술

  3.2.2. cgroups로 제어할 수 있는 Resources 항목

cgroups

 

4. Docker 기술

 4.1. Container 기술 구현체 

  4.1.1. OCI(Open Container Initative) Spec : namespaces, cgroups를 표준으로 정의 -> Container기술구현체(lxc, runC)

  4.1.2. LXC : Ubuntu로 유명한 Canonical에서 지원하고 있는 Linux Container Project (Docker 1.0이전버전까지 사용)

  4.1.3. libcontainer -> runC (libcontainer의 Refactoring 구현체)로 자체 구현체를 갖춤

Docker 기술 (https://tech.ssut.me/what-even-is-a-container/)

 

5. Docker 구조 (Docker 1.11버전 이후)

 5.1. Docker Engine은 Image, Network, Disk 등을 관리

 5.2. containerd : OCI구현체(runC)를 이용해 container를 관리하는 데몬

 5.3. Docker Engine과 Containerd는 각각 완전히 분리되어 있음.

  5.3.1. Docker Engine 판올림시 Docker Engine를 재시작해도 Container의 재시작없이 사용 가능.

Docker 구조 (https://tech.ssut.me/what-even-is-a-container/)

 5.4. Docker는 4개의 독립적인 Process로 분리되어 각각의 역할이 분리되어 있음.

  5.4.1. # ps -aux | grep docker

  5.4.2. 4개 Process : docker, docker-containerd, docker-containerd-shim, docker-runC 

 

다음은 다시 개요로 돌아가서 조금 쉬운 내용으로 만날볼까 합니다.

728x90