2020 年 6 月,我们发表了一篇关于运行 Docker 和 Fedora 32. 我们描述了运行 Docker 所需的各种解决方法,并解释了当时令人烦恼的情况。 但是 Docker 已经进化了,是时候回到我们之前的教程了。 因此,今天我们将讨论在 Fedora Linux 35.
借助本指南,您应该能够轻松地重新创建现有的开发环境,而无需重新调整整个管道。 我们将专注于获取正确的包,测试一些重要的场景,并帮助您使用工具。
还要向 Mehdi Haghgoo 大喊一声,他之前发表了一篇关于使用 Podman 作为 docker-compose 基础的文章,以及一篇关于使用 Podman 的精彩文章。
At the time of writing, Fedora 35 is just on the horizon, but not out yet. This guide is fully compatible with Fedora 34, and has been checked on both versions before publication.
安装
让我们首先说明 Docker 的两个最大问题 Fedora 32 不再相关。 Docker 现在支持 CGroups v2 和 NFTables,这使得第二个指南大大缩短。 安装 Docker 有两种方式 Fedora Linux,两者都提供相同的最终结果,但提供不同的好处。
Fedora的方式
Docker 的前景有很多需要解开。 Docker 引擎是 FLOSS,它也可以作为一个包直接从 Fedora的存储库。 这个包叫做 白鲸,作为 Docker 吉祥物的参考。 要安装和启用该版本,您可以使用以下命令:
$ sudo dnf install moby-engine docker-compose
$ sudo systemctl enable docker
这将为您提供所需的所有工具,并确保 Docker 服务在您启动计算机时启动。
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
Docker 是一个系统范围的服务,它本身具有 root 权限,并且还需要 root 权限才能与之交互。 对于开发人员来说,将自己添加到 ‘docker’ 组通常风险不大,因此您不必键入 ‘sudo’ 每当与 Docker 交互时。
$ sudo systemctl reboot
通过重新启动计算机完成简短安装。
好处
Moby Engine 版本没有任何可能的许可限制。 现在或将来都不需要任何费用或订阅。 还有一个系统集成的好处:Moby Engine 的包维护者可以确保该包与所有其他包具有相同的高标准 Fedora. 最后但同样重要的是,Moby 也可用于 Fedora的 beta 版本和 Fedora 生皮。
码头工人的方式
Docker Inc. 为 Docker 引擎提供官方 RPM 存储库,包括安装说明。 请确保您当时只安装一个版本。
https://docs.docker.com/engine/install/fedora/
Docker Inc. normally releases support for the next version of Fedora Linux, a few weeks after the official release. If you're following this guide using a Fedora Beta, you'll have to stick with Moby.
好处
使用官方包有一些好处,因为它们可以为您提供直接的商业支持和认证。 它还允许您运行 Docker 的开发或测试分支。 最后但并非最不重要的一点是,它带有某些依赖项的旧版本,这在一些非常奇特的情况下可能很有趣。
升级
很有可能,您从那时起就一直在运行 Docker Fedora 32. 在这种情况下,您必须删除以前需要的变通方法。
$ sudo grubby --update-kernel=ALL --remove-args="systemd.unified_cgroup_hierarchy=0"
Docker 需要此解决方法,因为 Docker 不支持 CGroups V2,但该问题已在 Docker 20.10 中得到解决。 否则运行此命令不会产生不良影响。
$ sudo firewall-cmd --permanent --zone=trusted --remove-interface=docker0 $ sudo firewall-cmd --permanent --zone=FedoraWorkstation --remove-masquerade
这将删除 NFTables 所需的不必要的防火墙配置。 Docker 开启 Fedora 35 应该有它自己的区域,并且在现有设置上运行这些命令应该没有不良影响。
用法
是时候弄脏我们的手了。 我们将进行一些测试以了解容器的强大功能,并了解整个系统的运行情况。
你好世界
您应该有一个正在运行的 docker.service,它可以为您创建和启动图像。 通过执行以下操作对此进行测试。
$ docker run hello-world
现在 Docker 向您致意,是时候继续前进并尝试更高级的东西了。 不要忘记,如果您不确定某事,您可以随时查看数量惊人的 Docker 官方文档.
用生皮测试
对于下一个快速演示,我们将制作自己的“hello world” example,您可以在其中自由玩耍。 首先,让我们创建一个文件夹来工作。
$ mkdir docker-tests $ cd docker-tests
然后,制作这个演示所需的两个文件。
./docker-tests/ ├── dockerfile └── hello-rawhide.sh
./docker-tests/dockerfile
FROM fedora:rawhide COPY ./hello-rawhide.sh ./ RUN chmod +x ./hello-rawhide.sh ENTRYPOINT ["./hello-rawhide.sh"]
./docker-tests/hello-rawhide.sh
#!/usr/bin/env bash echo 'Talking to you from Fedora Rawhide' cat /etc/os-release
完成这些准备工作后,使用以下命令构建并运行您自己的映像。 -t 参数为您的图像提供了一个方便使用的名称。 如果出现问题,请确保测试文件不在您的主目录中并检查拼写。 此外,请检查您的终端是否位于正确的文件夹中。
[docker-tests]$ docker build -t rawhide-hello . [docker-tests]$ docker run rawhide-hello
这应该为您提供有关您刚刚构建的容器的一些基本信息。 查看 ‘VARIANT’ 值,看看您是否已成功构建容器映像。
编写项目
通常需要一次启动多个容器。 这可以帮助您进行软件开发,或者它可以创建一个包含所有依赖项的整个应用程序。 让我们使用 docker-compose 的教程来说明使用 WordPress 的这个过程。
$ curl -o docker-compose.yaml https://raw.githubusercontent.com/docker/awesome-compose/master/wordpress-mysql/docker-compose.yaml $ docker-compose -f ./docker-compose.yaml up
如果您现在在以下位置打开浏览器 https://localhost:80,您将能够享受自己的 WordPress。 docker-compose 文件告诉你如何组合多个 docker 镜像,以及所有东西应该如何联网和存储。 强大的东西。
如果您保持终端窗口打开,您可以看到系统日志。 为了 example,您可以看到来自的日志条目 Apache 告诉他们在本地主机上提供了一个页面。 有关更多示例,您应该查看 awesome-docker 文档项目. 要关闭演示,您必须做两件事:
ctrl-c to abort the current terminal process $ docker-compose -f ./docker-compose.yaml down
获取用户界面
如果您有在 Mac OS 或 Windows 上使用 Docker 的经验,您可能会习惯使用 Docker Desktop。 Docker Desktop 是一个专有应用程序,它为您管理虚拟机,然后允许您在非 Linux 平台上使用 moby 引擎。 由于 Linux 上不需要这样的 VM,因此没有专有的 GUI 应用程序。 有一些工具可用于管理 Linux 上的 moby 引擎,包括商业的、免费的和 FLOSS,但没有通用的解决方案。
懒惰的码头工人
Lazy Docker 是一个轻量级但功能强大的 Docker 容器管理工具。 在我们社区成员 Atim 的慷慨帮助下,可以使用 Copr 轻松安装和更新 Lazy Docker。
$ sudo dnf copr enable atim/lazydocker
$ sudo dnf install lazydocker

有关 Lazy Docker 的更多信息和指南,我建议您查看他们的 文档和项目页面. 另外不要忘记,由于 Lazy Docker 是一个终端 UI 应用程序,您还可以在只能通过 SSH 连接访问的机器上使用它。
编辑器插件
查看容器内部结构的另一种流行方法是使用 Docker 插件 VS 代码 或者 VS 钠. 虽然肯定会有一些额外的花里胡哨的空间,但这个 UI 应该可以帮助您理解图像、容器和卷之间的关系。
At the time of writing, VS Code and Codium are not yet compatible with Fedora 35 Beta.

概括
Linux 容器化是一项伟大的技术,它封装了现代软件开发的一些最佳方面。 它允许您同时在 Linux、Mac 和 Windows 上构建和控制整个软件堆栈,从开发一直到生产。
作为一个 Fedora 使用,你可以选择Moby,你甚至会得到一些额外的好处:
- 与 Docker 完全兼容
- 没有隐藏的条款和条件
- 直接集成和更新 Fedora Linux
- 为任何未来的 Beta 和/或 Rawhide 频道做好准备