Podman Desktop 上的 Compose 入門
在這篇博客文章中,我們將學習如何使用 Podman Desktop 來運行一個多容器的 Compose 應用程序。
目標
- 通過 `podman compose up` 啟動 Compose YAML。
- 查看留言簿 Web 應用程序。
- 確認 Web 應用程序與數據庫正確同步並運行。
- 使用 Podman Desktop 查看、檢查並訪問 Redis 集群的終端。
Compose 是什麼
Compose 是一種規範,用於定義和運行多容器的 Docker 應用程序。使用 Compose,您使用 YAML 文件配置應用程序的服務、網絡和卷。這允許您在單個文件中捕獲運行一組互連容器作為應用程序所需的所有配置。例如,如果您有一個應用程序需要 Web 服務器、數據庫和緩存服務,您可以在 Compose 文件中定義這些組件及其關係。
要使用 Compose YAML,您可以使用規範實現,例如 podman compose
和 docker compose
。
開始之前
如果您沒有安裝 Compose,讓我們通過入門過程來安裝 Compose 實現二進制文件
- 轉到 ** 設置 > 资源** 中的“资源”。
- 单击 Compose 下的“设置”(如果尚未安装,它将显示)。
- 完成入门过程。
确认您能够运行 `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 Desktop 中,您现在可以看到所有三个容器都已启动并运行。
单击“打开浏览器”按钮查看 Web 应用程序
在留言簿 Web 应用程序中,您可以
- “签名”留言簿,这将写入 Redis 主节点并同步到副本。
- 从留言簿“读取”,这将从 Redis 副本池中读取。即使 Redis 主节点不可用,这也能保证可读性。
/env
:查看容器的环境变量。/info
:查看有关 Redis 集群的信息。
查看和修改数据库
使用 Podman Desktop,您还可以直接从 GUI 访问容器的终端并修改数据库。
单击“打开终端”访问 `redis-leader` 终端
像进行数据库管理一样修改数据库
- 在容器中运行 `redis-cli` 访问 Redis 数据库。
- 键入 `LPUSH guestbook "Hello World!"`,您将看到您的 Web 应用程序实时更新。
- 键入 `DEL guestbook`,您将看到您的数据库删除了 `guestbook` 键并清除了数据库。
更改将实时反映在留言簿上。
您可以进一步修改数据库,并看到更改传播到 Redis 副本。
例如,查看 `redis-replica` 的日志,您将注意到有定期的数据库同步以及对数据库的读取
它是如何工作的?
多容器场景中架构工作方式的简要概述
- 在留言簿应用程序中,它会在端口 6379 上查找名为 `redis-leader` 和 `redis-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