컨테이너 기술이 일반화되면서 Docker는 사실상 기본 선택지가 됐지만, Docker만이 유일한 해답은 아닙니다. LXD는 시스템 컨테이너 기반의 가상화 도구로, Docker와는 다른 목적에 최적화돼 있습니다.
이 글에서는 Docker와 LXD를 간략하게 비교 상황에 따라 Docker가 아닌 LXD를 사용하는 방법에 대해 이야기 해보겠습니다.
1. LXD란?
LXD는 LXC(Linux Containers)를 기반으로 한 고수준 시스템 컨테이너 관리자입니다.
컨테이너 내부에서 init 시스템이 포함된 완전한 OS 환경을 제공하며,
기존의 VM 대체 용도로 사용될 수 있을 만큼 기능이 강력합니다.
- LXC가 저수준 컨테이너 API라면,
- LXD는 이를 다루는 REST API, CLI, 이미지 관리, 네트워크 및 스토리지 설정 등을 포괄하는 상위 툴입니다.
LXD는 시스템 수준 가상화를 제공하지만, 성능은 VM보다 훨씬 가볍습니다.
2. Docker와 LXD의 차이점
| 구분 | Docker | LXD |
|---|---|---|
| 컨테이너 유형 | 애플리케이션 컨테이너 | 시스템 컨테이너 |
| 내부 구성 | 단일 프로세스 중심 | init 포함 전체 OS 환경 |
| 실행 단위 | 앱 또는 서비스 | 운영체제 전체 |
| 사용 목적 | 빠른 앱 배포, 마이크로서비스 | 테스트 환경, CI, OS 실습, 경량 VM 대체 |
| 네트워크 구성 | 단순, 브리지 또는 호스트 공유 | 독립된 네트워크 브리지(lxdbr0 등) |
| 파일 시스템 관리 | layered 이미지 (overlayFS 등) | ZFS, Btrfs, LVM 등 유연한 선택 가능 |
둘은 경쟁 제품이 아니라, 완전히 다른 문제를 푸는 도구입니다.
Docker는 “애플리케이션 실행용”, LXD는 “전체 시스템 가상화용”으로 이해하는 게 정확합니다.
3. 실제 사용 사례: 오프라인 배포 환경 구성
업무상 LXD를 사용한 대표적인 사례는 오프라인 환경에서의 패키징 및 배포 자동화입니다.
- 인터넷이 차단된 환경에서 소프트웨어 설치가 필요했기 때문에,
- LXD 컨테이너 내에 필요한 패키지를 미리 설치하고,
- 해당 컨테이너를 이미지로
publish → export해서.tar.gz형태로 패키징, - 대상 서버에서는
import후 컨테이너로 즉시 실행할 수 있게 구성했습니다.
lxc publish my-container --alias offline-image
lxc image export offline-image .
lxc image import offline-image.tar.gz --alias offline-image
Docker는 단일 프로세스 중심이라 시스템 수준 구성에는 한계가 있었고,
LXD는 완전한 OS 환경을 제공해 이런 작업에 적합했습니다.
4. Ubuntu에서 LXD 설치 및 초기 설정
설치 (Snap 패키지 사용)
sudo snap install lxd
Snap은 최신 안정 버전이 유지되며, LXD 프로젝트에서 기본으로 권장합니다.
초기 설정 (lxd init)
sudo lxd init
설정 항목:
- 스토리지 백엔드 선택:
zfs추천 (스냅샷/복제 기능 우수) - 브리지 네트워크 구성: 기본값 사용 시
lxdbr0생성 - IPv6 사용 여부: 환경에 따라 선택
- 클러스터 구성 여부: 단일 노드 사용 시
no
대부분의 경우, 기본값으로 진행해도 문제 없습니다.
컨테이너 생성 및 접속
lxc launch images:ubuntu/22.04 my-container
lxc exec my-container -- bash
컨테이너 내부에서 일반적인 리눅스 운영체제처럼 작업이 가능합니다.
5. 언제 LXD를 선택해야 할까?
- CI/CD 테스트 환경을 빠르게 구성하고 복제하고 싶을 때
- 다양한 OS 배포판을 실습하거나 검증해야 할 때
- 인터넷이 없는 환경에 이미지 기반 배포가 필요할 때
- 경량 가상머신이 필요한데 성능 손실 없이 빠르게 구축하고 싶을 때
- Docker로는 다루기 어려운 init, systemd 기반 설정이 필요한 경우
LXD는 Docker를 대체하는 도구가 아니며, container라고 생각 하기 보다는 경량화된 VM이라고 생각하면 좋습니다.
상황에 맞춰서 LXD도 사용해보세요!