创建debian容器
使用virt-manager 管理容器
流程概述:
- 通过debootstrap下载debian最小化根目录
- 修改容器root密码
- 通过virt-manager添加debian容器配置
- 配置容器的网络(和物理机类似)
以下操作均在root用户下进行。
debootstrap 下载最小化系统
实际安装发现最小化系统并未包含以下软件包,需要包含进去
- locales 语言包
- dbus d-bus总线服务,systemd相关的前端工具(networkctl)通过dbus与服务端通讯,dbus服务异常会导致异常
- openssh-server 可选,ssh服务端
创建容器根分区目录 /mnt/lxc/debian-bookworm
。
mkdir -p /mnt/lxc/debian-bookworm
从opentuna源拉取debian12(开发代号:bookworm)基础软件包,包含dbus,locales软件包。
debootstrap --include=dbus,locales debookworm debian-bookworm https://opentuna.cn/debian
修改容器root密码
chroot到容器根分区目录 /mnt/lxc/debian-bookworm
chroot /mnt/lxc/debian-bookworm
在chroot下修改root用户密码
passwd root
通过virt-manager添加debian容器
如果没有安装virt-manager,他是个图形软件,先安装
apt install virt-manager
他是一个python实现的软件,作为libvirt的GUI前端。
libvirt支持管理虚拟kvm虚拟机或者lxc容器等。
1.创建lxc连接(连上libvirt后端)
文件 > 添加连接
弹窗配置“虚拟机管理程序”选择“Libvirt-LXC”,保存完成新增一个连接。
2.右键选择已经添加的“LXC”连接,“新建”,调出创建容器的引导页。
3.引导页面需要选择libvirt哪个类型的连接,创建容器选择lxc的,选择“操作系统容器”
4.填写容器根分区路径,例如 /mnt/lxc/debian-bookworm
5.设置cpu和内存的限制,根据实际情况设置。
6.选择一个网络,如果没有网络,则需要创建。勾选“在安装前自定义配置”,做最后的调整,此时并未执行容器。
7.开始安装容器。
配置容器网络
可以启动容器后,在容器内设置网络。
容器的网络结构有:
none 不使用网络,容器内没有网络
host 网络不隔离,但是由宿主管理网络的,容器不要去管理网络
bridge 桥接,通过将一个虚拟网卡一端放在隔离的网络空间,另外一端挂在一个bridge的一个端口上。
宿主 |容器
bridge <==> veth <= | => eth0
|
bridge 由 libvirtd管理,根据实际情况,配置成nat上网,配置DHCP服务,让容器能通过dhcp获取ip配置。
macvtap 接口虚拟出一个网卡给容器使用,他们是不能直接互通。
宿主 |容器
物理网卡 |
\============|========> eth0
|
只讨论 macvtap 和 bridge 的情况,这种情况下,网卡的ip可以由容器内的网络管理服务接管。
常见可选的网管服务有:
- ifupdown
- network-manager
- systemd-networkd systemd组件的一部分,默认就能用。
debian默认使用systemd作为init,不需要额外安装网管软件就可使用,其他两个可以在debootstrap阶段把对应的包也安装进去。
网管软件只需要选一个。
先用 ip link
查看、确定网卡名称。
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
52: eth0@if53: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 00:16:3e:ef:72:18 brd ff:ff:ff:ff:ff:ff link-netnsid 0
一般情况下是eth0。网络配置可以通过网卡名来匹配
创建一个 .network
配置
nano /etc/systemd/network/eth0.network
network配置是ini风格的配置文件,这个配置分成两部分,[Match]
匹配特定的网卡,[Network]
节则针对匹配到的网卡配置。
[Match]
Name=eth0
[Network]
DHCP=yes
使用DHCP获取ip,如果使用静态,则需要设定ip地址(Address)、网关(Gateway)、DNS
[Match]
Name=eth0
[Network]
Address=192.168.1.3/24
Gateway=192.168.1.1
DNS=223.5.5.5
ctrl+o
保存文件
ctrl+x
退出 nano
需要让容器启动时启动 systemd-networkd
服务,这个和物理机配置服务一样的
systemctl enable --now systemd-networkd
使用 networkctl
可以重载 .network 配置,或者重启接口
网络配置成功后,容器基本可用
使用virsh 关闭容器
如果使用virsh命令关闭容器,使用initctl,让systemd执行关机流程,然后关闭容器
virsh -c lxc:///system shutdown --mode initctl 容器名称