#docker-compose #docker #命令行工具 #环境变量 #列表 #pose #服务

bin+lib docker-pose

命令行工具,用于与 🐳 Docker Compose 文件交互

9 个不稳定版本 (3 个破坏性更新)

0.4.0 2024年4月30日
0.4.0-b52024年4月24日
0.4.0-b32024年3月17日
0.3.0 2024年3月3日
0.1.0 2022年11月13日

#135 in 命令行界面

GPL-3.0 许可协议

67KB
1.5K SLoC

Pose:一个 Docker Com-"pose" 命令行工具

Docker Compose "辅助"工具,用于以事务方式发布应用程序!

pose 是一个命令行工具,用于与 🐳 Docker Compose 文件交互。

它允许列出 compose.yaml 文件中的一些属性,但更重要的是,它允许在 CI 环境中使用 docker compose 测试分布式应用程序,动态地从另一个文件构建新的 compose 文件,用新的远程版本(如果存在)替换镜像的标签版本,使得跨 Docker 化应用程序开发功能成为可能,这些应用程序带有通用的名称,例如 new-tracking-field,然后在 CI 环境中使用 docker compose 一起测试它们(参见 在 CI 环境中运行功能分支)。

用例

$ pose list services
sales-service
postgres
$ pose list volumes
sales-data
pg-data
$ pose list envs postgres
PORT=5432
POSTGRES_PASSWORD=password

Pose 查找的 compose 文件遵循与 docker compose 相同的 规范,或者您可以指定文件名: pose -.yaml -.yaml list services

执行 pose --help 以获取更多选项。

Pose 对于处理大型 compose 文件非常有用,其中包含数十个定义,在这种情况下,查找某个内容或总结它可能比不使用 Pose 需要更多的工作。

在 CI 环境中运行功能分支

🐳 🖥 ⏯ ✅

阅读此 文档 了解如何将其用于 CI 环境以运行集成测试。

找到您记得不完全确切名称的服务

如果您定义了数十个服务,其中一些甚至具有相似的名字,那么在文件中查找您不记得名字的那个可能有些困难。这时,pose list services 就能派上用场!它会将所有内容打印到标准输出,因此您可以使用类似 pose list services | grep sales 的命令。尽管您也可以使用 cat compose.yaml | grep sales,但对于大型文件,可能会输出大量不希望看到的行,例如包含 sales 字符串的环境变量所在的行,等等。

获取 /etc/hosts 的完整主机名列表

这是我最喜欢的

$ pose list -p oneline services
sales-service postgres redis nginx ...

-p oneline(或 --pretty online)将列表打印成一行,每个项目之间用空格分隔。为什么这很有用?然后您可以将输出粘贴到您的 /etc/hosts 中的本地 IP 上。以下是一个示例:

127.0.0.1   sales-service postgres redis nginx ...

当您尝试访问由 Docker Compose 运行的服务,然后需要从浏览器或 Docker 外部的应用程序访问它们时,这很有用。

列出服务的环境变量

当您想要集中在一个地方列出所有用于本地开发的服务所使用的环境变量时,这特别有用。但在某个时候,您需要设置和运行一个或多个在 Docker 外部运行的服务。例如:

# Check the the services' environment variables
$ pose list envs sales-services
PORT=3000
DATABASE_URL=postgresql://sales:pass@postgres:5432/sales_dev
# Export them before run the service outside Docker
$ export $(pose list envs sales-services)
# Run the service, the envs have been set
$ yarn start
...
Webserver listening at https://127.0.0.1:3000

您还可以将任何服务的环境变量导出为 .env 文件

$ pose list envs portal-webapp > .env

安装

与任何 Rust 项目一样,使用以下命令在您的系统中安装二进制文件 pose

$ cargo install docker-pose

(是的,在 Crates.io 中的包名是 docker-pose,而不是 pose)。

或者从源代码开始,在克隆了源代码后,转到文件夹并执行 cargo install --path .make install(通常它会在 ~/.cargo/bin 文件夹中安装二进制文件)。

二进制下载

二进制文件为 Linux、Mac 和 Windows 每次发布提供。

发布页面 下载二进制文件。

下载后,解压文件

$ tar -xvf pose*.tar.gz

检查执行位

$ chmod +x pose

然后执行 pose

$ ./pose

如果您希望能够在任何地方执行它,请将 Pose 所在的目录包含在您的 PATH 变量 中,或者将 Pose 移动到已包含在您的 $PATH 变量中的目录,例如 $HOME/.local/bin

构建和运行测试

🚧 Pose 开发区域! 这不是关于如何使用 pose 运行测试的部分,而是关于如何构建和测试 pose 自身的说明。

有一个 Makefile,可以用来执行大多数开发任务,例如 make release,它执行 cargo build --release,所以即使您不使用 make,也应该查看该文件以了解有用的命令。

测试

  • 一次性运行所有测试(较慢):make test-all,包含所有测试,相当于CI在每次推送到GitHub时执行的操作。
  • Rust单元测试:make test
  • 代码风格检查:make lint
  • 格式检查器:make fmt-check
  • Shell测试:make test-cmd。它们使用测试框架Bats编写Shell脚本。
  • Rust集成测试:make test-integration。非常慢,它们执行测试以检查涉及pose → docker → docker registry的功能。
  • Shell集成测试:make test-cmd-integration,非常慢,它们执行测试以检查涉及pose → docker → docker registry调用命令行功能。
  • 一次性运行所有测试:make test-all-fast,包括上述所有内容,但不包括集成测试。

如果您收到类似错误make: ./tests/bats/bin/bats: Command not found的信息,那是因为您没有使用--recurse-submodules git参数克隆项目。首先执行git submodule update --init以克隆pose文件夹内的子模块。

关于

来源: https://github.com/mrsarm/pose

作者: (2022-2024) Mariano Ruiz <mrsarm (at) gmail.com>

许可证: GPL-3

依赖

~7–18MB
~232K SLoC