본문 바로가기
Develop/DevOps

[docker] 도커는 어떻게 컨테이너를 격리 시킬까?🤔

by 3-stack 2021. 12. 26.

# 도커는 어떻게 컨테이너를 격리시킬까?

리눅스에서 쓰이는 Cgroup(control groups)과 네임스페이스(namespaces)에 대해서 알아야 한다.

다른 프로세스 사이에 벽을 만드는 리눅스 커널 기능들이다.

도커는 이것들을 이용해 컨테이너와 호스트에서 실행되는 프로세스를 격리시킨다.

 

- Cgroup : CPU, 메모리, Network Bandwith, HD i/o 등 프로세스 그룹의 시스템 리소스 사용량을 관리한다. 어떤 애플리케이션의 리소스 사용량이 많다면 그 애플리케이션을 Cgroup에 집어넣어서 CPU와 메모리 사용 제한 가능.

- Namespace : 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술. 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술.

 

 

# Host 머신의 운영체제가 리눅스가 아닐 때, 어떻게 리눅스 커널을 사용할 수 있을까?

docker 엔진은 리눅스 VM 위에서 구동된다.

dcoekr verison으로 도커 엔진이 구동되는 OS를 확인할 수 있다. OS/Arch:  linux/amd64

$ docker version
Client:
 Cloud integration: v1.0.22
 Version:           20.10.11
 API version:       1.41
 Go version:        go1.16.10
 Git commit:        dea9396
 Built:             Thu Nov 18 00:42:51 2021
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.11
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.9
  Git commit:       847da18
  Built:            Thu Nov 18 00:35:39 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

댓글