35 个版本
新 0.17.1 | 2024 年 8 月 18 日 |
---|---|
0.17.0 | 2024 年 7 月 28 日 |
0.16.1 | 2024 年 3 月 23 日 |
0.15.0 | 2023 年 9 月 15 日 |
0.1.1 | 2018 年 12 月 28 日 |
在 开发工具 中排名第 6
每月下载量 310,862
用于 161 个 项目(直接使用 83 个)
1MB
14K SLoC
Bollard:Docker API 的异步 Rust 客户端库
Bollard 利用最新的 Hyper 和 Tokio 改进,提供了包含 futures、streams 和 async/await 语言的异步 API。
此库通过 命名管道 支持 Windows,并通过可选的 Rustls 绑定支持 HTTPS。通过 OpenAPI、protobuf 和上游文档生成与 Docker 和 Buildkit 接口的序列化类型。
安装
将以下内容添加到您的 Cargo.toml
文件中
[dependencies]
bollard = "*"
API
文档
最新
版本 0.17
启用了 secrets
和 sshforward
组件,这些组件是 buildkit
的组成部分,API 版本 1.45.0 - (在 Windows 上禁用)。请注意:所有 buildkit
API 都处于 开发者预览 状态,欢迎提供反馈。
功能标志
ssl
:通过 Rustls 和 ring 提供商启用 SSL 支持。aws-lc-rs
:通过 Rustls 和 aws-lc-rs 提供商启用 SSL 支持。ssl_providerless
:通过 Rustls 启用 SSL 支持,无需安装 CryptoProvider。您需要自行负责此操作。chrono
:为DateTime
类型启用 Chrono。time
:为DateTime
类型启用 Time 0.3。buildkit
:在构建镜像时使用 Buildkit 而不是 Docker。json_data_content
:在序列化失败时添加 JSON 到错误信息中。webpki
:使用 Mozilla 的根证书而不是操作系统提供的本地根证书。
版本
Bollard 使用的 Docker API 正在使用由 moby 项目发布的最新 1.44
文档方案,以生成其序列化接口。
Bollard 的破坏性变更发布将取决于与该发布日期相对应的 moby API 服务器版本,例如,一月份的次要版本变更将使用一月份可用的匹配的 moby swagger API。如果需要更现代或更旧的 API,可以根据您的 Docker 服务器版本,相关的 bollard-stubs
项目将发布单独的版本,您可以将项目针对这些版本。
例如
[dependencies]
bollard-stubs = { version = "=1.44.0-rc.26.0.0" }
此库还支持 版本协商,允许降级到较旧的 API 版本。
使用方法
连接到 docker 守护进程
根据您的架构和安全要求连接到 docker 服务器。
套接字
客户端将连接到标准的 UNIX 套接字位置 /var/run/docker.sock
或 Windows 命名管道位置 //./pipe/docker_engine
。
use bollard::Docker;
#[cfg(unix)]
Docker::connect_with_socket_defaults();
使用 Docker::connect_with_socket
方法 API 来参数化此接口。
本地
客户端将连接到为编译而准备的特定于操作系统的处理程序。
这对于应在多个操作系统上运行的本地主机环境来说是一个便利。
use bollard::Docker;
Docker::connect_with_local_defaults();
使用 Docker::connect_with_local
方法 API 来参数化此接口。
HTTP
客户端将连接到由 DOCKER_HOST
环境变量指向的位置,如果未设置,则连接到 localhost:2375
。
use bollard::Docker;
Docker::connect_with_http_defaults();
使用 Docker::connect_with_http
方法 API 来参数化接口。
Rustls 下的 SSL
客户端将连接到由 DOCKER_HOST
环境变量指向的位置,如果未设置,则连接到 localhost:2375
。
在由 DOCKER_CERT_PATH
环境变量指向的位置搜索证书 - key.pem
用于私钥,cert.pem
用于服务器证书,以及 ca.pem
用于证书颁发机构链。
use bollard::Docker;
#[cfg(feature = "ssl")]
Docker::connect_with_ssl_defaults();
使用 Docker::connect_with_ssl
方法 API 来参数化接口。
示例
注意:所有这些示例都需要一个 Tokio 运行时。
版本
首先,检查 API 是否与您的服务器一起工作
use bollard::Docker;
use futures_util::future::FutureExt;
// Use a connection function described above
// let docker = Docker::connect_...;
async move {
let version = docker.version().await.unwrap();
println!("{:?}", version);
};
列出镜像
列出Docker服务器上可用的Docker镜像
use bollard::Docker;
use bollard::image::ListImagesOptions;
use futures_util::future::FutureExt;
use std::default::Default;
// Use a connection function described above
// let docker = Docker::connect_...;
async move {
let images = &docker.list_images(Some(ListImagesOptions::<String> {
all: true,
..Default::default()
})).await.unwrap();
for image in images {
println!("-> {:?}", image);
}
};
流式统计
接收正在运行的容器的统计流。
use bollard::Docker;
use bollard::container::StatsOptions;
use futures_util::stream::TryStreamExt;
use std::default::Default;
// Use a connection function described above
// let docker = Docker::connect_...;
async move {
let stats = &docker.stats("postgres", Some(StatsOptions {
stream: true,
..Default::default()
})).try_collect::<Vec<_>>().await.unwrap();
for stat in stats {
println!("{} - mem total: {:?} | mem usage: {:?}",
stat.name,
stat.memory_stats.max_usage,
stat.memory_stats.usage);
}
};
示例
开发
欢迎贡献,请遵守以下规定。
构建proto模型
buildkit功能的序列化模型是通过Tonic库生成的。要在codegen/proto
文件夹中生成这些文件,请使用以下命令:
cargo run --bin gen --features build
构建swagger模型
序列化模型是通过Swagger库生成的。要在codegen/swagger
文件夹中生成这些文件,请使用以下命令:
mvn -D org.slf4j.simpleLogger.defaultLogLevel=error compiler:compile generate-resources
集成测试
默认情况下运行集成测试需要运行中的Docker注册表,并将标记的镜像推送到那里。要禁用此行为,请设置DISABLE_REGISTRY
环境变量。
docker run -d --restart always --name registry -p 5000:5000 registry:2
docker pull hello-world:linux
docker pull fussybeaver/uhttpd
docker pull alpine
docker tag hello-world:linux localhost:5000/hello-world:linux
docker tag fussybeaver/uhttpd localhost:5000/fussybeaver/uhttpd
docker tag alpine localhost:5000/alpine
docker push localhost:5000/hello-world:linux
docker push localhost:5000/fussybeaver/uhttpd
docker push localhost:5000/alpine
docker swarm init
REGISTRY_HTTP_ADDR=localhost:5000 cargo test -- --test-threads 1
许可证:Apache-2.0
依赖项
~10–22MB
~347K SLoC