在前几期中(Fedora 32, Fedora 35),人们非常关注让 Docker 在 Fedora Linux。 本文将重点关注这一漫长旅程的最后阶段。 它将专注于将跨平台生产设置从 Docker 迁移到 Podman。
背景
Docker 和 Podman 使用相同的 容器开放标准. 除了这个容器标准之外,还有多种将容器组织在一起的方法。 Docker-Compose 和 Kubernetes 是这方面的两种主要技术,尽管像 Ansible 这样的工具也很受欢迎。
但在业务方面,存在很大差异。 Docker 与一个名为 Docker Desktop 的非自由应用程序一起分发,而 Podman 历史上从未有过 UI。 Docker 于 2013 年开始上线,2016 年崛起。Podman 于 2018 年开始,最近两年才开始流行起来。
Podman 当然不是第一个出现的,它一直在打一场硬仗。 尽管如此,在许多方面,这仍然是一个机会。 Podman 可以避免 Docker 犯的一些架构错误,并且它可以与 Docker 起步时还不存在的其他工具集成。
个人背景
之前关于Docker的文章和 Fedora 都是基于作者的职业生涯。 在我工作的公司,当我入职时,我们严重依赖 Docker。 这意味着我需要 Docker,并且我开始记录我的挣扎,最终导致了第一篇文章。 第二篇文章是后续文章,旨在告知读者过去的大多数障碍已不再是问题。
Podman桌面
整个故事中的游戏规则改变者是 Podman 桌面. 它是一个跨平台的 UI,允许 Linux、macOS 和 Windows 上的团队进行协作。 它的工作方式与 Docker Desktop 相同,包括捆绑的 VM 和 WSL 支持。 这也意味着 Podman 现在为软件公司提供了完整的软件包。 虽然 Linux 上的软件开发人员过去可以使用 Podman,但现在可以跨环境迁移整个团队!
迁移 Docker
那么,让我们开始从 Docker 迁移到 Podman。 首先,您需要确保已安装 podman 和 podman-compose。 您可以轻松下载 来自 Flathub 的 Podman 桌面.
图片文件
图像文件本身就很好! 由于容器背后的开放标准,它们是相同的。
您现在会看到的一件事是,有大量公司和团体提供他们自己的图像存储库。
- hub.docker.com (别名,docker.io)是 Docker 的产品,他们的工具方便地默认为它。
- 注册表.gitlab.com 是 GitLab 商业产品的注册表。 社区版本遵循相同的语法,导致 example: 注册表.gitlab.gnome.org
- 注册表.fedoraproject.org 是 Fedora的注册表。 这个注册表也用于来自 Fedora 存储库。
- 码头.io 是 Red Hat 的产品,其中包含 Podman 的所有工具,还有 CentOS 映像。
从 Docker 切换到 Podman 时,您必须适应的最大变化是,我们鼓励您编写完整的图像地址,而不仅仅是存根:`postgres:14-alpine` 变成了 `docker.io/library /postgres:14-alpine`。
Docker-Compose 文件
Compose 文件是特定于 Docker 的,它们不能与 Podman 一起使用。 不过,您可以使用的是 podman-compose。 更好的是,您可以启动基于 docker 的平台,然后使用 Podman Desktop 将当前配置导出到 Kubernetes 文件。
$ podman-compose -f ./docker-compose-platform.yaml up --detach
使用旧的 docker-compose .yaml 文件启动 podman-compose 后,您会看到许多容器在一个“compose”组中运行。 这就是将事物转化为 Podman 世界的方式。 从这里,您可以选择容器并创建 Pod。 Pod 是在自己的网络中运行的容器的集合。
检查 Pod 后,您将拥有一个代表此容器集合的 Kube 文件。 Save 它在某处并给它另一个关键的外观。 您可以在不影响系统功能的情况下删除一些内容。 毕竟,自动生成的文档会有一些伪影。
演示中的所有三个文件都可以在这里看到:
而已。 您现在已经从 Docker 迁移到 Podman。 要使用 Kubernetes 文件启动 Podman,只需执行以下操作:
$ podman play kube podman-kube-platform-cleanup.yaml --replace
亚搏体育应用程序 CI/CD
GitLab 拥有大量开源和商业产品,可让您自动部署和测试您的系统。 过去,在 GitLab 中使用 Docker 的人不得不求助于 Docker-in-Docker 解决方案。 这让很多工程师很头疼。 从 Docker 迁移到 Podman 将解决该问题。
为了 example,您可以使用 Podman 的官方镜像轻松构建您自己的产品镜像:
runner-setup: image: quay.io/podman/stable:latest stage: setup script: - podman login registry.gitlab.com -u ${COMPANY_CI_USERNAME} -p ${COMPANY_CI_PASSWORD} - podman build --pull --no-cache -t registry.gitlab.com/company/platform:latest -f ./distribute/image . - podman push registry.gitlab.com/company/platform:latest
在这个 example 我们使用基于 Podman 的官方稳定镜像 Fedora Linux 37。我们使用它来构建基于 ./distribute/image 文件的平台的最新版本。 我们可以在无需设置 Docker 的情况下完成这一切。
工具和集成
最后,我们必须谈谈某些工具。 并非所有工具从一开始就都能同样有效地工作。 为了 example,Amazon 的 AWS CLI 提供的登录是为 Docker 硬编码的。 尽管如此,您仍然可以通过执行以下操作轻松登录 AWS:
$ aws ecr get-login-password --region $REGION | podman login --username AWS --password-stdin $AWS_REPO_NAME
同样,您可以为 Podman 和 Docker 缓存您的注册表凭据。 使用单个命令执行此操作,例如:
$ podman login registry.gitlab.com –authfile=${HOME}/.docker/config.json
替代方案/解决方法
也许所有这些听起来都不错,但您需要更多时间来说服您的团队和公司采用开源工具是件好事。 在这种情况下,您可以将以下代码片段添加到 .bashrc 并使用 Podman,而无需更改您团队的工具。
#Ensure that these aliases also affect other scripts shopt -s expand_aliases alias docker=podman alias docker-compose=podman-compose
这也让您有机会测试您的设置,以防技术不兼容。 您还可以使用包 podman-docker(可通过 dnf 获得)自动将 Docker 命令转换为 Podman 命令。
公司经验
从 Docker 到 Podman 的迁移在我的开发团队中受到了好评。 macOS 和 Windows 用户的桌面体验得到了改善,因为他们不再需要使用闭源工具。 CI 系统的改进也有助于维护管道,并使集成测试运行得更快。
在日常工作中,团队非常热衷于检查正在运行的容器、管理图像和清理临时卷的轻松程度。
从总体上看,从 Docker 到 Podman 的迁移进一步帮助公司限制了金融负债。 macOS 和 Windows 上的开发人员不再依赖闭源产品。 最后,这也意味着团队获得了一些 Kubernetes 的经验,这在未来肯定会有所回报。
概括
切换到 Podman 的好处确实超过了设置和迁移所需的时间。 Podman 和 Podman Desktop 的未来是光明的,它为 Docker 带来的问题提供了一个很好的解决方案。
最后,对于我们 Fedora Linux 用户,还有一个很大的好处。 开发中有一些漂亮的工具可以让我们的生活变得更加轻松。 以下是应用程序的截图 豆荚. 这目前正在积极开发中,但肯定会在未来被证明是一个有用的工具。
本文由我的雇主 Bold Security Technologies 提供。 有您自己的移民故事要分享吗? 让我们在评论中知道。