翼度科技»论坛 云主机 LINUX 查看内容

Podman Compose 新手指南

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
作者:袁首京  原创文章,转载时请保留此声明,并给出原文连接。
技术人员多数又呆板又花心不长久。我知道你可能已经厌倦了 Docker,但是系统还没有复杂到需要高攀 K8S 的地步。那我建议您,有空的话可以约一下 Podman。
Podman 使用起来是足够简单的,直接把它当做改了名字的 Docker 就可以了。所以以下只介绍一下它的编排工具,也就是 podman-compose。
简介

用 Docker 的时候,你知道它提供了一个编排工具,可以将容器的细节,例如名称、镜像、重启策略、卷、挂载点、端口、标签等等,在一个单一的文件中指定,这个文件通常命名为 docker-compose.yml。
Podman 可以使用 podman-compose 达成类似的功能。简单的说,podman-compose 是使用 Podman 做为后端的一种 Compose Spec 实现,它的关注点主要是:

  • rootless 不需要 root 权限
  • daemon-less 没有守护进程
它最终的实现结果与 docker-compose.yml 文件的兼容度非常高,只存在一些细微的差异,比如说某些值需要使用引号括起来等。
安装

podman-compose 算是一个相对较新的工具,因此很多稳定或长期支持的 Linux 发行版,很可能还没有将它放在内置的软件源中。这种情况下,可以从 PyPI 安装:
  1. sudo pip3 install podman-compose
复制代码
Ubuntu 22.10 及以上或 Debian 12 及以上,则可以使用包管理器安装它:
  1. sudo apt install podman-compose
复制代码
Fedora 36 及以上,也可以直接安装:
  1. sudo dnf install podman-compose
复制代码
Arch Linux 用户:
  1. sudo pacman -Syu podman-compose
复制代码
验证安装

可以简单输出一下版本号,以验证是否安装正确:
  1. podman-compose --version
复制代码
输出类似下面:
  1. $ podman-compose --version
  2. ['podman', '--version', '']
  3. using podman version: 4.3.1
  4. podman-composer version 1.0.3
  5. podman --version
  6. podman version 4.3.1
  7. exit code: 0
复制代码
编排

如前所述,podman-compose 与 docker-compose 基本一致,所以不详细描述其文件结构了。直接看一个例子,比较容易理解,内容如下:
  1. version: 3.7
  2. services:
  3.   reverse-proxy:
  4.     image: docker.io/library/caddy:alpine
  5.     container_name: caddy-vishwambhar
  6.     command: caddy run --config /etc/caddy/Caddyfile
  7.     restart: always
  8.     ports:
  9.       - "8080:80"
  10.       - "8443:443"
  11.     volumes:
  12.       - /docker-volumes/caddy/Caddyfile:/etc/caddy/Caddyfile:Z
  13.       - /docker-volumes/caddy/site:/srv:Z
  14.       - /docker-volumes/caddy/caddy_data:/data:Z
  15.       - /docker-volumes/caddy/caddy_config:/config:Z
  16.       - /docker-volumes/caddy/ssl:/etc/ssl:Z
  17.     labels:
  18.       - io.containers.autoupdate=registry
  19.       - pratham.container.category=proxy
  20.     environment:
  21.       - TZ=Asia/Kolkata
  22.     depends_on:
  23.       - gitea-web
  24.   gitea-web:
  25.     image: docker.io/gitea/gitea:latest
  26.     container_name: gitea-govinda
  27.     restart: always
  28.     ports:
  29.       - "8010:3000"
  30.       - "8011:22"
  31.     volumes:
  32.       - /docker-volumes/gitea/web:/data:Z
  33.       - /docker-volumes/gitea/ssh:/data/git/.ssh:Z
  34.       - /etc/localtime:/etc/localtime:ro
  35.     labels:
  36.       - io.containers.autoupdate=registry
  37.       - pratham.container.category=gitea
  38.     environment:
  39.       - RUN_MODE=prod
  40.       - DISABLE_SSH=false
  41.       - START_SSH_SERVER=true
  42.       - SSH_PORT=22
  43.       - SSH_LISTEN_PORT=22
  44.       - ROOT_URL=https://git.mydomain.com
  45.       - DOMAIN=git.mydomain.com
  46.       - SSH_DOMAIN=git.mydomain.com
  47.       - GITEA__database__DB_TYPE=postgres
  48.       - GITEA__database__HOST=gitea-db:5432
  49.       - GITEA__database__NAME=gitea
  50.       - GITEA__database__USER=gitea
  51.       - GITEA__database__PASSWD=/run/secrets/gitea_database_user_password
  52.       - GITEA__service__DISABLE_REGISTRATION=true
  53.       - TZ=Asia/Kolkata
  54.     depends_on:
  55.       - gitea-db
  56.     secrets:
  57.       - gitea_database_user_password
  58.   gitea-db:
  59.     image: docker.io/library/postgres:14-alpine
  60.     container_name: gitea-chitragupta
  61.     restart: always
  62.     volumes:
  63.       - /docker-volumes/gitea/database:/var/lib/postgresql/data:Z
  64.     labels:
  65.       - io.containers.autoupdate=registry
  66.       - pratham.container.category=gitea
  67.     environment:
  68.       - POSTGRES_USER=gitea
  69.       - POSTGRES_PASSWORD=/run/secrets/gitea_database_user_password
  70.       - POSTGRES_DB=gitea
  71.       - TZ=Asia/Kolkata
  72.     secrets:
  73.       - gitea_database_user_password
  74. secrets:
  75. gitea_database_user_password:
  76. external: true
复制代码
启动所有容器

可以简单使用 up 命令,启动编排文件中的所有容器与服务:
  1. podman-compose up -d
复制代码
上述命令背后将执行启动相关容器必须的所有操作,包括:

  • 拉取镜像
  • 使用指定选项(端口、卷、机密、网络等)创建容器
  • 按特定顺序启动容器(由约束定义,例如 depends_on)
-d 选项,随便一猜大概就能明白,是做为后台进程启动容器的意思。
容器启动并运行后,可以通过以下命令进行验证:
  1. $ podman ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. d7b7f91c03aa docker.io/library/caddy:alpine caddy run --confi... 4 hours ago Up 4 hours ago 0.0.0.0:8080->80/tcp, 0.0.0.0:8443->443/tcp caddy-vishwambhar
  4. 1cfcc6efc0d0 docker.io/library/postgres:14-alpine postgres 4 hours ago Up 4 hours ago gitea-chitragupta
  5. 531be3df06d0 docker.io/gitea/gitea:latest /bin/s6-svscan /e... 4 hours ago Up 4 hours ago 0.0.0.0:8010->3000/tcp, 0.0.0.0:8011->22/tcp gitea-govinda
复制代码
停止容器与服务

既然启动是 up,那停止很明显就是 down 了。这俩单词我老早就认识,不知道你认识不认识?
  1. podman-compose down
复制代码
此外,您还可以设置个超时时间,容器到时可以安全地自行关闭:
  1. podman-compose down -t TIMEOUT_IN_SECONDS
  2. podman-compose down --timeout TIMEOUT_IN_SECONDS
复制代码
注意,以上命令仅停止容器,并不会删除容器。
启动或停止特定服务

你应该注意到了,上面的配置文件定义了多个服务,比如其中之一是 gitea-db。如果单独启停它的话,可以象这样:
  1. $ podman-comopse start gitea-db
  2. $ podman-compose stop gitea-db
  3. $ podman-compose restart gitea-db
复制代码
其它

主要的命令其实就是上述这些了。剩余一两个可能用到的,简单描述一下。
假如想预先拉取一下相关镜像,可以使用命令:
  1. podman-compose pull
复制代码
另外,前述命令都假定编排文件的名字仍然叫 docker-compose.yml。肯定是可以换成其它名字的,比如 foo.yml,则使用时需要多加个参数,指定配置文件:
  1. podman-compose -f foo.yml
  2. podman-compose --file foo.yml
复制代码
总之,使用起来还是相当简单愉快的。请君试之。
  作者:袁首京  原创文章,转载时请保留此声明,并给出原文连接。

来源:https://www.cnblogs.com/rockety/p/17291605.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具