GNU/Linux systemd-nspawn 容器用法详解
GNU/Linux systemd-nspawn 容器用法详解
什么是 systemd-nspawn?
systemd-nspawn 是一种由 systemd 管理的容器技术,它提供了一种轻量级的虚拟化方法,允许用户创建隔离的运行环境。
能做什么?
- 提供完全的隔离环境:与宿主机共享内核,但拥有独立的进程、用户、网络和文件命名空间。
- 隔离级别可定制:用户可以根据需求调整隔离级别。
- 支持绑定挂载和 overlay 挂载:允许更灵活的文件系统管理。
- 性能表现优异:与 Docker 相比,性能相近。
使用场景
- 运行隔离环境:可以替代大多数 Docker 使用场景。
- 运行无头桌面:适合需要完整桌面环境的隔离应用。
不能做什么?
- 非 root 身份运行限制:如果容器以非 root 身份运行,则无法运行 flatpak 应用,因为缺乏对命名空间的操作权限。以 root 方式启动容器的效果未经验证。
安装
在基于 Debian 的系统上,可以通过以下命令安装 systemd-container 包:
apt-get install systemd-container配置
内核变量
需要确保以下内核变量被设置,以便容器能够正常工作:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1防火墙
防火墙配置仅在容器连接到虚拟网桥的情况下需要定制。如果容器直接使用宿主机的网络(完全访问权限),则不需要特别配置。
虚拟网桥
本文不涉及虚拟网桥的配置,容器将直接使用宿主机的网络。
创建容器
容器配置文件
创建 /etc/systemd/nspawn/container-test.nspawn 文件,用于持久化容器配置。将 container-test 替换为你的容器名:
[Exec]
PrivateUsers=pick
Timezone=bind
# ResolvConf=off
ResolvConf=bind-host
[Files]
PrivateUsersOwnership=auto
# 绑定挂载示例
# BindReadOnly=/default/etc/resolv.conf:/etc/resolv.conf
# Bind=/path/to/postgres:/var/lib/postgresql:owneridmap
[Network]
Private=no创建容器根目录
使用 debootstrap 命令创建容器根目录,位于 /var/lib/machines 目录下。这里以 container-test 为例:
cd /var/lib/machines
debootstrap --include=apt-transport-https,ca-certificates,dbus,libpam-systemd,systemd --arch=amd64 stable container-test https://mirrors.tuna.tsinghua.edu.cn/debian/启动容器
使用 machinectl 命令启动容器,并获取 root shell:
sudo machinectl start container-test
sudo machinectl shell container-test友情链接
以上就是 systemd-nspawn 容器的使用方法,希望对您有所帮助。
评论已关闭