Compose 入门
Compose 是一项规范,用于定义和运行多容器的 Docker 应用程序。通过 Compose,您可以使用 YAML 文件来配置应用程序的服务、网络和卷。这使您能够在一个文件中捕获运行一组相互关联的容器作为应用程序所需的全部配置。例如,如果您的应用程序需要一个 Web 服务器、一个数据库和一个缓存服务,您可以在 Compose 文件中定义这些组件及其关系。
要使用 Compose YAML,您可以利用一种规范实现,例如 podman compose
和 docker compose
。
本教程涵盖了在 Podman Desktop 中使用多容器 Compose 应用程序所需的以下端到端任务:
- 使用
podman compose up
下载并运行示例应用程序。 - 查看留言簿 Web 应用程序.
- 查看并修改数据库,以检查留言簿 Web 应用程序是否已同步并正常运行。
- 扩展数据库副本.
准备工作
如果您没有安装 Compose,可以按照完整的入门流程在系统范围内安装它。
-
从目录中安装 Compose 扩展。更多详情,请参见安装 Podman Desktop 扩展。
-
设置 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.
...
如果已安装 Compose,您可以导航到**设置 > 命令行工具**页面来选择升级或降级其版本。
下载并运行示例应用程序
我们的示例应用程序位于 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,您还可以直接从图形界面访问容器的终端并修改数据库。
-
点击**打开终端**以访问
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
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