#docker #container #engine #container-image #client #compose #client-server

passivized_docker_engine_client

Docker Engine 客户端 - 管理和运行容器、镜像和卷

8 个版本

0.0.9 2023年11月11日
0.0.8 2023年8月31日
0.0.7 2023年1月16日
0.0.6 2022年12月25日
0.0.4 2022年10月20日

#613异步


用于 2 crates

MPL-2.0 许可证

255KB
5.5K SLoC

Docker Engine 客户端

连接到 Docker Engine 的客户端库,通常是本地实例在 /var/run/docker.sock。该库可以拉取和标记镜像,创建和启动容器,获取它们的输出。

适用于构建需要服务器应用程序的自动化测试,例如使用 Postgres 数据库的 Rust 应用程序。测试可以使用此库创建、启动和使用容器化应用程序,测试完成后删除容器。

示例

你好,世界

examples/hello.rs

拉取并运行著名的 hello-world Docker 容器,等待其完成,并记录其输出。

BusyBox 文件列表

examples/busybox.rs

与 Hello World 类似,但运行文件列表命令,并记录文件列表。

镜像列表

examples/image-list.rs

获取 Docker Engine 中当前存储的所有镜像的列表,并列出具有名称(标签)的前十个镜像。

Nginx

examples/nginx.rs

拉取并运行 nginx 镜像,等待其启动,通过等待端口 80 在服务中,然后获取并显示 nginx 服务的内容。

测试中的示例

具有自定义网络的复杂多容器配置

tests/test_registry.rs

  • Docker-in-Docker (DIND)
  • 从容器内提取创建的文件
  • 使用 TLS 和 htpasswd 认证保护的安全私有仓库
  • 私有仓库的推送和拉取

健康检查

tests/test_health_check.rs

添加一个失败的健康检查并获取其状态。

修剪未使用的卷

tests/test_volumes_prune.rs

平台支持

Linux

该库在 Linux 上功能齐全。

Mac

Mac 支持是实验性的。没有禁用功能,但某些自动化测试被禁用。

在Mac上,Docker为容器创建的定制本地网络不容易从主机网络访问。因此,在实现解决方案之前,许多自动化测试都被禁用了。

Windows

Windows支持是实验性的。由于Docker Engine在Windows上不支持某些功能,因此一些功能被条件编译掉了。默认配置下,示例在Windows上无法正常工作。

此外,在Windows上,Docker Engine仅监听命名管道,必须重新配置以启用HTTP监听器。自动化测试在端口2375上启用了一个不安全的监听器。如果您在生产环境中启用HTTP,您将需要遵循Docker文档,以在端口2376上启用TLS安全的监听器。

此库支持连接到TLS安全的端点,包括使用自签名证书机构。

连接到HTTP端点

请参阅.github/workflows/ci.yml以获取示例。

重新配置和重新启动Docker Engine后,设置DOCKER_HOST环境变量,并在您的代码中使用DockerEngineClient::new

或者,您可以使用DockerEngineClient::with_server("https://127.0.0.1:2375")代替环境变量,这仍然需要重新配置Docker Engine。

使用TLS连接到HTTP端点

使用DockerEngineClient::with_tls_config("https://127.0.0.1:2376", tls_config)连接,其中tls_config是您使用用于TLS的自签名证书机构配置的native_tls::TlsConnector实例。

如果您不辞劳苦创建了一个您的客户端已经信任的CA(例如企业CA或公共CA)签名的服务器TLS证书,您可以设置DOCKER_HOST环境变量,并使用DockerEngineClient::new,而无需显式设置任何TlsConnector配置。

测试基础设施

依赖关系

~9–21MB
~330K SLoC