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

Download history 68501/week @ 2024-05-04 65274/week @ 2024-05-11 64681/week @ 2024-05-18 61176/week @ 2024-05-25 63251/week @ 2024-06-01 63496/week @ 2024-06-08 70073/week @ 2024-06-15 73307/week @ 2024-06-22 68873/week @ 2024-06-29 83408/week @ 2024-07-06 84646/week @ 2024-07-13 83388/week @ 2024-07-20 82634/week @ 2024-07-27 73611/week @ 2024-08-03 75145/week @ 2024-08-10 65995/week @ 2024-08-17

每月下载量 310,862
用于 161 项目(直接使用 83 个)

Apache-2.0 协议

1MB
14K SLoC

crates.io license circle-ci appveyor docs

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

Bollard 利用最新的 HyperTokio 改进,提供了包含 futures、streams 和 async/await 语言的异步 API。

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

安装

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

[dependencies]
bollard = "*"

API

文档

API 文档.

最新

版本 0.17 启用了 secretssshforward 组件,这些组件是 buildkit 的组成部分,API 版本 1.45.0 - (在 Windows 上禁用)。请注意:所有 buildkit API 都处于 开发者预览 状态,欢迎提供反馈。

功能标志

  • ssl:通过 Rustlsring 提供商启用 SSL 支持。
  • aws-lc-rs:通过 Rustlsaws-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