신뢰할 수 있고 잘 패키징된 애플리케이션에는 Docker를 사용하고, 가벼운 Linux 시스템 환경에는 LXC를 사용하며, 서비스에 독립적인 커널이나 더 강력한 신뢰 경계가 필요할 때는 VM을 사용하세요.
이 세 가지는 서로 바꿔 사용할 수 있는 래퍼가 아닙니다. Docker는 애플리케이션을 패키징하고, LXC는 소형 Linux 시스템에 가깝게 작동하며, VM은 하드웨어를 가상화해 별도의 게스트 커널을 제공합니다. 서비스가 인터넷에 노출되는지, 광범위한 권한이 필요한지, GPU나 USB 장치에 접근하는지, 또는 호스트 상태를 신뢰하지 않고 복원해야 하는지에 따라 적절한 선택이 달라집니다.
신뢰 수준을 분류하고 커널 경계를 설정하세요
먼저 각 서비스를 신뢰할 수 있는 내부 서비스, 권한이 필요한 인프라, 인터넷에 노출되어 잠재적으로 악의적일 수 있는 서비스로 분류하세요. 그런 다음 이미지나 패키지를 누가 제공하는지, 어떤 데이터를 읽을 수 있는지, 침해가 관리 네트워크, 백업 네트워크 또는 가족 파일 네트워크까지 도달할 수 있는지를 기록하세요.
서비스가 작다고 해서 위험이 낮은 것은 아닙니다. 호스트 마운트가 없는 공개 대시보드가 네트워크 자격 증명, Docker 소켓, 모든 공유 폴더에 대한 쓰기 권한을 보유한 내부 자동화 도구보다 안전할 수 있습니다.
이 첫 번째 단계만으로도 비교가 끝날 수 있습니다. 워크로드가 호스트 커널을 공유해서는 안 된다면 메모리 사용량이 더 적더라도 Docker와 LXC는 제외해야 합니다. 반대로 좁은 마운트를 사용하는 신뢰할 수 있는 단일 목적 애플리케이션이라면 VM은 실질적인 위험을 충분히 줄이지 못한 채 관리 부담만 늘릴 수 있습니다.
Docker와 LXC는 호스트 커널을 사용하면서 프로세스를 격리하고, VM은 하이퍼바이저 경계 뒤에서 게스트 커널을 실행합니다. 커널 공유와 VM 격리에 대한 독립적인 비교에서는 모든 컨테이너가 안전하지 않다는 주장이 아니라, 보안 차이가 아키텍처에서 비롯된다는 점을 설명합니다.
Docker는 일반적으로 단위를 애플리케이션과 해당 종속성으로 좁힙니다. LXC는 init, 패키지, 계정, 시스템 서비스를 포함한 더 완전한 사용자 공간을 제공합니다. 따라서 LXC는 소규모 Linux 환경에 편리하지만, 그렇다고 VM이 되는 것은 아닙니다.
커널의 다양성, 신뢰할 수 없는 코드, 또는 깔끔한 게스트 수준의 방화벽 및 패치 경계가 중요하다면 VM을 선택하세요. 호스트 커널을 공유해도 괜찮고 별도의 게스트 OS보다 운영 단순성이 더 중요하다면 Docker 또는 LXC를 고려하세요.
권한과 하드웨어 접근에 따라 기본 선택을 바꾸세요
신뢰할 수 있는 Docker 서비스도 호스트 네트워킹, 광범위한 기능, 쓰기 가능한 시스템 마운트 또는 컨테이너 관리 소켓이 필요해지는 순간 효율성이 떨어집니다. 각각의 예외는 좁은 애플리케이션 경계를 약화시키고, 서비스를 별도의 VM으로 옮기거나 접근 경로를 재설계할 가치를 높입니다.
LXC는 일반 패키지 관리자, 안정적인 호스트 이름, 선택적인 장치 접근이 필요한 Linux 서비스에 실용적인 중간 선택지가 될 수 있습니다. 하지만 권한 있는 LXC, 과도한 바인드 마운트, 중첩 Docker는 결합도를 높이므로 리소스 절감 효과를 업그레이드와 복구의 어려움과 함께 평가해야 합니다.
GPU, HBA, USB 컨트롤러 또는 특수 NIC를 사용할 때는 재설정 동작, 권한, 재부팅 후 지속성을 테스트하세요. 직접 장치 접근은 호스트에서 가장 쉬울 수 있지만, 하드웨어와 IOMMU 구성이 지원된다면 패스스루를 사용하는 VM이 더 명확한 소유권 경계를 제공할 수 있습니다.
인터넷 노출을 네트워크와 ID에 관한 결정으로 다루세요
공개 서비스는 하나의 통제된 리버스 프록시 또는 VPN 경로 뒤에 배치하고, 관리 인터페이스는 비공개로 유지하며, 서비스 자격 증명의 접근 범위를 가장 작은 데이터셋으로 제한하세요. 공개된 관리자 패널, 재사용된 비밀 값, 스토리지와 백업에 대한 제한 없는 접근은 런타임 격리만으로 보완할 수 없습니다.
운영자들이 Docker, LXC, VM에 워크로드를 배치하는 방식에 관한 커뮤니티 논의를 보면 실제 배포에서는 혼합 구성을 자주 사용한다는 것을 알 수 있습니다. VM으로 신뢰 경계를 설정한 다음 그 안에서 Docker로 애플리케이션을 패키징하는 방식입니다. 이는 세 번째 아키텍처이지, 어느 한 선택지가 실패했다는 뜻이 아닙니다.
영향이 큰 공개 서비스에는 Docker가 더 저렴하게 실행되더라도 전용 VM 또는 호스트를 우선하세요. 영향이 적고 변경 불가능한 배포, 제한된 마운트, 강력한 네트워크 제어를 사용하는 애플리케이션이라면 Docker가 더 단순한 선택일 수 있습니다.
패치, 백업, 복원할 단위를 비교하세요
Compose 파일, 비밀 값, 버전, 영구 볼륨을 깔끔하게 분리하면 Docker를 가장 쉽게 재구축할 수 있습니다. LXC는 시스템 단위로 복원할 수 있지만, 내부에서 수동으로 변경한 패키지는 문서화하거나 자동화하지 않으면 구성 드리프트를 일으킵니다.
VM은 일반적으로 더 많은 메모리와 스토리지를 사용하지만, 게스트를 별도의 백업 및 롤백 단위로 만들 수 있습니다. 그러나 이 이점은 복원 테스트를 거친 후에만 실제 의미가 있습니다. 같은 호스트에 있는 스냅샷은 독립적인 복구 사본이 아닙니다.
| 결정 기준 | Docker | LXC | VM |
|---|---|---|---|
| 주요 단위 | 애플리케이션과 볼륨 | Linux 사용자 공간과 파일 | 게스트 OS와 가상 디스크 |
| 커널 | 호스트와 공유 | 호스트와 공유 | 독립적인 게스트 커널 |
| 가장 적합한 경우 | 패키징된 신뢰할 수 있는 애플리케이션 | 가벼운 Linux 시스템 서비스 | 더 강력한 신뢰 또는 OS 경계 |
| 권한 관련 주의 사항 | 소켓, 기능, 광범위한 마운트 | 권한 모드, 중첩, 바인드 마운트 | 패스스루와 게스트 확장 |
| 복구 검증 | 재생성 후 볼륨 복원 | 컨테이너 상태 재생성 또는 복원 | 게스트 복원 후 장치 검증 |
서버 단위가 아니라 서비스별로 경계를 선택하세요
좁은 마운트와 반복 가능한 정의를 사용하는 신뢰할 수 있는 애플리케이션 스택에는 Docker를 선택하세요. 더 완전한 사용자 공간이 유용하지만 독립적인 커널은 필요하지 않은 효율적인 Linux 시스템 서비스에는 LXC를 선택하세요. 신뢰할 수 없거나 인터넷에 노출되어 영향이 크고, 다른 운영 체제가 필요하거나 게스트 격리를 통한 하드웨어 소유권이 유리한 워크로드에는 VM을 선택하세요.
홈 서버 운영 체제 선택은 다음 단계입니다. 호스트 선택에 따라 어떤 백업, 네트워킹, 컨테이너, VM 제어 기능을 실제로 사용할 수 있는지가 결정되기 때문입니다. 혼합형 서버는 하나를 보편적인 기본값으로 취급하지 않고 세 가지 경계를 모두 사용할 수 있습니다.
서비스에 권한 있는 호스트 접근이 필요하거나, 민감한 관리 기능을 노출하거나, 독립적으로 복원할 수 없다면 집적도 최적화를 중단하세요. 올바른 경계는 실제로 우려하는 장애를 억제하면서도 가장 복잡하지 않은 선택입니다.
제품 비교
더 읽어보기

앱 업데이트 및 롤백을 위한 Proxmox의 LXC와 Docker 비교
Docker는 앱 수준의 버전 관리를 제공하고, LXC는 게스트 수준의 롤백을 제공합니다. 더 적합한 선택은 안전하게 복원할 수 있는 가장 작은 상태 단위에 따라 결정됩니다.

권한 있는 홈 서비스에서 Docker와 LXC의 보안 경계
Docker는 좁게 패키징된 앱에 적합하고 LXC는 보다 완전한 Linux 서비스에 적합하지만, 공유 커널 위험을 감수할 수 없다면 어느 쪽도 VM을 대체할 수 없습니다.

처음 구축하는 사용자를 위한 턴키 NAS OS와 모듈형 Linux 비교
안내형 스토리지 운영을 원한다면 즉시 사용 가능한 NAS 소프트웨어를 선택하고, 학습과 명시적인 제어를 위해 더 많은 관리 책임을 감수할 가치가 있다면 모듈형 Linux를 선택하세요.

