Proxmox에서 Docker 사용하는 최적의 방법 — LXC vs VM 비교

Proxmox에서 Docker를 호스팅할 때 LXC와 VM 중 무엇이 나은가. 자원 효율, nesting, 보안, 백업, 마이그레이션 관점에서 실측 데이터로 비교한 결정 가이드.

Docker 실행 방식 선택(LXC vs VM vs Host 직접)

Proxmox에서 Docker를 돌리는 3가지 방법

언제 LXC/VM을 선택할지(요약)

Proxmox를 설치하고 나면 첫 번째 질문이 “Docker는 어디서 돌리지?”입니다.

3가지 선택지가 있습니다:

방법 성능 격리 관리 편의성 추천도
방법 1: LXC 컨테이너 안에서 Docker ★★★ ★★ ★★★ ★★★
방법 2: VM(Ubuntu/Debian) 안에서 Docker ★★ ★★★ ★★ ★★
방법 3: Proxmox 호스트에 직접 Docker ★★★ ★ (비추천)

방법 1: LXC 컨테이너 + Docker (권장)

LXC(Linux Container)는 가볍고 빠릅니다. 오버헤드가 거의 없어서 Docker를 돌리기에 최적입니다.

LXC 컨테이너 생성

Proxmox CT 생성 마법사 화면(민감정보 마스킹)
  1. Proxmox 웹 UI → Create CT
  2. 설정:
항목
Template debian-12-standard
Disk 32GB+
CPU 2 cores
Memory 4096MB
Network vmbr0, DHCP 또는 고정 IP
  1. Options 탭에서 중요 설정:
    • Features → Nesting ✅ (Docker 실행에 필수)
    • Features → keyctl

LXC에 Docker 설치

# 컨테이너 콘솔 접속 후
apt update && apt upgrade -y

# Docker 공식 설치
curl -fsSL https://get.docker.com | sh

# Docker Compose 설치
apt install -y docker-compose-plugin

# 확인
docker --version
docker compose version

장점

  • 성능: VM 대비 오버헤드 거의 없음
  • 자원: 메모리/CPU 할당을 유연하게 조절 가능
  • 백업: Proxmox에서 LXC 전체를 스냅샷/백업 가능
  • 속도: 부팅 2~3초

주의점

  • GPU 패스스루가 필요하면 VM을 써야 함
  • 일부 Docker 이미지가 LXC에서 호환 문제 (드물지만 있음)

방법 2: VM + Docker

완전한 격리가 필요하거나 GPU 패스스루가 필요할 때 선택합니다.

VM 생성 + Docker 설치

Proxmox VM 요약 화면(민감정보 마스킹)
  1. Ubuntu Server 24.04 VM 생성 (이전 Proxmox 설치 가이드 참고)
  2. VM 내부에서 Docker 설치:
# Ubuntu VM 내부
sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

언제 VM을 선택할까?

  • GPU 패스스루: Plex 하드웨어 트랜스코딩, AI/ML 워크로드
  • 커널 커스터마이징: 특수 커널 모듈 필요시
  • 완전 격리: 보안이 최우선인 서비스

방법 3: Proxmox 호스트에 직접 (비추천)

기술적으로 가능하지만 권장하지 않습니다:

  • Proxmox 업데이트와 Docker가 충돌할 수 있음
  • 호스트가 불안정해지면 모든 VM/CT에 영향
  • 롤백이 어려움

실전 구성 예시

홈서버 최적 구성:

Proxmox 호스트
  │
  ├─ LXC: docker-apps (메인 Docker 호스트)
  │   ├─ Portainer (Docker 웹 관리)
  │   ├─ Nginx Proxy Manager (리버스 프록시)
  │   ├─ Uptime Kuma (모니터링)
  │   ├─ Homepage (대시보드)
  │   └─ 기타 셀프호스팅 앱들
  │
  ├─ LXC: media-server
  │   ├─ Plex / Jellyfin
  │   └─ *arr 스택 (Sonarr, Radarr, Prowlarr)
  │
  ├─ VM: ubuntu-dev (개발용)
  │   └─ Docker + 개발 환경
  │
  └─ VM: windows (필요시)
      └─ Windows 11 + RDP

Docker Compose 시작 예제

Docker Compose 최소 예제

LXC에 Docker를 설치했으면, 첫 번째 서비스를 올려봅니다:

# docker-compose.yml — Portainer + Uptime Kuma
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    ports:
      - "9443:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - uptime_data:/app/data

volumes:
  portainer_data:
  uptime_data:
docker compose up -d
  • Portainer: https://IP:9443
  • Uptime Kuma: http://IP:3001

다음 단계

이 글이 도움이 되었다면 즐겨찾기에 추가해주세요. 홈서버 관련 가이드를 계속 업데이트합니다.

이미지 출처

  • (자체 제작) Proxmox Docker 운영 글 본문 예시 이미지 3종(선택 다이어그램/선택 가이드/Compose 예제)

관련 글

@welltip

정리를 위해 작성하는 개인노트