在FreeBSD上运行Container容器

备注

可以在 macOS 上通过 Lima: Linux Machines 来运行FreeBSD虚拟机

但是在FreeBSD上可能更自由,所以有了本文的实践

Linux容器

FreeBSD原生容器

之所以无法在FreeBSD上直接运行 Docker 是因为Docker使用的一些技术如 Kernel Cgroup 和 kernel namespaces 都没有在FreeBSD内核中实现,并且 Linuxulator 兼容层并没有在 FreeBSD Jail 环境提供这些底层功能。

但是在FreeBSD系统中,也有一些原生技术提供了相似的功能,并且也有非常接近于Docker的 podman 被移植到FreeBSD架构:

  • 在FreeBSD环境中,Podman使用了一种称为 ocijail 的FreeBSD原生运行时来管理容器,底层使用的是FreeBSD Host主机的 FreeBSD Jail 架构

  • 通过简单的 pkg install sysutils/podman-suite 就可以轻易地完成部署

  • 移植到FreeBSD架构的 Podman 使用了FreeBSD ZFS snapshots 来有效管理存储

此外 FreeBSD AppJail 也提供了类似 Docker 的使用体验,通过提供OCI接口实现了镜像化,也值得尝试

OCI Containers on FreeBSD

FreeBSD从 14.2-RELEASE 开始,提供了OCI兼容镜像, FreeBSD podman 可以直接使用该镜像,包括amd64系统和arm64系统,能够实现标准的容器化运行。在每个RELEASE下载中都提供了 FreeBSD OCI-IMAGES 下载,并且分别提供3种 base.txz 包:

每个RELEASE提供了3种OCI镜像
FreeBSD-14.3-RELEASE-amd64-container-image-dynamic.txz
FreeBSD-14.3-RELEASE-amd64-container-image-runtime.txz
FreeBSD-14.3-RELEASE-amd64-container-image-static.txz
  • static 镜像是最小化工作系统,如果你使用静态编译的二进制程序,则只能运行使用static镜像

    • 只有最基础系统

    • TLS证书

    • 最小化termcap

    • tzdata文件

    • 只能够运行静态编译二进制程序

  • dynamic 镜像是在 static 镜像作为父级层,然后添加了足够运行共享库和libc的执行程序

    • 能够运行大多数二进制程序和工具

    • 但是不包括shell,也没有包管理器(意味着适合作为容器来运行服务程序,但不适合日常使用)

  • minimal 镜像则在 dynamic 层上添加了普通用户所需要的 UNIX shell 以及包管理器

参考