debian LXD 安装使用

AI:腾讯元宝

在 Debian 11 上安装 LXD 主要有两种主流方式:一是通过 Snap 包安装(这是 Canonical 官方推荐的方式),二是通过第三方提供的 Apt 仓库安装。下面我将为你详细介绍这两种方法的步骤,并提供一些初始配置技巧。

方法一:通过 Snap 安装(官方推荐)

这是最直接、与官方版本同步的安装方式。

  1. 安装 Snapd 如果你的系统尚未安装 snapd,需要先安装它: sudo apt update sudo apt install snapd
  2. 安装 LXD 通过 snap 安装 LXD 核心软件包: sudo snap install lxd安装完成后,如果 lxd命令未找到,可以尝试注销后重新登录,或者运行 source /etc/profile重新加载环境变量 。
  3. 初始化 LXD 这是最关键的一步,用于设置存储、网络等基本配置: sudo lxd init你会看到一个交互式向导。对于大多数情况,一路按回车选择默认值即可,但有几个关键点需要注意 :
配置选项建议
Storage backend推荐使用 zfsbtrfs(需先安装 zfsutils-linuxbtrfs-progs),以便使用快照等高级功能 。如果追求简单,可选择 dir
Network bridge选择 yes创建网桥(通常名为 lxdbr0),这样容器才能自动获得 IP 地址并联网 。
IPv4 地址通常选择 auto让 LXD 自动分配一个私有网段(如 10.x.x.x)即可 。
  1. 将用户加入 LXD 组 为了允许你的普通用户权限运行 lxc命令而不需要每次都加 sudo,请将你的用户名加入 lxd组: sudo usermod -a -G lxd $USER执行此命令后,需要完全注销并重新登录,或者重启系统,组权限更改才会生效。

方法二:通过 Apt 仓库安装(来自 Zabbly)

如果你不希望使用 Snap,可以选择由社区维护的 Apt 仓库。

  1. 安装依赖 sudo apt update sudo apt install curl gpg btrfs-progs
  2. 添加第三方仓库的密钥和源 按照搜索结果中提供的信息,可以添加 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略有不同但高度相似。
  3. 安装软件包 sudo apt update sudo apt install incus
  4. 初始化 初始化过程与 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获取容器的交互式Shelllxc 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容器创建一个独立的网络空间。

  1. 创建网桥:使用 lxc network create命令。你可以通过参数直接指定IPv4地址段(网段)。例如,创建一个名为 my-bridge的网桥,并指定其管理网段为 192.168.1.1/24lxc network create my-bridge ipv4.address=192.168.1.1/24 ipv6.address=none
    • my-bridge是你为这个新网桥起的名字。
    • ipv4.address=192.168.1.1/24指定了网桥的IP地址(通常是网关地址)和子网掩码。这里的 /24对应掩码 255.255.255.0,网段包含 192.168.1.1192.168.1.254
    • ipv6.address=none表示暂时禁用IPv6。
  2. 将容器连接到网桥:网桥创建好后,需要将容器的网络设备(如 eth0)连接到这个网桥。对于已存在的容器(例如名为 my-container),可以使用以下命令: lxc network attach my-bridge my-container eth0这条命令会将容器 my-containereth0网卡连接到网桥 my-bridge上。之后,容器可以从该网桥定义的网段中获取IP地址。

通过LXD网络设备配置

这种方法是从宿主机层面进行管理,非常可靠。例如,为容器 my-containereth0网卡设置静态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

滑稽的菊花

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Post comment