用 Podman Compose 管理容器

系统 Linux
Docker 的一个缺点是它有一个中央守护进程,它以 root 用户的身份运行,这对安全有影响。但这正是 Podman 的用武之地。Podman 是一个 无守护进程容器引擎,用于开发、管理和在你的 Linux 系统上以 root 或无 root 模式运行 OCI 容器。

 

[[381962]]

容器很棒,让你可以将你的应用连同其依赖项一起打包,并在任何地方运行。从 2013 年的 Docker 开始,容器已经让软件开发者的生活变得更加轻松。

Docker 的一个缺点是它有一个中央守护进程,它以 root 用户的身份运行,这对安全有影响。但这正是 Podman 的用武之地。Podman 是一个 无守护进程容器引擎,用于开发、管理和在你的 Linux 系统上以 root 或无 root 模式运行 OCI 容器。

下面这些文章可以用来了解更多关于 Podman 的信息:

如果你使用过 Docker,你很可能也知道 Docker Compose,它是一个用于编排多个可能相互依赖的容器的工具。要了解更多关于 Docker Compose 的信息,请看它的文档

什么是 Podman Compose?

Podman Compose 项目的目标是作为 Docker Compose 的替代品,而不需要对 docker-compose.yaml 文件进行任何修改。由于 Podman Compose 使用吊舱pod 工作,所以最好看下“吊舱”的最新定义。

一个“吊舱pod ”(如一群鲸鱼或豌豆荚)是由一个或多个容器组成的组,具有共享的存储/网络资源,以及如何运行容器的规范。

Pods - Kubernetes 文档

(LCTT 译注:容器技术领域大量使用了航海比喻,pod 一词,意为“豆荚”,在航海领域指“吊舱” —— 均指盛装多个物品的容器。常不翻译,考虑前后文,可译做“吊舱”。)

Podman Compose 的基本思想是,它选中 docker-compose.yaml 文件里面定义的服务,为每个服务创建一个容器。Docker Compose 和 Podman Compose 的一个主要区别是,Podman Compose 将整个项目的容器添加到一个单一的吊舱中,而且所有的容器共享同一个网络。如你在例子中看到的,在创建容器时使用 --add-host 标志,它甚至用和 Docker Compose 一样的方式命名容器。

安装

Podman Compose 的完整安装说明可以在项目页面上找到,它有几种方法。要安装最新的开发版本,使用以下命令:

  1. pip3 install https://github.com/containers/podman-compose/archive/devel.tar.gz

确保你也安装了 Podman,因为你也需要它。在 Fedora 上,使用下面的命令来安装Podman:

  1. sudo dnf install podman

例子:用 Podman Compose 启动一个 WordPress 网站

想象一下,你的 docker-compose.yaml 文件在一个叫 wpsite 的文件夹里。一个典型的 WordPress 网站的 docker-compose.yaml (或 docker-compose.yml) 文件是这样的:

  1. version: "3.8"
  2. services:
  3. web:
  4. image: wordpress
  5. restart: always
  6. volumes:
  7. - wordpress:/var/www/html
  8. ports:
  9. - 8080:80
  10. environment:
  11. WORDPRESS_DB_HOST: db
  12. WORDPRESS_DB_USER: magazine
  13. WORDPRESS_DB_NAME: magazine
  14. WORDPRESS_DB_PASSWORD: 1maGazine!
  15. WORDPRESS_TABLE_PREFIX: cz
  16. WORDPRESS_DEBUG: 0
  17. depends_on:
  18. - db
  19. networks:
  20. - wpnet
  21. db:
  22. image: mariadb:10.5
  23. restart: always
  24. ports:
  25. - 6603:3306
  26.  
  27. volumes:
  28. - wpdbvol:/var/lib/mysql
  29.  
  30. environment:
  31. MYSQL_DATABASE: magazine
  32. MYSQL_USER: magazine
  33. MYSQL_PASSWORD: 1maGazine!
  34. MYSQL_ROOT_PASSWORD: 1maGazine!
  35. networks:
  36. - wpnet
  37. volumes:
  38. wordpress: {}
  39. wpdbvol: {}
  40.  
  41. networks:
  42. wpnet: {}

如果你用过 Docker,你就会知道你可运行 docker-compose up 来启动这些服务。Docker Compose 会创建两个名为 wpsite_web_1 和 wpsite_db_1 的容器,并将它们连接到一个名为 wpsite_wpnet 的网络。

现在,看看当你在项目目录下运行 podman-compose up 时会发生什么。首先,一个以执行命令的目录命名的吊舱被创建。接下来,它寻找 YAML 文件中定义的任何名称的卷,如果它们不存在,就创建卷。然后,在 YAML 文件的 services 部分列出的每个服务都会创建一个容器,并添加到吊舱中。

容器的命名与 Docker Compose 类似。例如,为你的 web 服务创建一个名为 wpsite_web_1 的容器。Podman Compose 还为每个命名的容器添加了 localhost 别名。之后,容器仍然可以通过名字互相解析,尽管它们并不像 Docker 那样在一个桥接网络上。要做到这一点,使用选项 -add-host。例如,-add-host web:localhost

请注意,docker-compose.yaml 包含了一个从主机 8080 端口到容器 80 端口的 Web 服务的端口转发。现在你应该可以通过浏览器访问新 WordPress 实例,地址为 http://localhost:8080

 

WordPress Dashboard

控制 pod 和容器

要查看正在运行的容器,使用 podman ps,它可以显示 web 和数据库容器以及吊舱中的基础设施容器。

  1. CONTAINER ID  IMAGE                               COMMAND               CREATED      STATUS          PORTS                                         NAMES
  2. a364a8d7cec7  docker.io/library/wordpress:latest  apache2-foregroun...  2 hours ago  Up 2 hours ago  0.0.0.0:8080->80/tcp, 0.0.0.0:6603->3306/tcp  wpsite_web_1
  3. c447024aa104  docker.io/library/mariadb:10.5      mysqld                2 hours ago  Up 2 hours ago  0.0.0.0:8080->80/tcp, 0.0.0.0:6603->3306/tcp  wpsite_db_1
  4. 12b1e3418e3e  k8s.gcr.io/pause:3.2

你也可以验证 Podman 已经为这个项目创建了一个吊舱,以你执行命令的文件夹命名。

  1. POD ID        NAME             STATUS    CREATED      INFRA ID      # OF CONTAINERS
  2. 8a08a3a7773e  wpsite           Degraded  2 hours ago  12b1e3418e3e  3

要停止容器,在另一个命令窗口中输入以下命令:

  1. podman-compose down

你也可以通过停止和删除吊舱来实现。这实质上是停止并移除所有的容器,然后再删除包含的吊舱。所以,同样的事情也可以通过这些命令来实现:

  1. podman pod stop podname
  2. podman pod rm podname

请注意,这不会删除你在 docker-compose.yaml 中定义的卷。所以,你的 WordPress 网站的状态被保存下来了,你可以通过运行这个命令来恢复它。

  1. podman-compose up

总之,如果你是一个 Podman 粉丝,并且用 Podman 做容器工作,你可以使用 Podman Compose 来管理你的开发和生产中的容器。 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2022-09-22 16:21:43

开源GUI 应用

2021-09-02 10:01:58

Spring 容器AOP

2015-12-30 14:50:45

Kubernetes容器技术Docker

2019-01-11 13:57:06

2023-11-28 13:50:00

Kubernetes容器

2021-05-17 12:54:04

AnsiblePodman开源

2023-02-03 17:47:28

2022-01-18 17:57:21

PodmanLinux容器

2018-10-26 16:20:27

PodmanrootLinux

2021-02-17 09:16:58

PodmanLinuxDocker

2019-08-05 15:38:07

BitwardenPodman密码管理器

2023-11-02 08:45:07

2010-02-01 16:17:22

无线交换机

2019-08-26 19:03:58

2019-08-26 19:24:55

Podman容器Linux

2017-07-17 16:27:10

Docker Comp链接容器

2014-07-07 09:49:13

UbuntuDocker

2021-01-15 13:54:04

Portainer.iDocker运维

2021-01-15 13:37:43

Portainer.iDocker运维

2024-09-06 12:28:48

点赞
收藏

51CTO技术栈公众号