이전 포스팅에서 도커의 기본 개념과 간단한 사용법을 알아보았다. 이번 글에선 도커의 구조를 자세히 알아보려한다.
1. 도커 컨테이너의 가상화 구조
도커 컨테이너는 OS 레벨의 가상화를 제공한다. 이를 VM의 가상화 기술의 구조와 비교해보자. 오른쪽 그림의 컨테이너 엔진에 해당하는 것이 도커 엔진이다.

| 비교 항목 | 가상 머신 (VM) | 컨테이너 (Container) |
| 오버헤드 | 높음 (High) | 낮음 (Low) |
| 시작 시간 | 수 분 소요 (Slow) | 수 초 이내 (Fast) |
| 자원 사용 | 덜 효율적임 | 효율적임 |
| 격리 수준 | 가상 하드웨어 수준 격리 | 프로세스 수준 격리 |
| 커널 공유 | 각 VM마다 별도의 Guest OS 필요 | 호스트 OS 커널 공유 |
2. 도커가 이용하는 리눅스 커널 핵심 기능: Namespaces & Cgroups

도커가 독립된 환경을 제공할 수 있는 이유는 리눅스 커널의 두 가지 핵심 기능을 활용하기 때문이다.
- 네임스페이스(Namespaces)
- 시스템 리소스를 격리하여 프로세스가 자신의 리소스만 볼 수 있도록 제한한다.
- 종류: PID, Network, User, Mount 네임스페이스 등
- 이를 통해 각 컨테이너는 서로 독립된 사용자 공간(User space)을 가진다.
- Cgroups (Control Groups)
- 프로세스 그룹의 자원 사용량(CPU, 메모리, 디스크 I/O 등)을 제한하고 관리한다.
- 특정 컨테이너가 호스트의 자원을 독점하지 못하도록 물리적 한계를 설정한다.
3. 이미지와 레지스트리
- 컨테이너 이미지(Image): 애플리케이션 실행에 필요한 모든 파일(소스 코드, 라이브러리, 설정)을 포함하는 불변의 파일이다. 컨테이너를 생성하기 위한 설계도(Blueprint) 역할을 한다.
- 이미지 레이어: 도커 이미지는 명령마다 레이어 단위로 쌓이며, 이는 모듈화되어 재사용이 가능하다.
- 이미지 레지스트리(Registry): 이미지를 저장하고 배포하는 시스템으로, 대표적으로 도커 허브(Docker Hub)가 있다.
4. 도커의 아키텍처 및 워크플로

도커는 클라이언트-서버 구조를 따르며, 크게 세 가지 구성 요소로 나뉜다.
① 도커 클라이언트
사용자가 docker build, docker pull, docker run 등의 명령어를 입력하는 인터페이스이다.
- Build: Dockerfile(텍스트 파일)을 작성하여 docker build 명령으로 도커 이미지를 생성한다.
- Push/Pull: 생성된 이미지를 도커 허브와 같은 레지스트리에 저장하거나(Push), 필요한 이미지를 내려받는다(Pull).
- Run: docker run 명령을 실행하면 도커 엔진이 이미지를 읽어 격리된 컨테이너 인스턴스를 생성하고 실행한다.
② 도커 호스트
- 도커 데몬이 설치된 환경으로, 실제 컨테이너들이 구동되는 서버이다.
- 도커 데몬 : 클라이언트의 요청을 받아 이미지를 관리하고 컨테이너의 생명주기를 직접 제어한다. 컨테이너 이미지를 관리하고 외부에서 이미지를 다운로드하고 빌드하는 작업을 수행한다.
'전공공부' 카테고리의 다른 글
| vCPU 동작 원리 (0) | 2026.03.29 |
|---|---|
| AWS 네트워크 핵심 구성 요소 정리 (0) | 2026.03.29 |
| Kata Containers와 gVisor (0) | 2026.03.27 |
| 도커(Docker)의 단점과 카타 컨테이너(Kata Containers) (0) | 2026.03.27 |
| 도커(Docker) 개념 정리 (0) | 2026.03.24 |