Systemd-spawn
Systemd-spawn 可用于在轻量级容器中运行命令或操作系统。在许多方面,它与 chroot
相似,但功能更强大,因为它使用命名空间来完全虚拟化进程树,IPC,主机名,域名以及可选的网络和用户数据库。
Systemd-spawn 将容器中各种内核接口的访问限制为只读,像是 /sys
, /proc/sys
和 /sys/fs/selinux
。网络接口和系统时钟不能从容器内更改,不能创建设备节点。不能从容器中重启宿主机,也不能加载内核模块。
环境搭建
- 在主机中安装
systemd-container
- 创建Debian容器
- 引导容器
在主机中安装systemd-container
这里建议主机启用非特权用户空间,但部分人员仍然认为存在一些安全隐患,因此可以支持
-U
选项
创建Debian容器
可以使用 debootstrap
或 cdebootstrap
工具创建合适的 Debian 容器。
确保 root
用户可以登录到容器。
引导容器
创建容器后,可以使用实例化的 systemd.service
、machinectl
或 systemd-nspawn
命令引导容器。
这些指令必须使用 root
身份执行。启动后可使用 machinectl shell
进行登录。
常用操作
检查容器状态
若要检查容器的状态,请使用以下命令之一:
登录到容器
要登录到正在运行的容器,请执行以下操作:
停止容器
若要从主机停止正在运行的容器,请执行以下操作:
或者可以在容器内部进行终止:
或者还可以按三次 Ctrl + ]
进行终止。
网络
在主机、容器和其他系统之间创建或使用网络有很多选项。与任何网络一样,您需要配置一下内容:
- 网络接口
- IP地址
- 防火墙规则
- DNS域名
默认情况下,容器共享主机的网络。若使用了--private-networking
选项,则主机使用ve-<contrainer_name>@if<X>
形式的虚拟接口与容器通信,而容器则使用名为host@if<Y>
的虚拟接口:
使用主机网络
您可以通过在 /etc/systemd/nspawn/container-name.nspawn 中添加以下行来禁用专用网络并使容器使用主机网络:
将
container-name
替换为容器的名称。