在FreeBSD上运行Container容器
Linux容器
如果能够通过 Linux emulation 运行
runj来实现在 FreeBSD Jail 中运行Docker容器以及网络,那么就有可能直接运行 kind(本地docker模拟k8s集群) ,而不需要 bhyve(BSD hypervisor) 来虚拟化(可以降低主机资源消耗)实在不行还是可以通过运行一个 bhyve(BSD hypervisor) 虚拟机来运行 kind(本地docker模拟k8s集群) ,虽然比较挫,但是 kind(本地docker模拟k8s集群) 也是通过这种方式运行在 macOS 上的
可以找到通过 bhyve(BSD hypervisor) 运行多个虚拟机来部署 Kubernetes 的案例:
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 包:
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 以及包管理器