코드잇 스프린트/TIL

[TIIL] Docker가 동작하는 원리

solytory 2026. 10. 3. 00:11

Docker에서 사용되는 가상화 방식 알아보기

1. 가상화 단위 : VM vs Container

  • 가상화 단위 : 격리된 별개의 실행환경 하나를 무엇까지 포함할 것인지를 기준으로 2가지로 나눠서 볼 수 있다.  
    • VM (Virtual Machine) : Guest OS + Bins/Libs + App를 제공  
    • Container : OS는 호스트 OS의 커널을 가져다 사용하고 Bins/Libs + App를 제공

 

2. Docker 구동 방식은? 

  • Docker는 Container 방식이다.
  • HostOS 위에 Docker 엔진을 구동시키고, 엔진 위에서 컨테이너를 실행시키는 형태이다.

 

3. 컨테이너를 실행하는 Docker 엔진이란?

  • 컨테이너를 만들고, 실행하고, 관리해주는 프로그램이다.
  • 엔진은 Docker CLI와 Docker Daemon으로 구성된다.
    • Docker CLI : 내가 입력하는 명령어를 받는 쪽
    • Docker Daemon : 명령을 받아 실제로 처리하는 쪽 (이미지 빌드, 컨테이너 실행, 네트워크/볼륨 관리)
  • 격리는 엔진이 직접하는 것은 아니고 Linux 커널 기능(호스트 OS)을 빌려서 작업
    • namespace : 컨테이너마다 프로세스, 네트워크, 파일 시스템을 다로 보이게 분리 → 격리
    • cgroup : 컨테이너마다 CPU, 메모리 사용량 제한

 

[심화] VM Type

  • VM은 Hypervisor가 어디에 설치되느냐에 따라 2가지 타입으로 나뉜다.
    • Type1  (Bare-metal) : 하드웨어 위에 Hypervisor가 바로 설치 → 호스트 OS를 사용하지 않음 → 그래서 빠름
    • Type2 (Hosted) : 호스트OS 위에 프로그램처럼 Hypervisor를 설치 → 호스트 OS를 사용 → 그래서 느림 
    • 어느 타입을 어떨때 사용할까
      • Type1  : 서버 / 클라우드  → 왜? 
        • 중간에 호스트OS가 없으니 성능 손실이 적고, 하드웨어 자원을 VM들에게 최대한 나눠줄 수 있다
        • 호스트 OS가 없으니 그만큼 공격받을 곳도 줄어서 보안상 유리할 수 있다. 
      • Type2 : 개인 PC  → 왜? 
        • 개인 PC는 평소엔 Windows, macOS를 그대로 쓰다가 필요할 때만 VM을 켜서 사용하기 때문에 호스트 OS위에서 프로그램처럼 설치하고 실행하는 게 설치가 쉽고 켰다 껐다 자유로움
        • 성능이 조금 떨어진다고해도 개발/테스트 용도라 상관없음
      • WSL2는 Type1 유형이라고 한다
       

 

[번외] Windows는 Docker를 쓰려면 WSL2가 필요하던데 왜?

  • 컨테이너는 호스트 OS의 커널을 공유한다. 그런데 Linux 컨테이너는 Linux 커널 기능(namespace, cgroup)이 필요
  • Windows는 Linux인가? 전혀.. Windows는 Windows임. Linux 커널이 없다.
  • 그래서 Windows 위에서 Linux 커널을 돌려줄 VM이 필요하고, 그 VM을 WSL2가 제공하는 것!
  • 그럼 Mac은? Mac도 Linux 커널이 없다. 그래서 Mac도 Linux VM이 필요하고, 보통 Docker Desktop이 그 VM을 대신 띄워준다. 만약 Docker Desktop이 없다면 Mac도 WSL2와 같은 중간다리가 필요할 것

 

[번외] VM과 Container 중에 무엇이 더 빠를 것인가.

  • VM은 Hypervisor를 통해 가짜 하드웨어를 만들어 그 위에 구동되는 GuestOS를 같이 갖고 있게 된다. 그럼 당연히 더 무거울 것이고 느릴 것 VM 보다는 Container가 경량화된 가상화 단위이다. 
반응형