#docker #api-version #buildkit #http-api #bollard #future #async

bollard-next

异步Docker守护进程API

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 网络编程

Download history 1268/week @ 2024-04-24 1361/week @ 2024-05-01 930/week @ 2024-05-08 1150/week @ 2024-05-15 786/week @ 2024-05-22 105/week @ 2024-05-29 405/week @ 2024-06-05 41/week @ 2024-06-12 41/week @ 2024-06-19 30/week @ 2024-06-26 173/week @ 2024-07-03 72/week @ 2024-07-10 49/week @ 2024-07-17 38/week @ 2024-07-24 94/week @ 2024-07-31 73/week @ 2024-08-07

每月266次下载
用于 7 crate

Apache-2.0

450KB
7.5K SLoC

crates.io license circle-ci appveyor docs

Bollard:用于Docker API的异步Rust客户端库

Bollard利用最新的HyperTokio改进,提供包含future、stream和async/await模式的异步API。

此库通过命名管道支持Windows,并通过可选的Rustls绑定支持HTTPS。通过OpenAPI、protobuf和上游文档生成与DockerBuildkit交互的序列化类型。

安装

将以下内容添加到您的Cargo.toml文件中

[dependencies]
bollard = "*"

API

文档

API文档.

最新版本

版本 0.16 启用了更多的 buildkit 功能,包括使用Registry作为中间容器构建阶段的缓存存储,与moby版本25.0.3API版本1.44.0同步。请注意:所有 buildkit API都在 开发者预览 阶段,欢迎提供反馈。

功能标志

  • ssl:通过Rustls启用SSL支持
  • chrono:为DateTime类型启用Chrono
  • time:为DateTime类型启用Time 0.3
  • buildkit:在构建镜像时使用Buildkit而不是Docker
  • json_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