LXD 설치 및 설정 가이드: Ubuntu에서의 활용법

2–3분

컨테이너 기술이 일반화되면서 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의 차이점

구분DockerLXD
컨테이너 유형애플리케이션 컨테이너시스템 컨테이너
내부 구성단일 프로세스 중심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도 사용해보세요!