도커 컨테이너의 '기초'
도커(Docker) 컨테이너는 사실 새로운 기술이 아닙니다.
그 뿌리는 리눅스 커널이 제공하는 프로세스 격리 기능에 있습니다.
컨테이너를 이해하기 위해 꼭 알아야 할 세 가지 키워드가 있습니다.
바로 chroot, Namespace, cgroups입니다.
이 세 가지 기능이 합쳐져서 오늘날 우리가 쓰는 컨테이너 기술(LXC, Docker 등)의 기반이 되었습니다.

1. chroot – 루트 디렉터리 변경 기술
chroot는 이름 그대로 change root를 의미합니다.
리눅스에서 프로세스가 보는 “루트(/)” 디렉토리를 다른 디렉토리로 바꿔치기하는 기능입니다.
예를 들어, /tmp/chroot를 루트 디렉터리로 지정해 어떤 프로세스를 실행하면, 그 프로세스는 /tmp/chroot를 자기 루트로 인식합니다. 따라서 이 경로 바깥에는 접근할 수 없습니다.
즉, 파일 시스템을 기준으로 한 격리가 이루어지는 것이죠.
2. Namespace – 리소스 단위 격리
리눅스 Namespace는 커널이 제공하는 프로세스 격리 기능입니다.
시스템 자원을 묶어 특정 프로세스에 전용으로 할당하는 방식입니다.
대표적인 Namespace 유형은 다음과 같습니다:
- Mount: 파일 시스템 마운트 포인트 격리
- UTS: 호스트명, 도메인명 격리
- IPC: 프로세스 간 통신 자원 격리
- PID: 프로세스 ID 공간 격리
- Network: 네트워크 인터페이스 격리
- User: 사용자/그룹 ID 격리
예를 들어, PID 네임스페이스를 사용하면 같은 시스템 안에서도 서로 다른 PID 트리를 가질 수 있습니다.
UTS 네임스페이스에서는 독립적으로 호스트네임을 바꿀 수 있죠.
$ hostname
testcom
$ sudo unshare -u /bin/bash # UTS namespace 분리
# hostname new-hostname
# hostname
new-hostname
# exit
$ hostname
testcom
네임스페이스를 빠져나오면 다시 원래 호스트 이름으로 돌아옵니다.
즉, 네임스페이스는 호스트에 영향을 주지 않는 독립된 실행 환경을 만들어줍니다.
3. cgroups – 자원(Resource) 제어
cgroups (control groups)는 프로세스 그룹이 사용하는 시스템 자원을 제한·격리·모니터링할 수 있는 커널 기능입니다.
제어할 수 있는 자원은 다음과 같습니다:
- CPU
- 메모리
- 네트워크 대역폭
- 디바이스 접근
- I/O
예를 들어, 과학 연산 애플리케이션처럼 CPU와 메모리를 과도하게 사용하는 프로세스를 cgroup에 넣으면, CPU 사용률과 메모리 사용량을 제한할 수 있습니다.
간단한 확인:
# cpu 전용 cgroup 생성
$ sudo cgcreate -a hwi -g cpu:mycgroup
# 생성 확인
$ ls -al /sys/fs/cgroup/cpu/ | grep mycgroup
drwxr-xr-x 2 hwi root 0 2월 19 20:08 mycgroup
이제 mycgroup 안에 프로세스를 넣으면 CPU 사용량을 제한할 수 있습니다.
기존 nice나 cpulimit처럼 단일 프로세스만 제어하는 게 아니라, 프로세스 그룹 전체를 정밀하게 관리할 수 있다는 게 큰 장점입니다.
4. 세 가지가 만나 컨테이너가 된다!
정리하면:
- chroot → 파일 시스템 기준 격리
- Namespace → 프로세스 단위 리소스 격리
- cgroups → 자원 사용량 제한 및 관리
이 세 가지가 결합하면서 리눅스 컨테이너(LXC, 이후 Docker)가 탄생했습니다.
즉, 컨테이너란 “리눅스 커널 기능을 조합해 만든 격리된 실행 환경”입니다.
도커는 이러한 기능들을 추상화해서, 개발자가 docker run 한 줄로 쉽게 쓸 수 있도록 도와주는 도구일 뿐입니다.
여기서 잠깐!
Kernel, 커널이란?
컨테이너를 이해하려면 커널을 꼭 짚어야 합니다.
- 커널은 운영체제의 핵심 프로그램입니다.
- 사용자 프로그램이 하드웨어 자원(CPU, 메모리, 디스크, 네트워크)을 사용할 수 있게 관리해줍니다.
- 일반 프로그램과 달리 항상 메모리에 상주합니다.
컨테이너 기술은 결국 이 커널이 제공하는 기능을 활용한 것이라는 점을 기억하면 됩니다.
마무리
도커 컨테이너는 마법 같은 신기술이 아니라, 리눅스 커널이 오래전부터 제공해온 기능들의 조합입니다.
chroot, Namespace, cgroups.
이 세 가지를 이해하면 도커와 컨테이너를 깊이 있게 볼 수 있습니다.
'클라우드 Cloud > Docker' 카테고리의 다른 글
| 도커가 결국 리눅스인 이유 (Docker 컨테이너 네트워크 격리의 원리) (0) | 2025.09.17 |
|---|---|
| 도커 리눅스 비교 (Docker 컨테이너 네트워크 격리의 원리) (0) | 2025.09.17 |
댓글