LXD on Ubuntu 快速入门
这份指南聚焦于最核心的命令与操作,旨在帮助您在最短的时间内上手 LXD。
默认环境: Ubuntu 22.04/24.04 | LXD 版本: snap (官方推荐)
1. LXD 是什么 & 适用场景
LXD 是一个现代、安全且功能强大的系统级容器与轻量 VM 管理器,其底层技术核心是 LXC(用于容器)和 QEMU(用于虚拟机)。
与 Docker 的核心差异
LXD 更像一个“轻量版的虚拟机管理器”。它创建的实例拥有完整的操作系统环境(独立的 init
, systemd
, SSH
服务等),让你感觉像在管理一台真实的物理机或云主机。而 Docker 更侧重于“单个进程或应用的打包与运行”,容器生命周期与应用进程绑定,追求的是极致的轻量和可移植性。
2. 安装与初始化
2.1 安装
首先,确认你的系统已安装并启用 snap
。
snap version
通过 snap 安装 LXD(官方推荐方式,会自动更新并包含所有依赖)。
sudo snap install lxd
snap info lxd
注意:清理旧版
如果你的系统之前安装过 apt 包版本的 LXD,请务必先彻底卸载,避免冲突。
sudo apt remove --purge lxd lxd-client -y
sudo apt autoremove -y
2.2 初始化
安装完成后,运行交互式初始化向导来配置 LXD。
sudo lxd init
向导会引导你配置存储池、网络、镜像服务器等。以下是一些常见选择建议:
- Storage (存储): 新手推荐选
dir
(最简单,直接使用目录),或zfs
(功能强大,快照/复制性能高)。如果没有独立的磁盘分区,向导可以直接创建一个基于文件的 loop-based ZFS 池。 - Network (网络): 选择创建默认的网桥
lxdbr0
,并启用自动 NAT 和 DHCP,这是最省心、开箱即用的选项。 - Images (镜像): 保持默认,使用官方的
images:
远程源。 - VM Support (虚拟机支持): 建议开启 (yes),这样以后需要创建虚拟机时会非常方便。
3. 基本概念速记
- Instance (实例)
- 容器 (container) 与虚拟机 (vm) 的统称。
- Image (镜像)
- 创建实例的模板,例如
ubuntu/22.04
。 - Profile (配置集)
- 一组可复用的配置,如网卡、存储、资源限制等。
- Storage Pool (存储池)
- 决定实例磁盘的存放位置、后端驱动 (zfs/btrfs/dir) 等。
- Network (网络)
- LXD 管理的网络资源,如桥接 NAT、macvlan 等。
- Project (项目)
- 项目级的隔离命名空间,适合多租户或多项目场景。
4. 快速上手(容器与 VM)
4.1 创建与进入容器
lxc image list images: ubuntu
lxc launch images:ubuntu/22.04 myct
lxc list
lxc exec myct -- bash
4.2 创建与使用 VM
lxc launch images:ubuntu/22.04/cloud myvm --vm
lxc console myvm --type=console
lxc file push ./local.txt myct/root/
lxc file pull myct/etc/os-release .
4.3 基本生命周期管理
lxc stop myct
lxc start myct
lxc restart myct
lxc delete myct
lxc info myct
5. 镜像管理
lxc remote list
lxc image list images: ubuntu
lxc publish myct --alias mybase --compression=xz
lxc image export mybase ./mybase.tar.xz
lxc image import ./mybase.tar.xz --alias mybase2
6. 网络与端口映射
6.1 默认桥接网络 (NAT)
lxd init
创建的 lxdbr0
是一个 NAT 网络,实例可以访问外网,但外部无法直接访问实例。
6.2 端口转发 (proxy 设备)
这是将宿主机端口映射到实例内部服务的常用方法。示例:把宿主机的 8080 端口转发到容器 myct
的 80 端口。
lxc config device add myct webproxy proxy \
listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80
6.3 macvlan (让实例直连物理网络)
使用 macvlan 模式,实例可以获得与宿主机同网段的 IP 地址,就像一台独立的物理机。适合需要内网直接访问的场景。
lxc config device add myct eth0 nic nictype=macvlan parent=eno1
7. 存储
7.1 创建存储池
lxc storage create zpool zfs size=50GB
lxc profile device add default root disk pool=zpool path=/
7.2 挂载宿主机目录
这是一个非常实用的功能,可以方便地共享数据。
lxc config device add myct datadisk disk source=/data path=/mnt/data
8. 配置与 Profile
8.1 资源限制
lxc config set myct limits.cpu=2
lxc config set myct limits.memory=2GiB
8.2 cloud-init (自动化初始化)
通过 cloud-init
,可以在创建实例时自动完成更新、安装软件、运行命令等初始化工作。
lxc launch images:ubuntu/22.04 myweb -c user.user-data="$(cat <<'EOF'
#cloud-config
package_update: true
packages:
- nginx
runcmd:
- [ systemctl, enable, --now, nginx ]
EOF
)"
8.3 嵌套容器 (Nesting)
lxc config set myct security.nesting=true
lxc config set myct security.privileged=true
8.4 GPU 直通 (NVIDIA)
让实例可以直接使用宿主机的 NVIDIA GPU。宿主机需预先安装好 NVIDIA 驱动。
lxc config device add myct gpu gpu
lxc config device add myct gpu0 gpu pci=0000:01:00.0
9. 备份、快照与迁移
lxc snapshot myct snap1
lxc restore myct snap1
lxc export myct ./myct-backup.tar.gz
lxc remote add target 10.0.0.2:8443
lxc copy myct target:myct --instance-only
10. 多节点集群(可选)
LXD 支持将多台物理机组成一个集群,统一管理所有节点上的资源。这属于高级功能,适合生产环境或大规模部署。
sudo lxd init
lxc cluster add node2
...
11. 安全与隔离
- 非特权容器 (默认): 这是 LXD 的核心安全特性。通过 uid/gid 映射,容器内的 root 用户在宿主机上只是一个普通用户,极大地增强了隔离性。
- 内核安全模块: LXD 默认启用 seccomp, AppArmor, namespaces, cgroups 等多层 Linux 内核安全机制。
- 特权容器: 仅在绝对必要时才设置
security.privileged=true
。 - 网络安全: 暴露服务到公网时,建议使用
proxy
设备或在前面架设反向代理。
12. 常见问题与排错
- 容器无法上网?
- 检查
lxdbr0
DHCP;检查宿主防火墙 (ufw) 是否阻断转发。尝试:sudo ufw allow in on lxdbr0
,或设置DEFAULT_FORWARD_POLICY="ACCEPT"
。 - 端口映射不生效?
- 检查
listen
地址;检查宿主机端口是否被占用 (sudo ss -tulpn
);检查容器内服务监听地址。 - 如何 SSH 进入容器?
- 首选
lxc exec
。如需 SSH,需在容器内安装openssh-server
并做端口映射。
13. 实战示例
13.1 5 分钟上线一个 Nginx 网站
lxc launch images:ubuntu/22.04 myweb
lxc exec myweb -- apt update && apt install -y nginx
lxc config device add myweb web proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80
sudo mkdir -p /srv/webroot && echo "Hello from LXD" > /srv/webroot/index.html
lxc config device add myweb www disk source=/srv/webroot path=/var/www/html
13.2 轻量 VM 跑 Docker
lxc launch images:ubuntu/24.04/cloud dvm --vm -c limits.cpu=2 -c limits.memory=4GiB
lxc exec dvm -- bash -c "apt update && apt install -y docker.io"
13.3 GPU 推理(容器)
lxc launch images:ubuntu/22.04 llm
lxc config device add llm gpu gpu
lxc exec llm -- apt update && apt install -y nvidia-utils-535
lxc exec llm -- nvidia-smi
14. 学习路径建议
- 入门:跑通 安装 ->
lxd init
-> 创建容器/VM 的基本操作。 - 核心:熟练掌握 proxy 端口映射、存储目录挂载 和 快照/恢复。
- 进阶:学习使用 Profile + cloud-init 来标准化和自动化你的环境部署。
- 扩展:了解 Projects 的概念,用于实现多项目隔离。
- 按需深入:当有特定需求时,再研究 GPU 直通、多节点集群等。