三 文章首页 实时留言 网络邻居 开往 虫洞
返回

容器镜像即操作系统,对 bootc 的体验记录

可引导的容器镜像
2026-10-07 18:29:17
分类: Linux

在体验一段时间的 fedora 不可变原子操作系统接触到了一个叫 bootc 的技术,它基于 ostree,允许通过 OCI 标准的 Containerfile(Dockerfile) 来构建一个可引导启动的容器镜像。可实现叠层更新的同时,也可切换任意一份构建好的容器镜像来作为操作系统基座,同时原子更新和回滚机制也有,可实现类似 rpm-ostree rollback 和 update 的功能,是一套演进和替代方案。

快速使用


目前 bootc 相对比较适合用于红帽系发行版,像 fedora、rhl、centos 都有不错的适配,其他发行版系不太了解,也许理论上也行但看社区适配程度如何。这里像 fedora 的话可以直接通过软件源来直装 bootc

sudo dnf install bootc

构建/运行容器镜像


通过一个标准的 Containerfile 来定义整个操作系统,包括基础镜像、软件包、配置等。过程和构建应用容器镜像完全一样,可以使用 Podman、Docker 或 CI/CD 管道完成,具体的 dockerfile 或 Containerfile 请移步相关的容器教程。

这是一个简单的 Containerfile 文件:

# 拿到某个发行版的基础镜像
FROM quay.io/fedora/fedora-bootc:44

# 安装一些软件包..可看自己的需要来
RUN dnf -y install btop fastfetch

# 创建一个 tester 用户和家目录,设置了密码为 tester123
RUN useradd -m -G wheel -c "Test" tester \
 && echo 'tester:tester123' | chpasswd

最后使用以下命令来构建镜像:

sudo podman build -t test-bootc:latest -f <容器文件路径>  <容器文件所在的目录>

构建完成后,我们可以在 sudo podman images 找到我们构建好的镜像

接下来可以使用 bootc 命令将基础系统切换到某个本地容器镜像,输入:

sudo bootc switch --transport containers-storage  localhost/test-bootc

这样会切换成 test-bootc 这个镜像,完成后再重启系统即可。

切换完成后,系统会保留现有的 /etc 和 /var 状态(包括用户主目录),确保配置的连续性。

后续如果基于这个 test-bootc 镜像做系统更新,也只需要再构建一次 test-bootc 然后 sudo bootc update

容器镜像用于虚拟机


如果需要将容器镜像运行在 qemu/kvm 虚拟机,可使用 bcvk 来导出 qcow2 格式,可通过源来安装:

sudo dnf install bcvk

使用 bcvk 命令来将镜像输出为 qcow2 格式文件

sudo bcvk to-disk \
--format=qcow2 \
--disk-size 20G \
--filesystem ext4 \
localhost/test-bootc:latest \
output-disk.qcow2

qemu 运行 qcow2 方式

sudo qemu-system-x86_64 \
  --enable-kvm \
  -cpu host \
  -smp 2 \
  -m 4096 \
  -drive file=/path/to/output-disk.qcow2,if=virtio,format=qcow2 \
  -net nic -net user,hostfwd=tcp::2222-:22