본문 바로가기
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

댓글