19 个版本

0.0.60 2021年6月23日
0.0.59 2021年6月17日
0.0.58 2019年11月17日
0.0.53 2019年9月13日
0.0.49 2019年1月31日

#600开发工具 中排名

Download history 7/week @ 2024-03-15 40/week @ 2024-03-29 8/week @ 2024-04-05 3/week @ 2024-04-12 5/week @ 2024-04-19 1/week @ 2024-05-03 6/week @ 2024-05-10 19/week @ 2024-05-17 65/week @ 2024-05-24 71/week @ 2024-05-31 87/week @ 2024-06-07 63/week @ 2024-06-14 31/week @ 2024-06-21 26/week @ 2024-06-28

每月221 次下载

Apache-2.0

63KB
1.5K SLoC

这是一个分支

由于原始仓库似乎不再维护,这个 crate 和仓库是从 https://github.com/ghmlee/rust-docker 分支出来的。

因此,我会尽量保持这个 crate 的向后兼容性。

欢迎提出问题和 PR。

Docker

Build Status

这是一个 Rust 的 Docker 远程 API 绑定。文档可以在 这里 查看。

快速开始

[dependencies]
rs-docker = "0.0.58"
extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };
}

调试

  • Rust (>= v1.4.0)
  • Docker (>= v1.5.0)

示例

网络

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };

    let networks = match docker.get_networks() {
        Ok(networks) => networks,
        Err(e) => { panic!("{}", e); }
    };
}

容器

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };

    let containers = match docker.get_containers(false) {
        Ok(containers) => containers,
        Err(e) => { panic!("{}", e); }
    };
}

状态

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };

    let containers = match docker.get_containers(false) {
        Ok(containers) => containers,
        Err(e) => { panic!("{}", e); }
    };

    let stats = match docker.get_stats(&containers[0]) {
        Ok(stats) => stats,
        Err(e) => { panic!("{}", e); }
    };
}

镜像

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };

    let images = match docker.get_images(false) {
        Ok(images) => images,
        Err(e) => { panic!({}, e); }
    };
}

信息

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };

    let info = match docker.get_system_info() {
        Ok(info) => info,
        Err(e) => { panic!("{}", e); }
    };
}

进程

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };

    let containers = match docker.get_containers(false) {
        Ok(containers) => containers,
        Err(e) => { panic!("{}", e); }
    };

    let processes = match docker.get_processes(&containers[0]) {
        Ok(processes) => processes,
        Err(e) => { panic!("{}", e); }
    };
}

文件系统更改

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };

    let containers = match docker.get_containers(false) {
        Ok(containers) => containers,
        Err(e) => { panic!("{}", e); }
    };

    let changes = match docker.get_filesystem_changes(&containers[0]) {
        Ok(changes) => changes,
        Err(e) => { panic!("{}", e); }
    };
}

导出容器

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };

    let containers = match docker.get_containers(false) {
        Ok(containers) => containers,
        Err(e) => { panic!("{}", e); }
    };

    let bytes = match docker.export_container(&containers[0]) {
        Ok(bytes) => bytes,
        Err(e) => { panic!("{}", e); }
    };
}

创建镜像

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };

    let image = "debian".to_string();
    let tag = "latest".to_string();
    
    let statuses = match docker.create_image(image, tag) {
        Ok(statuses) => statuses,
        Err(e) => { panic!("{}", e); }
    };
    
    match statuses.last() {
        Some(last) => {
            println!("{}", last.clone().status.unwrap());
        }
        None => { println!("none"); }
    }
}

ping Docker 服务器

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };
    
    let ping = match docker.ping() {
        Ok(ping) => ping,
        Err(e) => { panic!("{}", e); }
    };
}

显示 Docker 版本信息

extern crate rs_docker;

use rs_docker::Docker;

fn main() {
    let mut docker = match Docker::connect("unix:///var/run/docker.sock") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };
    
    let version = match docker.get_version() {
        Ok(version) => version,
        Err(e) => {panic!("{}",e)}
    };
}

Docker Toolbox

默认情况下,Docker Toolbox 会以 TLS 启用的方式运行 docker。它会自动生成证书。一旦 VM 启动,docker-machine 会将它们复制到主机机器上的 ~/.docker/machine/certs

示例

extern crate rs_docker;

use rs_docker::Docker;
use std::path::Path;

fn main() {
    let key = Path::new("/Users/<username>/.docker/machine/certs/key.pem");
    let cert = Path::new("/Users/<username>/.docker/machine/certs/cert.pem");
    let ca = Path::new("/Users/<username>/.docker/machine/certs/ca.pem");

    let mut docker = match Docker::connect("tcp://192.168.99.100:2376") {
    	Ok(docker) => docker,
        Err(e) => { panic!("{}", e); }
    };
    docker.set_tls(&key, &cert, &ca).unwrap();
}

贡献

为了拥有一个一致的开发环境,可以使用 /devenv 中的 docker 镜像,如下所示

  1. gitclone https://gitlab.com/kblobr/rust-docker
  2. cdrust-docker/devenv
  3. ./build_docker (这假设你的用户可以运行 docker 命令,否则 sudo)
  4. ./run_docker -ti
  5. 已经进入容器
  6. cd Code
  7. cargotest

对于更改

  1. 分叉它
  2. 创建你的一个新远程上游仓库 (git remote add upstream https://gitlab.com/kblobr/rust-docker)
  3. 提交你的更改 (git commit -m 'Adds some feature')
  4. 推送到分支(git push origin your-branch
  5. 创建新的拉取请求

依赖项

~5–18MB
~189K SLoC