1个不稳定版本
0.14.0 | 2023年6月9日 |
---|
#10 在 #named-pipe
280KB
4K 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.14
启用了针对使用公共镜像的构建的buildkit
功能(有关如何配置的详细信息,请参阅buildkit示例)。
功能标志
ssl
:通过Rustls启用SSL支持chrono
:为DateTime
类型启用Chronotime
:为DateTime
类型启用Time 0.3buildkit
:在构建镜像时使用Buildkit而不是Dockerjson_data_content
:在序列化失败时向错误添加JSONct_logs
:证书透明度验证(需要ssl
)
版本
Bollard使用的Docker API是使用moby项目发布的最新1.41
文档架构来生成其序列化接口。
这个库也支持版本协商,允许降级到较旧的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
依赖项
~11–24MB
~387K SLoC