# FreeBSD OCI 容器简介

* 原文 [An introduction to OCI Containers on FreeBSD](https://freebsdfoundation.org/blog/oci-containers-on-freebsd/)
* 发布日期：2025 年 10 月 31 日

《在 FreeBSD 上运行 Linux 容器！》<https://www.youtube.com/watch?v=HV-wUUzRCMo>

我想你在过去十年里大概没有与世隔绝，所以我就不解释什么是 [容器](https://en.wikipedia.org/wiki/Containerization_%28computing%29) 了。不过我会提到什么是开放容器倡议（Open Container Initiative，简称 OCI），因为 FreeBSD 刚刚成为了它的一部分。引用 [他们自己网站](https://opencontainers.org/) 上的话：

> “开放容器倡议（OCI）是一款轻量级、开放治理结构，其明确目的是围绕容器格式和运行时创建开放的行业标准。”

很好。为了在这个框架内工作，我们需要一款工具。登场的是 Podman：

> “Podman 是一款功能齐全的容器引擎，是一款简单的无守护进程工具。Podman 提供了与 Docker CLI 可比的命令行，使从其他容器引擎的迁移变得容易，并可管理 pod、容器和镜像。”

规则已经设定。让我们看看 Podman 所谓的“简单”，是否真的名副其实。

## 安装与设置

我这里从全新的 FreeBSD 15.0-BETA3 安装开始，但我也在 CURRENT、STABLE、14.3-RELEASE 上进行了测试，结果完全一致。让我们安装所需包：

```sh
# pkg install -y podman-suite
```

Podman 默认会把容器存储在 `/var/db/containers`，所以你可能想为它创建专用的 ZFS 文件系统：

```sh
# zfs create -o mountpoint=/var/db/containers zroot/containers
```

如果我们希望访问运行在容器中的任何服务，就需要使用 pf 防火墙。podman 有个示例配置文件，让事情变得简单：

```sh
# cp /usr/local/etc/containers/pf.conf.sample /etc/pf.conf
# sysctl net.pf.filter_local=1
```

**别忘了在启用并启动 pf 服务之前，更新复制文件中的接口变量。** 当然，如果你已经在运行 pf，并且已经有配置文件，请不要直接覆盖。只需从示例文件中取出相关部分，添加到现有配置中即可。

```sh
# service pf enable
# service pf start
```

如果我们想使用任何基于 Linux 的容器，还需要启用 Linux 服务：

```sh
# service linux enable
# service linux start
```

准备就绪。我们来试试 FreeBSD 容器（这里我们是普通用户，所以需要使用权限提升，因为目前 podman 需要 root——我个人偏好使用 doas；它小巧而简单）：

```sh
$ doas podman run ghcr.io/freebsd/freebsd-runtime:14.3 freebsd-version
14.3-RELEASE
```

非常简单！我们再测试一个 Linux 容器：

```sh
$ doas podman run --rm --os=linux docker.io/alpine cat /etc/os-release | head -1
NAME="Alpine Linux"
```

同样非常简单。

你可以在 [GitHub](https://github.com/orgs/freebsd/packages) 和 [Docker Hub](https://hub.docker.com/u/freebsd) 上找到 FreeBSD OCI 镜像。不过我们可以想象，许多人更希望使用 Linux 镜像。

## 测试一些有用的东西

我很早前就听说过 Caddy，当时是在与一家基于 FreeBSD 的公司讨论大型多人在线游戏服务时（那是另一个有趣的故事，以后再说）。简单了解后我发现，它可能是一个在容器中安全地提供网站服务的极其简单的方法。于是我用 Hugo 生成的静态网站进行了测试——仅仅是提供 `public` 文件夹。

```sh
$ doas podman run --os=linux -p 80:80 -v $PWD/website:/usr/share/caddy -v caddy_data:/data docker.io/caddy
```

![](https://freebsdfoundation.org/wp-content/uploads/2025/10/running-caddy-1024x721.png)

哇，太简单了！

## 我能得到什么？

除了让现有的 FreeBSD 用户能使用容器之外，Podman 还将把一大批新用户带到 FreeBSD 世界。我们已经看到，越来越多的新用户访问 [YouTube 频道](https://youtube.com/@freebsdproject) 和 [Subreddit](https://reddit.com/r/freebsd)，希望在 FreeBSD 以简洁和可靠著称的基础上构建他们的数字世界。ZFS 万岁 💪

因此，我决定尝试一个有点奇特的挑战。很多年前，我在 Docker Hub 上发布过一个容器：以 CentOS 为基础的 Python Pandas。那我能否在我崭新的 OCI FreeBSD 服务器上运行它？

```sh
doas podman run -it --os=linux docker.io/phips/pandas:v3 /bin/bash
```

![](https://freebsdfoundation.org/wp-content/uploads/2025/10/running-old-pandas-1024x721.png)

可以！太棒了！这意味着可以将旧的工作负载迁移到新平台上。

### 快速又简单

就是这样。在 FreeBSD 上启动并运行容器既简单又快捷。同时，它也非常容易使用旧的容器——为将底层平台迁移到一个精心设计、坚如磐石的操作系统提供了路径。

FreeBSD 手册很快将更新，加入 OCI 容器的正式文档，但与此同时，你可以查看核心成员 Dave Cottlehuber 的[工作文档](https://docs.skunkwerks.at/s/fUiAmi4pE)。

我们会定期发布新的技术主题文章和视频，因此请务必订阅 [YouTube 频道](https://youtube.com/@freebsdproject)，并在你喜欢的 RSS 阅读器中关注[此订阅源](https://freebsdfoundation.org/our-work/latest-updates/)。如果你希望通过电子邮件接收更新，也可以订阅[我们的通讯](https://mailchi.mp/freebsdfoundation.org/newsletter-sign-up)。

我们也希望这个内容系列是互动的——你希望我们讨论什么？有哪些 FreeBSD 问题可以帮你解决？请[联系我们](https://freebsdfoundation.org/about-us/contact-us/)，告诉我们你的想法。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://translated-articles.bsdcn.org/2025-nian/oci-containers-on-freebsd.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
