跳至主要内容

一篇标有 "docker-compose" 标签的文章

查看所有标签

Podman 桌面版 Compose 入门

·阅读时间:5 分钟
Charlie Drage
软件工程师

在这篇博客文章中,我们将学习如何使用 Podman 桌面版运行多容器 Compose 应用程序。

目标

  • 通过 podman compose up 启动 Compose YAML。
  • 查看留言簿 Web 应用程序。
  • 确认 Web 应用程序与数据库同步并正常运行。
  • 使用 Podman 桌面版查看、检查并访问 Redis 集群的终端。

什么是 Compose

Compose 是一个规范,用于定义和运行多容器 Docker 应用程序。使用 Compose,您可以使用 YAML 文件配置应用程序的服务、网络和卷。这使您可以在单个文件中捕获运行一组相互关联的容器作为应用程序所需的所有配置。例如,如果您有一个需要 Web 服务器、数据库和缓存服务的应用程序,您可以在您的 Compose 文件中定义这些组件及其关系。

要使用 Compose YAML,您可以使用规范实现,例如 podman composedocker compose

开始之前

如果您尚未安装 Compose,让我们一起完成安装 Compose 实现二进制文件的入门过程。

  1. 转到 ** 设置 > 资源** 下。
  2. 单击 Compose 下的 **设置**(如果尚未安装,它将显示出来)。
  3. 完成入门过程。

Onboarding process

确认您可以运行 podman compose

podman compose
Run compose workloads via an external provider such as docker-compose or podman-compose

Description:
This command is a thin wrapper around an external compose provider such as docker-compose or podman-compose. This means that podman compose is executing another tool that implements the compose functionality but sets up the environment in a way to let the compose provider communicate transparently with the local Podman socket. The specified options as well the command and argument are passed directly to the compose provider.
...

下载并运行示例应用程序

我们的示例应用程序位于 github.com/redhat-developer/podman-desktop-demo

我们将使用 git clone,以便我们可以构建 Go 二进制 Web 应用程序。

git clone https://github.com/redhat-developer/podman-desktop-demo
cd podman-desktop-demo/guestbook-compose

运行 podman compose up -d 启动应用程序。

podman compose up -d
>>>> Executing external compose provider "/usr/local/bin/docker-compose". Please refer to the documentation for details. <<<<

[+] Running 3/3
✔ Container redis-replica Started 0.0s
✔ Container web Started 0.0s
✔ Container redis-leader Started 0.0s

查看留言簿应用程序

在 Podman 桌面版中,您现在可以看到所有三个容器都已启动并正在运行。

单击“打开浏览器”按钮查看 Web 应用程序。

Open browser

在留言簿 Web 应用程序中,您可以

  • “签名”留言簿,这将写入 Redis 主节点并同步到副本。
  • “读取”留言簿,这将从 Redis 副本池中读取。即使 Redis 主节点不可用,这也能确保可读性。
  • /env:查看容器的环境变量。
  • /info:查看有关 Redis 集群的信息。

Guestbook application

查看和修改数据库

使用 Podman 桌面版,您也可以直接从 GUI 访问容器的终端并修改数据库。

单击“打开终端”访问 redis-leader 终端。

Open terminal

就像您进行数据库管理一样修改数据库。

  1. 在容器内运行 redis-cli 访问 Redis 数据库。
  2. 输入 LPUSH guestbook "Hello World!",您将看到您的 Web 应用程序实时更新。
  3. 输入 DEL guestbook,您将看到您的数据库将删除 guestbook 键并清除数据库。

Redis CLI

更改将实时反映在留言簿上。

您可以进一步修改数据库并查看更改传播到 Redis 副本。

例如,查看 redis-replica 的日志,您将注意到存在定期数据库同步以及对数据库的读取。

Redis replica logs

它是如何工作的?

简要概述此多容器场景中的体系结构是如何工作的。

  • 在留言簿应用程序中,它会在端口 6379 上查找名为 redis-leaderredis-replica 的数据库。
  • 由于它是一个 Compose 应用程序,因此这些容器在同一个网络上连接。这意味着通过容器名称可以轻松访问相邻容器。

有一组环境变量,Web 应用程序可以在 Compose 应用程序中修改这些变量。

  • REDIS_LEADER:默认值为 redis-leader
  • REDIS_REPLICAS:默认值为 redis-replica。可以逗号分隔,例如 redis-replica-1,redis-replica-2
  • REDIS_PORT:默认值为 6379
  • SERVER_PORT:默认值为 8080

扩展更多副本

想要扩展更多副本?您可以通过在 compose.yaml 中添加一个环境变量并复制您的 redis-replica 条目来实现这一点。

修改您的 compose.yaml,如下所示:

services:
redis-leader:
container_name: redis-leader
image: redis:latest
ports:
- '6379'

redis-replica:
container_name: redis-replica
image: redis:latest
ports:
- '6379'
command: redis-server --replicaof redis-leader 6379

redis-replica-2:
container_name: redis-replica-2
image: redis:latest
ports:
- '6379'
command: redis-server --replicaof redis-leader 6379

web:
container_name: web
build: ./web
environment:
- REDIS_REPLICAS=redis-replica1,redis-replica2
ports:
- '8080:8080'

再次运行 podman compose up -d 确保新容器已添加且新环境变量已传播。

podman compose up -d
>>>> Executing external compose provider "/usr/local/bin/docker-compose". Please refer to the documentation for details. <<<<

[+] Running 4/4
✔ Container redis-replica-2 Started 0.0s
✔ Container redis-leader Running 0.0s
✔ Container web Started 0.0s
✔ Container redis-replica Running 0.0s