본문 바로가기
카테고리 없음

Docker는 내부에서 어떻게 동작할까

by by_merry 2026. 4. 26.

Docker를 어느 정도 사용하다 보면 한 번쯤 이런 생각이 든다.

“컨테이너는 알겠는데… 이게 실제로 내부에서 어떻게 돌아가는 거지?”

나도 처음에는 그냥 “가볍게 실행되는 가상환경” 정도로만 이해했다. 그런데 구조를 한 번 제대로 보면, 왜 Docker가 빠르고 효율적인지 확실히 이해된다.

결론부터 말하면 Docker는 가상머신처럼 새로운 컴퓨터를 만드는 게 아니라, 운영체제의 기능을 활용해서 프로세스를 분리하는 방식으로 동작한다.

 

Docker는 새로운 OS를 만드는 게 아니다

많은 사람들이 처음에 착각하는 부분이다.

Docker는 가상머신처럼 운영체제를 따로 실행하지 않는다.

대신 하나의 운영체제를 그대로 사용하면서, 그 안에서 프로그램들을 분리해서 실행한다.

즉:

  • VM = OS까지 따로 실행
  • Docker = OS는 공유하고 프로그램만 분리

그래서 Docker는 훨씬 가볍고 빠르다.

핵심은 2가지다: Namespace와 Cgroups

Docker 내부 구조를 이해하려면 딱 2가지만 알면 된다.

  • Namespace → 공간을 나누는 기술
  • Cgroups → 자원을 나누는 기술

이 두 개가 컨테이너를 만드는 핵심이다.

1. Namespace는 “공간 분리” 역할

Namespace는 하나의 시스템 안에서 서로 보이지 않게 공간을 나누는 기능이다.

예를 들어 컨테이너 A와 B가 있다면:

  • A에서는 B가 안 보이고
  • B에서는 A가 안 보인다

각자 자기만의 환경처럼 보이게 만든다.

Namespace는 여러 종류가 있다.

  • PID → 프로세스 분리
  • NET → 네트워크 분리
  • MOUNT → 파일 시스템 분리

그래서 각 컨테이너는:

  • 자기만의 프로세스 목록
  • 자기만의 네트워크
  • 자기만의 파일 구조

를 가진 것처럼 동작한다.

2. Cgroups는 “자원 제한” 역할

Cgroups는 CPU, 메모리 같은 자원을 나누는 기능이다.

예를 들어 컨테이너가 여러 개 있을 때:

  • 컨테이너 A → CPU 50%
  • 컨테이너 B → 메모리 1GB 제한

이렇게 설정할 수 있다.

그래서 하나의 컨테이너가 자원을 다 먹어버리는 것을 막는다.

즉, 서버를 안정적으로 운영할 수 있게 해준다.

이미지는 어떻게 실행될까

Docker는 이미지를 바로 실행하지 않는다.

이미지를 기반으로 컨테이너를 만든다.

이 과정은 이렇게 진행된다.

이미지 → 읽기 전용 레이어 → 쓰기 가능한 레이어 추가 → 컨테이너 실행

이미지는 여러 개의 레이어(layer)로 구성되어 있다.

예를 들어:

  • OS 레이어
  • 라이브러리 레이어
  • 앱 코드 레이어

이런 식으로 쌓여 있다.

컨테이너를 실행하면, 그 위에 “쓰기 가능한 레이어” 하나를 더 얹는다.

그래서:

  • 이미지는 그대로 유지되고
  • 컨테이너에서만 변경이 발생한다

이 구조 덕분에 속도가 빠르고, 여러 개를 동시에 실행할 수 있다.

Docker 엔진은 무슨 역할을 할까

Docker를 실행하면 실제로는 Docker Engine이라는 프로그램이 동작한다.

이 엔진이 하는 일은:

  • 이미지 관리
  • 컨테이너 생성
  • 네트워크 연결
  • 자원 관리

를 전부 처리하는 것이다.

즉, Docker Engine은 컨테이너를 관리하는 “중앙 관리자” 역할이다.

왜 Docker는 빠를까

Docker가 빠른 이유는 간단하다.

  • 운영체제를 새로 부팅하지 않고
  • 기존 OS 위에서 바로 실행하기 때문이다

그래서:

  • 몇 초 안에 실행되고
  • 메모리 사용량도 적고
  • 여러 개를 동시에 돌릴 수 있다

이게 바로 VM보다 훨씬 효율적인 이유다.

정리하면 이런 구조다

Docker는 이렇게 동작한다.

  • 하나의 운영체제 위에서
  • Namespace로 공간을 나누고
  • Cgroups로 자원을 나누고
  • 이미지를 기반으로 컨테이너를 실행한다

그래서 가볍고 빠르면서도, 서로 영향을 주지 않는 환경을 만들 수 있다.

한 줄로 정리하면

Docker는 운영체제를 새로 만드는 것이 아니라, Namespace와 Cgroups를 사용해 프로세스를 분리하고 자원을 나누어 컨테이너를 실행하는 기술이다.