#docker #api-version #named-pipe #json-error #pangu #pangu-studio

pangu-bollard

异步Docker守护进程API

1个不稳定版本

0.14.0 2023年6月9日

#10#named-pipe

Apache-2.0

280KB
4K 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.14 启用了针对使用公共镜像的构建的buildkit功能(有关如何配置的详细信息,请参阅buildkit示例)。

功能标志

  • ssl:通过Rustls启用SSL支持
  • chrono:为DateTime类型启用Chrono
  • time:为DateTime类型启用Time 0.3
  • buildkit:在构建镜像时使用Buildkit而不是Docker
  • json_data_content:在序列化失败时向错误添加JSON
  • ct_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