FreeBSD可以在Docker中运行吗?

Phi*_*hil 11 freebsd docker

我一直在寻找FreeBSD的Docker镜像但找不到,FreeBSD可以在docker中运行吗?如果没有,为什么不呢?

cod*_*ger 7

技术上是的,但是你需要一个FreeBSD主机才能做到这一点,Docker现在在FreeBSD上"有点不稳定".Docker 1.7中有一个可以在技术上启动容器的分支,但你不想用于实际的任何东西.希望Jetpack最终能够在FreeBSD 11上完成,并将在这里提供更好的解决方案.

https://wiki.freebsd.org/Docker有信息.你可以使它在完全更新的10.3上运行,但是期望很多怪异.

  • 很多年前,似乎它可能是一件事,但FreeBSD和Jetpack上的Docker现在都被抛弃了. (6认同)
  • 因为您不能在Linux内核/ libc上运行FreeBSD二进制文件。Docker(以及Jails,Zone等)只是运行带有许多特殊标志的进程,但从本质上讲,它们实际上需要运行。 (3认同)
  • Docker FreeBSD端口不是“ *有些不稳定*”,它还没有完成。虚拟网络,资源限制,数量和链接不存在。此外,超过1.5年没有任何活动。该项目看起来已被放弃。 (3认同)
  • 绝对需要您拥有FreeBSD主机吗?为什么呢 (2认同)

Dwi*_*cer 3

这里有很多警告,但是是的,你可以,而且不,它不依赖于 FreeBSD(但 openbsd 可能无法工作)。

#!/bin/sh

wget https://download.freebsd.org/ftp/releases/ISO-IMAGES/13.2/FreeBSD-13.2-RELEASE-amd64-bootonly.iso

cat -> docker-compose.yml <<< EOL
---
version: "3"
services:
    freebsd-via-qemu:
        image: jkz0/qemu:latest
        cap_add:
            - NET_ADMIN
        devices:
            - /dev/net/tun
            - /dev/kvm
        volumes:
            - ./FreeBSD-13.2-RELEASE-amd64-bootonly.iso:/image
        restart: always
...
EOL
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

上面的 shell 脚本将下载 FreeBSD 的仅引导 iso,然后启动 QEMU 容器,该容器依次引导操作系统。我使用 Plan9、SimH、MVS、Freenas、AROS 和 VyOS 等其他系统执行此操作。是的,这也适用于 Podman、WSL 或 K8S。

现在需要注意的是,这显然不是在 Ring 0 中运行的虚拟机管理程序,而是在用户空间中运行并被监禁的 x86 模拟器。您不会从此设置中获得任何性能,并且可能会遇到设备驱动程序的一些问题,或者更糟糕的是,除了作为玩具/研究之外,完全无法用于任何其他用途。

更新:

放心我没有回答OP的第二个问题;为什么不呢。Docker 从根本上来说只是一个带有 RestAPI 守护进程的包装器,用于核心 Linux 内核技术,例如 cgroup、NetNS、vxlans、proc 命名空间、用户命名空间和 unionfs。例如,自 1991 年以来 Plan9 的大部分内容都是由狡猾的 Linux 内核开发人员重做的。

是的,BSD 有监狱,但那是作为 chroot 的用户空间,而不是像 Linux 这样的内核空间或像 Plan9 这样的 proc/stack 空间。[在过去 15 年左右的时间里,Open 或 FreeBSD 可能已经改变了]

基本上,Linux 内核空间的命名空间堆栈内的本机 bsd 内核或用户空间在没有模拟器或虚拟机管理程序的情况下无法执行。WSL(又名 hyper-v)和 xhyve(OSx 的虚拟机管理程序)上也存在同样的问题。这就是 QEMU 在上面的示例中起作用的原因。它是加载 BSD 内核并在容器的命名空间内运行的虚拟机管理程序。