19个版本
0.16.1 | 2024年5月1日 |
---|---|
0.15.7 | 2023年12月29日 |
0.15.4 | 2023年10月11日 |
0.15.0 | 2023年5月22日 |
0.14.3 | 2023年3月15日 |
#191 in 网络编程
每月266次下载
用于 7 crate
450KB
7.5K SLoC
Bollard:用于Docker API的异步Rust客户端库
Bollard利用最新的Hyper和Tokio改进,提供包含future、stream和async/await模式的异步API。
此库通过命名管道支持Windows,并通过可选的Rustls绑定支持HTTPS。通过OpenAPI、protobuf和上游文档生成与Docker和Buildkit交互的序列化类型。
安装
将以下内容添加到您的Cargo.toml
文件中
[dependencies]
bollard = "*"
API
文档
最新版本
版本 0.16
启用了更多的 buildkit
功能,包括使用Registry作为中间容器构建阶段的缓存存储,与moby版本25.0.3和API版本1.44.0同步。请注意:所有 buildkit
API都在 开发者预览 阶段,欢迎提供反馈。
功能标志
ssl
:通过Rustls启用SSL支持chrono
:为DateTime
类型启用Chronotime
:为DateTime
类型启用Time 0.3buildkit
:在构建镜像时使用Buildkit而不是Dockerjson_data_content
:在序列化失败时添加JSON到错误中webpki
:使用Mozilla的根证书,而不是操作系统提供的本地根证书。
版本
Bollard使用的Docker API采用最新版本1.44
的文档方案,由moby项目发布,以生成其序列化接口。
Bollard的破坏性变更发布将取决于与该发布日期对应的moby API服务器版本,例如,1月份的小版本更改将使用1月份可用的匹配moby swagger API。相关的bollard-stubs
项目将发布单独的版本,您可以针对这些版本进行项目锁定,如果您需要根据您的Docker服务器版本使用更现代或更旧的API。
例如
[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_next::Docker;
#[cfg(unix)]
Docker::connect_with_socket_defaults();
使用Docker::connect_with_socket
方法API来参数化此接口。
本地
客户端将连接到为其编译的特定于操作系统的处理程序。
这对于应运行在多个操作系统上的localhost环境是一个便利。
use bollard_next::Docker;
Docker::connect_with_local_defaults();
使用Docker::connect_with_local
方法API来参数化此接口。
HTTP
客户端将连接到由DOCKER_HOST
环境变量指向的位置,如果不存在,则为localhost:2375
。
use bollard_next::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_next::Docker;
#[cfg(feature = "ssl")]
Docker::connect_with_ssl_defaults();
使用Docker::connect_with_ssl
方法API来参数化接口。
示例
注意:所有这些示例都需要Tokio运行时。
版本
首先,检查API是否与您的服务器一起工作
use bollard_next::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_next::Docker;
use bollard_next::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_next::Docker;
use bollard_next::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-23MB
~356K SLoC