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 容器的使用方法,希望对您有所帮助。

标签: none

评论已关闭