在Linux系统上安装和使用LXC/LXD运行Linux容器
本文介绍在Linux系统上安装和使用LXC/LXD运行Linux容器的详细步骤,将以Rocky Linux 8/AlmaLinux 8发行版为例说明。
详细操作方法
步骤1、准备Rocky Linux 8、AlmaLinux 8系统
我们将确保将可用软件包更新为最新可用版本,如下所示:
sudo dnf update
安装安装所需的软件包:
sudo dnf -y install vim curl
按如下方式设置SELinux许可模式:
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
步骤2、在Rocky Linux 8、AlmaLinux 8上添加EPEL存储库
我们需要将EPEL存储库添加到我们的系统中,以便能够在Rocky Linux 8、AlmaLinux 8上安装所需的软件包。
添加EPEL存储库,如下所示:
sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf makecache
步骤3、安装Snap
由于LXD在Snap上可用,我们需要在Rocky Linux 8/AlmaLinux 8系统上安装并启用snapd服务。
安装Snap并安装LXD
使用以下命令在Rocky Linux 8、AlmaLinux 8上安装snap:
sudo dnf -y install snapd
启动并启用snap:
sudo systemctl enable --now snapd.socket
通过创建以下符号链接启用snap支持:
sudo ln -s /var/lib/snapd/snap /snap
步骤4、配置Rocky Linux 8、AlmaLinux 8内核
LXD需要一些内核配置。使用以下命令对内核进行这些配置:
首先切换到根用户:
sudo su -
使用Grubby进行以下配置:
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
grubby --args="namespace.unpriv_enable=1" --update-kernel="$(grubby --default-kernel)"
echo "user.max_user_namespaces=3883" | sudo tee -a /etc/sysctl.d/99-userns.conf
要应用上述内核配置,我们需要重新启动系统:
sudo reboot -i
步骤5、在Rocky Linux 8/AlmaLinux 8上安装LXC/LXD
我们将使用以下命令在系统上安装LXD作为snap包:
sudo snap install lxd
样本输出:
Setup snap "snapd" (14295) security profiles
INFO Waiting for automatic snapd restart...
lxd 4.21 from Canonical installed
为了能够在不使用sudo的情况下运行LXD命令,我们需要将系统用户添加到LXD组,这可以通过运行以下命令来实现:
sudo usermod -aG lxd $USER
newgrp lxd
步骤6、配置LXD
安装LXD完成,然后需要配置LXD,可按以下方法操作。
现在,我们将通过如下所示的设置来配置LXD环境。
首先,初始化LXD:
lxd init
现在继续进行存储池配置。在这里,您可以在LVM和默认brtfs之间进行选择:
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm, ceph) [default=btrfs]: lvm
设置磁盘空间并继续进行更多配置:
Create a new LVM pool? (yes/no) [default=yes]:
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=7GB]: 5GB
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like the LXD server to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
现在允许lxdbr0网桥通过防火墙:
sudo firewall-cmd --add-interface=lxdbr0 --zone=trusted --permanent
sudo firewall-cmd --reload
步骤7、使用LXC/LXD创建和管理Linux容器
完成上述配置后,我们将使用lxc命令启动和管理Linux容器。
1、创建Linux容器
要创建容器,请使用以下语法:
lxc launch images:[distro]/[version]/[architecture] [your-container-name]
在命令中,替换:
distro是Linux发行版,比如CentOS、RedHat。
version是分发的版本。
Architecture是具有CPU架构的架构,比如amd4、i386、ppc64el。
your-container-name是要创建的容器所需的名称。
例如,要创建Ubuntu 20.04(focal) amd64容器,我将执行以下命令:
$ lxc launch images:ubuntu/20.04/amd64 Ubuntu20
Creating Ubuntu20
Starting Ubuntu20
2、列出可用的容器
可以运行多个容器,一旦创建,可以使用以下命令列出它们:
$ lxc list
样本输出:
3、停止、启动和删除LXC容器
创建容器后,您可以在需要时通过启动、停止和删除容器来管理它们。
可以使用以下命令实现这些操作:
lxc start container-name
lxc stop container-name
lxc restart container-name
lxc delete container-name
例如,创建的Ubuntu20容器可以停止,如下所示:
lxc stop Ubuntu20
现在查看容器的状态:
4、查看容器信息
容器的信息如下所示:
lxc info container-name
例如,关于Ubuntu20容器的信息,如下所示:
$ lxc info Ubuntu20
Name: Ubuntu20
Status: RUNNING
Type: container
Architecture: x86_64
Resources:
Processes: 14
Disk usage:
root: 538.77MiB
CPU usage:
CPU usage (in seconds): 0
Memory usage:
Memory (current): 101.87MiB
Memory (peak): 104.12MiB
Network usage:
lo:
Type: loopback
State: UP
MTU: 65536
Bytes received: 0B
Bytes sent: 0B
Packets received: 0
Packets sent: 0
IP addresses:
inet: 127.0.0.1/8 (local)
inet6: ::1/128 (local)
eth0:
Type: broadcast
5、在容器中执行临时命令
与docker类似,您也可以在LXD容器内执行命令。使用的语法如下:
lxc exec container-name <command>
例如,要在Ubuntu20容器上安装Apache,我们将执行:
lxc exec Ubuntu20 -- apt -y install apache2
6、访问容器bash
要执行命令,还可以访问容器的bash,如下所示:
lxc exec Ubuntu20 -- /bin/bash
一旦进入shell,就可以执行所需的命令:
步骤8、使用LXD GUI管理LXC容器
对于那些不熟悉命令行的人,您还可以使用LXD GUI来管理LXC容器。
从Snap安装lxdmosaic,如下所示:
$ sudo snap install lxdmosaic
lxdmosaic 0+git.2124524 from Daniel Hope (turtle0x1) installed
分配并允许所需的端口通过防火墙:
sudo snap set lxdmosaic ports.http=81 ports.https=444
sudo firewall-cmd --zone=public --add-port=81/tcp --permanent
sudo firewall-cmd --zone=public --add-port=444/tcp --permanent
sudo firewall-cmd --reload
通过设置访问网页的首选密码来配置LXD GUI:
lxc config set core.https_address [::]
lxc config set core.trust_password your-password
在上述命令中,用您的首选密码替换your-password,比如:
lxc config set core.https_address [::]
lxc config set core.trust_password hmxthome
重新启动系统上的管理单元:
sudo systemctl restart snapd
步骤9、访问LXD Web UI
使用URL地址格式为https://IP_address:444的在Chrome或任何其他功能强大的浏览器上访问LXD Web UI。需要填写所需的详细信息:
输入上面设置的LXD服务器IP地址和密码。此外,为LXD Mosaic创建一个管理员用户。填写完所有细节后,启动LXD Mosaic,如下所示:
现在使用创建的管理员用户凭据登录就可以实现使用LXD GUI来管理容器了:
至此,通过以上操作步骤,已经能够在Linux系统上使用LXC/LXD创建和管理Linux容器了。