<scshin />

Docker와 KVM의 차이점 알아보기

0.51

Docker와 KVM의 차이점 알아보기

가상화 기술을 공부하다 보면 가장 많이 접하게 되는 것이 Docker와 **KVM(Kernel-based Virtual Machine)**입니다.

처음에는 둘 다 가상화 기술이라 비슷해 보이지만, 실제로는 동작 방식과 사용 목적이 크게 다릅니다.

이번 글에서는 Docker와 KVM의 차이점을 쉽게 이해할 수 있도록 정리해보겠습니다.


Docker란?

Docker는 컨테이너(Container) 기반 가상화 기술입니다.

애플리케이션을 실행하는 데 필요한 라이브러리와 설정 파일만 함께 묶어 실행하며, 호스트 운영체제의 커널을 공유합니다.

즉, 운영체제를 새로 설치하지 않고 애플리케이션만 독립적으로 실행하는 기술입니다.

예를 들어 하나의 Linux 서버에서 다음과 같이 여러 서비스를 동시에 실행할 수 있습니다.

Linux Host
│
├── Docker
│   ├── Nginx
│   ├── MariaDB
│   ├── Redis
│   └── Spring Boot

각 컨테이너는 서로 독립적으로 동작하지만 모두 동일한 Linux 커널을 사용합니다.


KVM이란?

KVM(Kernel-based Virtual Machine)은 리눅스 커널에 포함된 하이퍼바이저 기반의 가상화 기술입니다.

하나의 물리 서버에서 여러 개의 독립적인 운영체제를 실행할 수 있습니다.

예를 들어 다음과 같이 구성할 수 있습니다.

물리 서버
│
├── Ubuntu VM
├── Rocky Linux VM
├── Windows Server VM
└── Debian VM

각 VM은 자체 운영체제와 커널을 가지고 있으므로 실제 서버와 거의 동일하게 동작합니다.


Docker와 KVM의 가장 큰 차이

Docker는 애플리케이션을 가상화합니다.

KVM은 운영체제 자체를 가상화합니다.

이 차이가 두 기술의 가장 큰 차이입니다.


구조 비교

Docker

Linux
│
└── Docker
     ├── Container 1
     ├── Container 2
     └── Container 3
  • 하나의 Linux 커널을 공유합니다.
  • 컨테이너마다 필요한 라이브러리만 포함합니다.
  • 매우 가볍고 실행 속도가 빠릅니다.

KVM

Linux
│
└── KVM
     ├── Ubuntu VM
     ├── Windows VM
     └── Rocky VM

각 VM에는 다음과 같은 요소가 모두 존재합니다.

  • Kernel
  • Driver
  • System Library
  • System Service

즉, 각각 하나의 독립적인 컴퓨터라고 생각하면 이해하기 쉽습니다.


Docker와 KVM 비교

항목 Docker KVM
가상화 대상 애플리케이션 운영체제
커널 호스트 커널 공유 VM마다 독립 커널
부팅 속도 수 초 수십 초~수 분
메모리 사용량 적음 많음
디스크 사용량 적음 많음
성능 거의 네이티브 거의 네이티브
Windows 실행 불가능(Linux Host 기준) 가능
Linux 여러 버전 실행 가능 가능
독립성 보통 매우 높음

메모리 사용량 비교

Docker는 운영체제를 따로 실행하지 않기 때문에 메모리 사용량이 매우 적습니다.

예를 들어

Docker

Spring Boot
Redis
MariaDB

→ 총 1~2GB 정도

반면 KVM은 운영체제를 각각 실행해야 하므로 메모리를 많이 사용합니다.

Ubuntu VM
RAM 4GB

Windows VM
RAM 8GB

Rocky VM
RAM 4GB

VM마다 별도로 메모리를 할당해야 합니다.


실행 속도 비교

Docker는 컨테이너만 실행하면 되므로 매우 빠릅니다.

docker compose up -d

몇 초 안에 실행됩니다.

반면 KVM은 운영체제를 부팅해야 하므로 시간이 더 오래 걸립니다.


실제 사용 사례

Docker

다음과 같은 서비스 배포에 많이 사용됩니다.

  • Spring Boot
  • Node.js
  • Redis
  • MariaDB
  • MySQL
  • Nginx

예를 들어

services:
  nginx:
  spring:
  mariadb:

와 같이 Docker Compose 하나만으로 전체 서비스를 실행할 수 있습니다.


KVM

다음과 같은 경우 많이 사용됩니다.

  • Windows 서버 운영
  • 테스트 서버 여러 대 구성
  • 개발 서버 분리
  • 운영 서버 분리
  • 클라우드 인프라 구축

예를 들어

물리 서버

↓

Ubuntu (Web)

↓

Rocky (DB)

↓

Windows (업무 프로그램)

처럼 하나의 서버를 여러 대의 서버처럼 사용할 수 있습니다.


Docker와 KVM을 함께 사용할 수 있을까?

가능합니다.

실제로 기업에서는 다음과 같은 구조를 가장 많이 사용합니다.

물리 서버

↓

KVM

↓

Ubuntu VM

↓

Docker

↓

Nginx
Spring Boot
Redis
MariaDB

즉,

  • KVM으로 서버를 분리하고
  • Docker로 애플리케이션을 배포합니다.

이 구조는 클라우드 환경에서도 매우 많이 사용됩니다.


언제 Docker를 사용할까?

다음과 같은 경우 Docker를 사용하는 것이 좋습니다.

  • 웹 서비스 개발
  • API 서버 개발
  • CI/CD
  • MSA(Microservice)
  • 개발 환경 구축
  • 빠른 배포

언제 KVM을 사용할까?

다음과 같은 경우 KVM을 사용하는 것이 좋습니다.

  • Windows 서버가 필요한 경우
  • 운영체제를 여러 개 실행해야 하는 경우
  • 서버를 완전히 분리해야 하는 경우
  • 테스트 서버를 여러 대 운영해야 하는 경우

정리

Docker와 KVM은 경쟁 관계가 아니라 서로 다른 목적을 가진 기술입니다.

Docker는 애플리케이션을 실행하기 위한 컨테이너 기술이며, KVM은 운영체제를 가상화하는 서버 가상화 기술입니다.

최근에는 대부분의 기업에서 KVM 위에 Docker를 설치하여 사용하는 구조를 채택하고 있습니다.

즉, KVM으로 서버를 구성하고 Docker로 서비스를 배포하는 방식이 가장 일반적인 운영 형태입니다.