debian LXD 安装使用
AI:腾讯元宝
在 Debian 11 上安装 LXD 主要有两种主流方式:一是通过 Snap 包安装(这是 Canonical 官方推荐的方式),二是通过第三方提供的 Apt 仓库安装。下面我将为你详细介绍这两种方法的步骤,并提供一些初始配置技巧。
方法一:通过 Snap 安装(官方推荐)
这是最直接、与官方版本同步的安装方式。
- 安装 Snapd 如果你的系统尚未安装
snapd,需要先安装它:sudo apt update sudo apt install snapd - 安装 LXD 通过 snap 安装 LXD 核心软件包:
sudo snap install lxd安装完成后,如果lxd命令未找到,可以尝试注销后重新登录,或者运行source /etc/profile重新加载环境变量 。 - 初始化 LXD 这是最关键的一步,用于设置存储、网络等基本配置:
sudo lxd init你会看到一个交互式向导。对于大多数情况,一路按回车选择默认值即可,但有几个关键点需要注意 :
| 配置选项 | 建议 |
|---|---|
| Storage backend | 推荐使用 zfs或 btrfs(需先安装 zfsutils-linux或 btrfs-progs),以便使用快照等高级功能 。如果追求简单,可选择 dir。 |
| Network bridge | 选择 yes创建网桥(通常名为 lxdbr0),这样容器才能自动获得 IP 地址并联网 。 |
| IPv4 地址 | 通常选择 auto让 LXD 自动分配一个私有网段(如 10.x.x.x)即可 。 |
- 将用户加入 LXD 组 为了允许你的普通用户权限运行
lxc命令而不需要每次都加sudo,请将你的用户名加入lxd组:sudo usermod -a -G lxd $USER执行此命令后,需要完全注销并重新登录,或者重启系统,组权限更改才会生效。
方法二:通过 Apt 仓库安装(来自 Zabbly)
如果你不希望使用 Snap,可以选择由社区维护的 Apt 仓库。
- 安装依赖
sudo apt update sudo apt install curl gpg btrfs-progs - 添加第三方仓库的密钥和源 按照搜索结果中提供的信息,可以添加 Zabbly 仓库来安装 LXD 。
# 下载并导入密钥 curl -fsSL https://pkgs.zabbly.com/key.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/zabbly.asc # 添加仓库源 sudo sh -c 'cat > /etc/apt/sources.list.d/zabbly-incus-stable.sources <<EOF Enabled: yes Types: deb URIs: https://pkgs.zabbly.com/incus/stable Suites: $(. /etc/os-release && echo ${VERSION_CODENAME}) Components: main Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/trusted.gpg.d/zabbly.asc EOF'由于该仓库提供的是 Incus(一个 LXD 的分支),其管理命令为incus,与lxc略有不同但高度相似。 - 安装软件包
sudo apt update sudo apt install incus - 初始化 初始化过程与 Snap 方式类似:
sudo incus admin init
🚀 安装后的基本使用与配置
无论通过哪种方式安装,完成后都可以进行以下操作:
- 创建第一个容器:使用以下命令启动一个 Ubuntu 22.04 容器:
# 如果通过 Snap 安装 LXD lxc launch images:ubuntu/22.04 my-first-container # 如果通过 Apt 安装 Incus incus launch images:ubuntu/22.04 my-first-container - 加速镜像下载:为了更快的下载速度,可以添加国内的镜像源,例如清华 tuna 源 :
lxc remote add tuna-images https://mirrors.tuna.tsinghua.edu.cn/lxc-images/ --protocol=simplestreams --public # 然后从该源创建容器 lxc launch tuna-images:ubuntu/22.04 my-container - 查看容器列表:
lxc list - 进入容器:
lxc exec my-first-container -- /bin/bash
⚠️ 注意事项
- 网络冲突:如果宿主机上已经安装了 Docker,在初始化 LXD 的网络桥接时可能会遇到冲突(因为 Docker 会创建自己的网络接口)。如果出现问题,可能需要调整 Docker 或 LXD 的网络配置,或者在初始化 LXD 时选择不同的网段 。
- 防火墙:Debian 11 默认安装了
iptables,LXD 会自动配置相关规则。如果你还使用了其他防火墙工具(如ufw),可能需要额外放行流量。
希望这份详细的指南能帮助你在 Debian 11 上顺利安装和配置 LXD!如果你在安装过程中遇到任何具体问题,比如某个步骤报错,可以告诉我,我们再一起分析。
相关命令
这里有一份实用的LXD命令手册,方便你随时查阅。下表汇总了常用的核心命令及其功能,之后我们会探讨一些进阶配置技巧。
🔧 容器生命周期管理
| 命令 | 功能描述 | 示例 |
|---|---|---|
| lxc init | 若存在本地镜像 | lxc init [本地镜像名称] [容器名称] 例子: lxc init local-debian mycontainer |
lxc launch | 创建并启动一个新容器 | lxc launch images:debian/12/amd64 my-container |
lxc init | 创建但不启动容器 | lxc init images:rockylinux/9/default myRocky1 |
lxc start | 启动一个已存在的容器 | lxc start my-container |
lxc stop | 停止一个运行中的容器 | lxc stop my-container |
lxc restart | 重启容器 | lxc restart my-container |
lxc pause | 暂停容器(保留在内存) | lxc pause my-container |
lxc list | 列出所有容器 | lxc list |
lxc info | 显示容器的详细信息 | lxc info my-container |
lxc delete | 删除容器 | lxc delete my-container |
lxc exec | 在容器内执行命令 | lxc exec my-container -- apt update |
lxc exec ... bash | 获取容器的交互式Shell | lxc exec my-container -- /bin/bash |
⚙️ 配置与设备管理
| 命令 | 功能描述 | 示例 |
|---|---|---|
lxc config set | 设置容器的配置项 | lxc config set my-container limits.memory 2GB |
lxc config show | 显示容器的当前配置 | lxc config show my-container |
lxc config edit | 编辑容器的完整配置(YAML格式) | lxc config edit my-container |
lxc config device add | 给容器添加设备(如磁盘、GPU) | lxc config device add my-container host-disk disk source=/path/on/host path=/path/in/container |
📁 文件操作
| 命令 | 功能描述 | 示例 |
|---|---|---|
lxc file pull | 从容器下载文件或目录到宿主机 | lxc file pull my-container/etc/hostname ./ |
lxc file push | 从宿主机上传文件或目录到容器 | lxc file push ./file.txt my-container/tmp/ |
lxc file edit | 直接编辑容器内的文件 | lxc file edit my-container/etc/hosts |
🔄 镜像管理
| 命令 | 功能描述 | 示例 |
|---|---|---|
lxc image list | 列出本地可用的镜像 | lxc image list |
lxc image copy | 从远程服务器复制镜像到本地 | lxc image copy images:debian/12/amd64 local: --alias local-debian12 |
lxc image delete | 删除本地镜像 | lxc image delete ubuntu-22.04 |
🌐 网络与配置模板
| 命令 | 功能描述 | 示例 |
|---|---|---|
lxc network list | 列出可用的网络 | lxc network list |
lxc network create | 创建一个新的网络桥接 | lxc network create my-bridge |
| lxc network attach | 将网络附加到实例 | 停止容器 lxc stop my-container 将容器的eth0网卡连接到LXD的默认网桥(lxdbr0),并设置静态IP lxc network attach lxdbr0 my-container eth0 lxc config device set my-container eth0 ipv4.address 192.168.1.100 启动容器 lxc start my-container |
lxc profile list | 列出配置模板(profile) | lxc profile list |
lxc profile edit | 编辑一个配置模板(YAML格式) | lxc profile edit default |
💡 进阶使用技巧
掌握了基本命令后,以下技巧能让你更高效地使用LXD:
- 使用镜像源加速:国内用户可以通过添加清华TUNA等镜像源来加速镜像下载:
lxc remote add tuna-images https://mirrors.tuna.tsinghua.edu.cn/lxc-images/ --protocol=simplestreams --public lxc launch tuna-images:ubuntu/20.04 my-fast-container - 设置容器自启动:对于需要长期运行的服务,可以设置容器随宿主机启动而自动启动:
lxc config set my-container boot.autostart true - 灵活的资源限制:在创建容器时或后期动态调整资源限制非常方便:
# 创建时限制 lxc launch ubuntu:22.04 limited-container --config limits.cpu=2 --config limits.memory=4GB # 后期调整内存限制 lxc config set limited-container limits.memory=2GB - 端口转发实现外部访问:如果容器内运行了Web服务(如Apache,监听80端口),可以通过端口转发从宿主机外部访问:
# 将宿主机的8080端口转发到容器的80端口 lxc config device add my-container web-port proxy listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80
💎 简单记忆
核心操作流程可以简化为:选择镜像 -> 使用 lxc launch创建并启动容器 -> 使用 lxc exec进入容器操作 -> 按需使用 lxc config进行配置。更复杂的需求(如GPU透传、复杂网络设置)可以在掌握基础后进一步探索。
查看镜像
查看 LXD 可用的镜像列表主要通过 lxc image list命令实现,并可以指定不同的远程服务器和进行过滤。下面这个表格汇总了常用的核心命令及其功能,方便你快速查阅。
| 操作场景 | 命令示例 | 说明与技巧 |
|---|---|---|
| 查看默认远程服务器镜像 | lxc image list ubuntu: | 列出官方Ubuntu镜像(稳定版)。 |
lxc image list images: | 列出社区维护的多种发行版镜像(如CentOS、Debian等)。 | |
| 使用特定远程服务器 | lxc image list tuna-images: | 查看已添加的特定远程服务器(如清华TUNA源)的镜像列表 。 |
| 过滤特定系统或版本 | lxc image list images: alpine | 列出所有Alpine Linux版本的镜像。 |
lxc image list ubuntu: jammy | 列出Ubuntu 22.04 (Jammy Jellyfish) 的镜像。 | |
| 查看已缓存的本地镜像 | lxc image list | 列出已下载到本地的镜像,创建容器时可直接使用,速度更快 。 |
💡 镜像源与加速
刚开始使用LXD时,默认配置了三个远程镜像服务器(Remotes):ubuntu(稳定版Ubuntu镜像)、ubuntu-daily(每日构建版)和 images(由社区维护的各种发行版镜像)。你可以使用 lxc remote list查看所有已配置的远程服务器 。 为了更快的下载速度,特别是位于国内网络环境时,可以添加国内的镜像源,例如清华TUNA源 :
lxc remote add tuna-images https://mirrors.tuna.tsinghua.edu.cn/lxc-images/ --protocol=simplestreams --public
添加后,你就可以通过 lxc image list tuna-images:查看该源上的镜像,并使用类似 lxc launch tuna-images:ubuntu/20.04 my-container的命令从该源创建容器 。
🔍 镜像列表信息解读
运行 lxc image list命令后,会看到一个表格,主要包含以下几列信息:
- ALIAS: 镜像的别名,便于记忆和使用(如
ubuntu/22.04)。 - FINGERPRINT: 镜像的唯一哈希标识符。
- SIZE: 镜像文件的大小。
- ARCHITECTURE: 镜像的架构(如 x86_64, aarch64)。
LXD 网络配置
🔧 使用LXD命令创建网络桥接
这是最直接和常见的方法,特别适合为LXD容器创建一个独立的网络空间。
- 创建网桥:使用
lxc network create命令。你可以通过参数直接指定IPv4地址段(网段)。例如,创建一个名为my-bridge的网桥,并指定其管理网段为192.168.1.1/24:lxc network create my-bridge ipv4.address=192.168.1.1/24 ipv6.address=nonemy-bridge是你为这个新网桥起的名字。ipv4.address=192.168.1.1/24指定了网桥的IP地址(通常是网关地址)和子网掩码。这里的/24对应掩码255.255.255.0,网段包含192.168.1.1到192.168.1.254。ipv6.address=none表示暂时禁用IPv6。
- 将容器连接到网桥:网桥创建好后,需要将容器的网络设备(如
eth0)连接到这个网桥。对于已存在的容器(例如名为my-container),可以使用以下命令:lxc network attach my-bridge my-container eth0这条命令会将容器my-container的eth0网卡连接到网桥my-bridge上。之后,容器可以从该网桥定义的网段中获取IP地址。
通过LXD网络设备配置
这种方法是从宿主机层面进行管理,非常可靠。例如,为容器 my-container的 eth0网卡设置静态IP 192.168.1.100,操作步骤如下:
# 停止容器
lxc stop my-container
# 将容器的eth0网卡连接到LXD的默认网桥(lxdbr0),并设置静态IP
lxc network attach lxdbr0 my-container eth0
lxc config device set my-container eth0 ipv4.address 192.168.1.100
# 启动容器
lxc start my-container
容器无法获取ip问题
住:同时存在 Lxd 和 Dorcker 会出现 Lxd 获取不到 ip
以下为解决方法
操作 容器:
### 临时添加
# 添加IP地址,为接口eth0临时添加一个静态IP地址和子网掩码
ip addr add 192.168.1.100/24 dev eth0
# 添加默认网关
ip route add default via 192.168.1.1
### 永久添加
# 住
# 编辑 开机运行脚本 3种方法
# 方法1.放入 /etc/init.d/ 下
# 方法2(可用).写入或引入脚本到 /etc/rc.local 内
# 方法3.登录用户时运行放入 /etc/profile.d/ 下
# 请按顺序尝试
操作 宿主机,使其可访问 网络:
方案1(使用此方法):修改系统参数并重启LXD服务
从根源启用转发,一劳永逸
# 开启 内核转发
# 编辑 /etc/sysctl.conf文件
# 添加 net.ipv4.ip_forward=1
# 重启 lxd
sudo systemctl restart lxd
# 或者使用LXD自带命令
sudo lxd shutdown
sudo lxd
方案2:调整IPTables规则
临时解决特定流向问题
# 添加一条规则,允许LXD网桥的流量通过。
# 你需要将命令中的 <network_bridge>(通常是 lxdbr0)
# 和 <external_interface>(如 eth0或 ens33,即主机连接外网的网卡)
# 替换为实际的接口名。
sudo iptables -I DOCKER-USER -i lxdbr0 -o eth0 -j ACCEPT
相关容器镜像
almalinux/8 devuan/chimaera
almalinux/8/amd64 devuan/chimaera/amd64
almalinux/8/arm64 devuan/chimaera/arm64
almalinux/8/cloud devuan/chimaera/cloud
almalinux/8/cloud/amd64 devuan/chimaera/cloud/amd64
almalinux/8/cloud/arm64 devuan/chimaera/cloud/arm64
almalinux/8/default devuan/chimaera/default
almalinux/8/default/amd64 devuan/chimaera/default/amd64
almalinux/8/default/arm64 devuan/chimaera/default/arm64
almalinux/9 devuan/daedalus
almalinux/9/amd64 devuan/daedalus/amd64
almalinux/9/arm64 devuan/daedalus/arm64
almalinux/9/cloud devuan/daedalus/cloud
almalinux/9/cloud/amd64 devuan/daedalus/cloud/amd64
almalinux/9/cloud/arm64 devuan/daedalus/cloud/arm64
almalinux/9/default devuan/daedalus/default
almalinux/9/default/amd64 devuan/daedalus/default/amd64
almalinux/9/default/arm64 devuan/daedalus/default/arm64
alpine/3.20 fedora/42
alpine/3.20/amd64 fedora/42/amd64
alpine/3.20/arm64 fedora/42/arm64
alpine/3.20/cloud fedora/42/cloud
alpine/3.20/cloud/amd64 fedora/42/cloud/amd64
alpine/3.20/cloud/arm64 fedora/42/cloud/arm64
alpine/3.20/default fedora/42/default
alpine/3.20/default/amd64 fedora/42/default/amd64
alpine/3.20/default/arm64 fedora/42/default/arm64
alpine/3.21 fedora/43
alpine/3.21/amd64 fedora/43/amd64
alpine/3.21/arm64 fedora/43/arm64
alpine/3.21/cloud fedora/43/cloud
alpine/3.21/cloud/amd64 fedora/43/cloud/amd64
alpine/3.21/cloud/arm64 fedora/43/cloud/arm64
alpine/3.21/default fedora/43/default
alpine/3.21/default/amd64 fedora/43/default/amd64
alpine/3.21/default/arm64 fedora/43/default/arm64
alpine/3.22 gentoo/current/openrc
alpine/3.22/amd64 gentoo/current/openrc/amd64
alpine/3.22/arm64 gentoo/current/openrc/arm64
alpine/3.22/cloud gentoo/current/systemd
alpine/3.22/cloud/amd64 gentoo/current/systemd/amd64
alpine/3.22/cloud/arm64 gentoo/current/systemd/arm64
alpine/3.22/default gentoo/openrc
alpine/3.22/default/amd64 gentoo/openrc/amd64
alpine/3.22/default/arm64 gentoo/openrc/arm64
alpine/3.23 gentoo/systemd
alpine/3.23/amd64 gentoo/systemd/amd64
alpine/3.23/arm64 gentoo/systemd/arm64
alpine/3.23/cloud kali
alpine/3.23/cloud/amd64 kali/amd64
alpine/3.23/cloud/arm64 kali/arm64
alpine/3.23/default kali/cloud
alpine/3.23/default/amd64 kali/cloud/amd64
alpine/3.23/default/arm64 kali/cloud/arm64
alpine/edge kali/current/cloud
alpine/edge/amd64 kali/current/cloud/amd64
alpine/edge/arm64 kali/current/cloud/arm64
alpine/edge/cloud kali/current/default
alpine/edge/cloud/amd64 kali/current/default/amd64
alpine/edge/cloud/arm64 kali/current/default/arm64
alpine/edge/default kali/default
alpine/edge/default/amd64 kali/default/amd64
alpine/edge/default/arm64 kali/default/arm64
alt/Sisyphus mint/21.3
alt/Sisyphus/amd64 mint/21.3/amd64
alt/Sisyphus/arm64 mint/21.3/cloud
alt/Sisyphus/default mint/21.3/cloud/amd64
alt/Sisyphus/default/amd64 mint/21.3/default
alt/Sisyphus/default/arm64 mint/21.3/default/amd64
alt/p11 mint/virginia
alt/p11/amd64 mint/virginia/amd64
alt/p11/arm64 mint/virginia/cloud
alt/p11/default mint/virginia/cloud/amd64
alt/p11/default/amd64 mint/virginia/default
alt/p11/default/arm64 mint/virginia/default/amd64
amazonlinux/2023 mint/xia
amazonlinux/2023/amd64 mint/xia/amd64
amazonlinux/2023/arm64 mint/xia/cloud
amazonlinux/2023/default mint/xia/cloud/amd64
amazonlinux/2023/default/amd64 mint/xia/default
amazonlinux/2023/default/arm64 mint/xia/default/amd64
archlinux nixos/25.05
archlinux/amd64 nixos/25.05/amd64
archlinux/arm64 nixos/25.05/arm64
archlinux/cloud nixos/25.05/default
archlinux/cloud/amd64 nixos/25.05/default/amd64
archlinux/current/cloud nixos/25.05/default/arm64
archlinux/current/cloud/amd64 openeuler/24.03
archlinux/current/default openeuler/24.03/amd64
archlinux/current/default/amd64 openeuler/24.03/arm64
archlinux/current/default/arm64 openeuler/24.03/cloud
archlinux/current/desktop-gnome openeuler/24.03/cloud/amd64
archlinux/current/desktop-gnome/amd64 openeuler/24.03/cloud/arm64
archlinux/default openeuler/24.03/default
archlinux/default/amd64 openeuler/24.03/default/amd64
archlinux/default/arm64 openeuler/24.03/default/arm64
archlinux/desktop-gnome opensuse/15.6
archlinux/desktop-gnome/amd64 opensuse/15.6/amd64
busybox/1.36.1 opensuse/15.6/arm64
busybox/1.36.1/amd64 opensuse/15.6/default
busybox/1.36.1/arm64 opensuse/15.6/default/amd64
busybox/1.36.1/default opensuse/15.6/default/arm64
busybox/1.36.1/default/amd64 opensuse/15.6/desktop-kde
busybox/1.36.1/default/arm64 opensuse/15.6/desktop-kde/amd64
centos/9-Stream opensuse/tumbleweed
centos/9-Stream/amd64 opensuse/tumbleweed/amd64
centos/9-Stream/arm64 opensuse/tumbleweed/arm64
centos/9-Stream/cloud opensuse/tumbleweed/cloud
centos/9-Stream/cloud/amd64 opensuse/tumbleweed/cloud/amd64
centos/9-Stream/cloud/arm64 opensuse/tumbleweed/cloud/arm64
centos/9-Stream/default opensuse/tumbleweed/default
centos/9-Stream/default/amd64 opensuse/tumbleweed/default/amd64
centos/9-Stream/default/arm64 opensuse/tumbleweed/default/arm64
debian/11 opensuse/tumbleweed/desktop-kde
debian/11/amd64 opensuse/tumbleweed/desktop-kde/amd64
debian/11/arm64 openwrt/24.10
debian/11/cloud openwrt/24.10/amd64
debian/11/cloud/amd64 openwrt/24.10/arm64
debian/11/cloud/arm64 openwrt/24.10/default
debian/11/default openwrt/24.10/default/amd64
debian/11/default/amd64 openwrt/24.10/default/arm64
debian/11/default/arm64 openwrt/snapshot
debian/12 openwrt/snapshot/amd64
debian/12/amd64 openwrt/snapshot/default
debian/12/arm64 openwrt/snapshot/default/amd64
debian/12/cloud oracle/8
debian/12/cloud/amd64 oracle/8/amd64
debian/12/cloud/arm64 oracle/8/cloud
debian/12/default oracle/8/cloud/amd64
debian/12/default/amd64 oracle/8/default
debian/12/default/arm64 oracle/8/default/amd64
debian/13 oracle/9
debian/13/amd64 oracle/9/amd64
debian/13/arm64 oracle/9/arm64
debian/13/cloud oracle/9/cloud
debian/13/cloud/amd64 oracle/9/cloud/amd64
debian/13/cloud/arm64 oracle/9/cloud/arm64
debian/13/default oracle/9/default
debian/13/default/amd64 oracle/9/default/amd64
debian/13/default/arm64 oracle/9/default/arm64
debian/bookworm rockylinux/8
debian/bookworm/amd64 rockylinux/8/amd64
debian/bookworm/arm64 rockylinux/8/arm64
debian/bookworm/cloud rockylinux/8/cloud
debian/bookworm/cloud/amd64 rockylinux/8/cloud/amd64
debian/bookworm/cloud/arm64 rockylinux/8/cloud/arm64
debian/bookworm/default rockylinux/8/default
debian/bookworm/default/amd64 rockylinux/8/default/amd64
debian/bookworm/default/arm64 rockylinux/8/default/arm64
debian/bullseye rockylinux/9
debian/bullseye/amd64 rockylinux/9/amd64
debian/bullseye/arm64 rockylinux/9/arm64
debian/bullseye/cloud rockylinux/9/cloud
debian/bullseye/cloud/amd64 rockylinux/9/cloud/amd64
debian/bullseye/cloud/arm64 rockylinux/9/cloud/arm64
debian/bullseye/default rockylinux/9/default
debian/bullseye/default/amd64 rockylinux/9/default/amd64
debian/bullseye/default/arm64 rockylinux/9/default/arm64
debian/forky slackware
debian/forky/amd64 slackware/amd64
debian/forky/arm64 slackware/current/default
debian/forky/cloud slackware/current/default/amd64
debian/forky/cloud/amd64 slackware/default
debian/forky/cloud/arm64 slackware/default/amd64
debian/forky/default ubuntu/22.04/desktop
debian/forky/default/amd64 ubuntu/22.04/desktop/amd64
debian/forky/default/arm64 ubuntu/24.04/desktop
–More– ^C
