如何使用 apt/snap 在 Ubuntu 22.04 LTS 上安装 LXD
LXD 容器系统由 Ubuntu 团队支持和创建。它的性能比 Vmware ESX 快 25-30%,密度是 Vmware ESX 的十倍,且延迟为零。可以使用 LXD 将 Linux VM 直接移动到容器,而无需修改应用程序或管理流程。您可以在容器中运行各种 Linux 发行版。本页介绍如何在 Ubuntu 22.04 LTS 上安装和配置 LXD。
教程详细信息 | |
---|---|
难度等级 | 中间的 |
Root 权限 | 是的 |
要求 | Linux 终端 |
类别 | 路西法 |
先决条件 | Ubuntu 22.04 LTS |
操作系统兼容性 | Linux • Ubuntu |
预计阅读时间 | 11 分钟 |
为什么在 Ubuntu 22.04 LTS 上使用 LXD?
LXD 是一种容器体验,提供 ReST API 来管理 LXC 容器。可以使用 LXD执行以下操作:
- 非特权容器(设计安全)
- 可扩展
- 实时迁移
- 对 CPU、内存、磁盘/网络 I/O、内核模块等进行高级资源控制)
- 在本地开发箱上模拟 AWS 实例类型
- GPU、USB、NIC、磁盘等的硬件直通支持
- 运行容器
- 更新容器
- 集群支持
- 易于管理
- 在容器内安装不同的 Linux 发行版
- 管理容器资源,如存储卷、映射目录、内存/磁盘 I/O 限制、网络等
在 Ubuntu 22.04 LTS 服务器或桌面上安装并设置 LXD
让我们看一下设置 LXD 的所有分步说明:
步骤 1 – 在 Ubuntu 22.4 LTS Linux 服务器上安装 LXD
首先,使用apt 命令/ apt-get 命令在 Ubuntu 上安装安全更新。例如:
是否安装了新的 Linux 内核?如果是,则必须使用关机命令或重启命令重启 Ubuntu Linux机器以获取新的 Linux 内核。例如:
$ sudo apt update
$ sudo apt upgrade
$ sudo reboot
apt 命令使用 snap 方法。因此,请从 snap 命令本身开始。
要安装 LXD 的稳定分支,请运行以下apt 命令或 snap 命令:
$ sudo apt install lxd-installer
在镜像中安装 lxd-installer 包而不是 lxd snap 包可以使其更小,同时保留完整服务器镜像的命令行界面。或者,我们可以直接使用 snap 命令,如下所示:
$ snap install lxd --channel=latest/stable
步骤 2 – 将用户添加到 LXD 组以便管理
无需成为 root 用户即可管理 LXD 守护进程。要管理 LXD 服务器,请使用 Ubuntu Linux 上的 adduser 将您的用户名添加到 lxd 组:
组成员身份仅在下次登录或启动新的 ssh 会话时应用。因此,您需要关闭并重新打开您的用户/ssh 会话,或使用以下 newgrp 命令在 Linux 下立即申请或刷新组成员身份:使用id 命令
验证成员身份详细信息:
使用 lxc 命令进行测试:
$ sudo adduser {USERNameHere} lxd
# add regular user named 'vivek' to group lxd #
$ sudo adduser vivek lxd
$ sudo adduser $USER lxd
$ newgrp lxd
$ id
$ lxc list
步骤 3 - 设置并配置 LXD 网络和存储选项
现在我们已经安装了 LXD,是时候设置 LXD 服务器了。您必须配置网络和存储选项,例如目录、ZFS、Btrfs 等,输入:
$ sudo lxd init
接下来,您必须回答一系列有关如何配置 LXD 服务器的问题,包括存储和网络选项。这是一个示例会话。请根据需要随意选择选项:
在 Ubuntu 22.04 LTS 上设置和配置 LXD 网络和存储选项(点击放大)
我们可以通过输入以下命令来验证信息:
$ lxc profile list
$ lxc profile show default
$ lxc network list
$ lxc network show lxdbr0
$ lxc storage list
$ lxc storage show examplezfs
为网桥添加 ufw 规则
我在 Ubuntu 22.04 LTS 上使用ufw ,并且已将 lxdbr0 配置为我的网桥。如果将 UFW 设置为丢弃所有未知流量,它将阻止流量往返于 LXD 网桥。要解决此问题,您需要创建允许流量通过网桥和转发到网桥的规则。语法是:如果
没有这些 ufw 规则,您的容器将不会从 LXD DHCP 服务器获取 IP 地址,也不会有任何网络。您的所有容器都会收到错误,例如:
$ sudo ufw allow in on lxdbr0 comment 'lxdbr0 for LXD'
$ sudo ufw route allow in on lxdbr0 comment 'lxdbr0 for LXD'
$ sudo ufw route allow out on lxdbr0 comment 'lxdbr0 for LXD'
Temporary failure resolving names
步骤 4 - 列出各种 Linux 发行版的内置 LXD 映像
要列出所有 LXD 图像,请运行:
$ lxc image list images:
$ lxc image list images: | grep -i debian
$ lxc image list images: | grep -i -E 'ubuntu|debian'
$ lxc image list images: alpine
步骤 5 - 创建你的第一个 Linux 容器
创建第一个容器非常简单。语法如下:
$ lxc launch images:{distro}/{version}/{arch} {container-name-here}
在您的开发箱上获取公共云实例
您想了解开发机器上的应用程序在云实例上的表现吗?别担心。您可以快速启动与所需云实例类型匹配的 LXD 容器。语法如下:
例如,以下是如何使用名为 aws-t2-nano 的 Ubuntu 22.04 创建 t2.nano 实例(1 个 CPU 和 0.5M 内存):
验证:
这是我看到的:
$ lxc launch -t {type} {os/version} {container-name}
$ lxc launch -t {type} images:{os/version/arch} {container-name}
$ lxc launch -t t2.nano ubuntu:22.04 aws-t2-nano
$ lxc info aws-t2-nano
Name: aws-t2-nano Status: RUNNING Type: container Architecture: x86_64 PID: 42210 Created: 2023/03/22 20:42 UTC Last Used: 2023/03/22 20:42 UTC Resources: Processes: 33 Disk usage: root: 9.49MiB CPU usage: CPU usage (in seconds): 16 Memory usage: Memory (current): 204.95MiB Network usage: eth0: Type: broadcast State: UP Host interface: vethb4efc13f MAC address: 00:16:3e:9a:b6:1d MTU: 1500 Bytes received: 252.83kB Bytes sent: 15.19kB Packets received: 136 Packets sent: 132 IP addresses: inet: 10.34.26.37/24 (global) inet6: fe80::216:3eff:fe9a:b61d/64 (link) lo: Type: loopback State: UP MTU: 65536 Bytes received: 1.56kB Bytes sent: 1.56kB Packets received: 16 Packets sent: 16 IP addresses: inet: 127.0.0.1/8 (local) inet6: ::1/128 (local)
登录并运行 htop:
$ lxc exec aws-t2-nano -- htop
LXD 在本地开发机器上运行 t2.nano 实例类型,以在本地模拟 AWS EC2(点击放大)
Alpine Linux 3.17 容器
此处的容器名为“alpine”,使用版本 3.17:
$ lxc launch images:alpine/3.17/amd64 alpine
接下来,尝试列出并登录新创建的“alpine”容器:
$ lxc list
$ lxc exec alpine sh
# cat /etc/os-release
# ping -c2 www.example.com
# exit from the container and delete it #
# exit
$ lxc stop alpine
$ lxc delete alpine
$ lxc list
CentOS Linux 9 Stream 容器
$ lxc launch images:centos/9-Stream/amd64 cenots
Ubuntu Linux 18.04、20.04 或 22.04 LTS 容器
$ lxc launch images:ubuntu/bionic/amd64 ubuntu-bionic
$ lxc launch images:ubuntu/focal/amd64 ubuntu-focal
$ lxc launch images:ubuntu/jammy/amd64 ubuntu-jammy
Debian Linux 10.x / 11.x 容器
$ lxc launch images:debian/10/amd64 debian-10
$ lxc launch images:debian/11/amd64 debian-11
Arch Linux 容器
$ lxc launch images:archlinux/amd64 arch
Gentoo Linux 容器
您可以选择 openrc 或 systemd 作为 Gentoo 的 init:
$ lxc launch images:gentoo/openrc/amd64 gentoo
或者
$ lxc launch images:gentoo/systemd/amd64 gentoo
Fedora Linux 37 容器
$ lxc launch images:fedora/37/amd64 fedora-37
OpenSUSE Linux 15.x 容器
$ lxc launch images:opensuse/15.4/amd64 opensuse15-4
Oracle Linux 9.x 容器
$ lxc launch images:oracle/9/amd64 oracle-9
步骤 6 - 使用 lxc CLI 管理基于 LXD 的容器
让我们深入了解管理容器的基本命令
列出 Linux 容器实例
我们可以使用以下语法和grep 命令/ egrep 命令作为管道列出现有容器:
$ lxc list --fast
$ lxc list | grep RUNNING
$ lxc list | grep STOPPED
$ lxc list | grep -i opensuse
$ lxc list "*gentoo*"
$ lxc list "*fedora*"
$ lxc list
如何在容器中执行/运行指定的命令
我们使用exec命令在容器中运行或执行命令,如下所示:
$ lxc exec containerName -- command
$ lxc exec containerName -- /path/to/script
$ lxc exec containerName --env EDITOR=/usr/bin/vim -- command
### run date, ip a, ip rm and other commands on various containers ###
$ lxc exec cenots -- date
$ lxc exec cenots -- ip a
$ lxc exec ubuntu-focal -- ip r
$ lxc exec fedora-37 -- dnf -y update
$ lxc exec debian-11 -- cat /etc/debian_version
如何在容器中获取 bash shell 访问权限
想要在名为 debian-10-www 的容器中获得登录/shell 访问权限,请输入:
现在您可以运行命令或安装软件包。例如,在容器内使用apt 命令/ apt-get 命令:
只需输入 exit 即可返回主机:
$ lxc exec {container-name} {shell-name}
$ lxc exec debian-10-www bash
$ lxc exec alpine-c1 sh
# cat /etc/*issue*
# apt update
# apt upgrade
# exit
启动我的容器命令
$ lxc start {container-name}
$ lxc start oracle-8
停止我的容器命令
$ lxc stop {container-name}
$ lxc stop alpine
重启我的容器
$ lxc restart {container-name}
$ lxc restart gentoo
删除 LXD 容器
命令如下。请小心,因为 LXD 容器会立即删除,没有任何确认提示。换句话说,请始终保留备份:
删除容器时可能会出现以下错误:
$ lxc delete {container-name}
$ lxc delete ubuntu-xenial
容器当前正在运行,请先停止它或者通过-force。
修复这个问题:
$ lxc stop ubuntu-xenial && lxc delete ubuntu-xenial
如何显示有关 LXD 服务器和容器的信息?
键入以下命令:
$ lxc info
$ lxc info {container-name}
$ lxc info opensuse15-1-c10
从容器中拉取文件
$ lxc file pull {continer-nane}/{path/to/file} {/path/to/local/dest}
$ lxc file pull ubuntu-xenial/var/www/nginx/app/config.php .
将文件推送到容器
$ lxc file push {/path/to/file} {continer-nane}/path/to/dest/dir/
$ lxc file push config.php ubuntu-xenial/var/www/nginx/app/
步骤 7 - 将传入连接转发到 Linux 容器
首先在ubuntu-nginx里面安装nginx服务器:
示例文件:
$ lxc exec ubuntu-nginx bash
# apt update && apt upgrade && apt install nginx
# systemctl enable nginx
# systemctl status nginx
### update/create the default html file
# cat /var/www/html/index.nginx-debian.html
<!DOCTYPE html> <html> <head> <title>Welcome to nginx running on LXD VM!</title> </head> <body> <h1><h1>Welcome to nginx running on LXD VM!</h1> </body> </html>
最后从 LXD vm 注销:
# logout
查找 ubuntu-nginx IP 地址:
$ lxc list ubuntu-nginx
示例输出:
+--------------+---------+---------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +--------------+---------+---------------------+------+------------+-----------+ | ubuntu-nginx | RUNNING | 10.75.139.74 (eth0) | | PERSISTENT | 0 | +--------------+---------+---------------------+------+------------+-----------+
您需要使用 iptable 命令或ufw 命令将端口 80 上的所有传入流量重定向/转发到 Fedora Linux 28 公共 IP 地址(例如 104.20.187.5)到 LXD 私有 IP 地址 10.75.139.74 ,或者使用 lxd 代理协议。lxd 代理协议的语法为:
lxc config device add {container-name} {device_name_here} proxy listen=tcp:${src_IP}:${src_port} connect=tcp:${dest_ip}:${dest_port}
在此示例中,将 http/80(Nginx)流量重定向到名为 ubuntu-nginx 的容器:
lxc config device add ubuntu-nginx http-reditect proxy listen=tcp:1.2.3.4:80 connect=tcp:10.75.139.74:80 ## OR ## lxc config device add ubuntu-nginx http-reditect proxy listen=tcp:104.20.187.5:80 connect=tcp:10.75.139.74:80
在哪里,
- ubuntu-nginx – LXD 容器或实例虚拟机名称。
- http-reditect – 每个 LXD 容器或实例名称的唯一名称。
- listen=tcp:1.2.3.4:80 – 公共或私有 IPv4/IPv6 和要监听的端口(主机的 IP:PORT)
- connect=tcp:10.75.139.74:80 – 将流量转发到此 LXD 实例的 IP:PORT
测试一下。打开网页浏览器并输入网址:
http://104.20.187.5
步骤 8 - 获取有关 lxc 命令的帮助
获取帮助很容易。尝试传递 --help 选项,如下所示:
$ lxc --help
$ lxc {command} --help
$ lxc list --help
结论
在本深入教程中,您学习了如何使用apt 命令在 Ubuntu 22.04 LTS 服务器上安装和设置 LXD以运行各种 Linux 发行版。有关更多信息,请参阅此处的 lxc 命令和文档。
- 在 Ubuntu 16.04 LTS 上安装 LXD 容器管理程序
- 如何在 Fedora Linux 26 上安装和设置 LXC(Linux 容器)
- 在KVM或Xen虚拟机下设置LXD容器
- 列出 LXD(Linux 容器)中的 VM 映像
- 升级由 Ubuntu/Debian 或 CentOS Linux 驱动的 LXD 容器
- 在 Linux 启动时自动启动 LXD 容器
- 重命名 LXD / LXC 容器的命令
- 在配置启动时在 Linux 容器 (LXD) 实例上运行命令
- 在云实例启动时,使用 shell 脚本中的 LXD(Linux 容器)创建 VM
- 将 LXD VM 移动/迁移到 Linux 上的另一台主机
- Fedora 安装并设置 LXD
- CentOS 7.x 安装并设置 LXD 服务器
- 在 Ubuntu 18.04 LTS 上安装 LXD 纯容器管理程序
- 使用 lxc 命令为 LXD 创建快照
- 在 CentOS/RHEL 8 上设置并安装 LXD
- Ubuntu 20.04 LTS 安装并设置 LXD
- 完整备份和恢复 LXD 容器
- 禁用 LXD 桥上的防火墙和 NAT 规则
- 使用 lxc 删除或移除 LXD 容器
- Linux 文件系统错误:事务失败解决方案
- Ubuntu 22.04 LTS 设置 LXD
- Debian 11 设置 LXD