15 个版本

0.2.3 2023 年 6 月 15 日
0.2.2 2023 年 6 月 3 日
0.2.1 2023 年 2 月 26 日
0.1.3 2022 年 4 月 23 日

#191测试


3 代码包 中使用

MIT 许可证

36KB
834

contain-rs

一个用于使用 Rust 操作 docker 和 podman 容器的工具。

有关使用方法,请参阅 文档

基本使用

use contain_rs::{Docker, Client, Handle, Container, Image};
use std::str::FromStr;

let podman = Docker::new();

let container = Container::from_image(Image::from_str("docker.io/library/nginx").unwrap());

let handle = podman.create(container);

handle.run();
handle.wait();

// when the handle gets out of scope the container is stopped and removed

客户端

客户端用于调度容器。目前有两种实现可供选择。其中一种与 docker 兼容,另一种使用 podman。

镜像

容器需要镜像才能运行。你可以这样创建镜像

use contain_rs::Image;
use std::str::FromStr;

let image = Image::from_str("docker.io/library/nginx");

assert!(image.is_ok());

let latest = Image::from_str("docker.io/library/nginx:latest");

assert!(latest.is_ok());

Contain-rs 提供了一个 derive 宏,用于为 struct 实现 IntoContainer 特性。必须启用宏功能才能使用 derive 宏。

然后你可以这样创建容器

use contain_rs::*;

#[derive(ContainerImpl, Default)]
#[container(
    image = "docker.io/library/nginx",
    health_check_command = "curl https://127.0.0.1 || exit 1"
)]
struct Nginx {
    #[contain_rs(port = 80)]
    port: u32,
}

let client = Docker::default();

let nginx = client.create(Nginx{ port: 8080 });

nginx.run();
nginx.wait();
nginx.rm(); // stops and removes the container
// this would be done automatically when the container handle goes out of scope

依赖

~3–13MB
~140K SLoC