#docker #instructions #dynamically #generate #docker-build #container #forms

dockerfile

一个用于动态生成 Dockerfile 的 Rust 库

4 个版本

0.2.1 2018 年 12 月 10 日
0.2.0 2018 年 12 月 9 日
0.1.1 2018 年 12 月 9 日
0.1.0 2018 年 12 月 9 日

#1322开发工具

Download history 891/week @ 2024-03-13 981/week @ 2024-03-20 910/week @ 2024-03-27 977/week @ 2024-04-03 474/week @ 2024-04-10 165/week @ 2024-04-17 164/week @ 2024-04-24 165/week @ 2024-05-01 401/week @ 2024-05-08 175/week @ 2024-05-15 189/week @ 2024-05-22 175/week @ 2024-05-29 328/week @ 2024-06-05 251/week @ 2024-06-12 224/week @ 2024-06-19 103/week @ 2024-06-26

931 每月下载量
pwnenv 中使用

Apache-2.0

31KB
688

dockerfile

Build Status Crates.io docs.rs License Crates.io Crates.io

一个用于动态生成 Dockerfile 的 Rust 库。

这个crate最初是为构建运行在Kubernetes中的客户端工作负载的工作服务Docker镜像而构建的。这绝对不是唯一支持的模式。生成的Dockerfile可以保存到某处或在使用后立即丢弃。生成的容器是标准容器,根据您生成的Dockerfile构建。

截至2018年12月9日,所有Dockerfile指令都支持原始形式。已有一个问题正在开放中,为需要它的指令添加更结构化和类型安全的接口。

开始使用

首先,您需要将其添加到您的 Cargo.toml 依赖项中。

dockerfile = "0.2"

现在您可以开始构建Dockerfile了。

use dockerfile::{
    Dockerfile,
    Arg,
    Copy,
    Cmd,
};

fn main() {
    // Build up a new Dockerfile.
    let dockerfile = Dockerfile::base("rust:${RUST_VERSION}-slim")
        .push_initial_arg(Arg::new("RUST_VERSION=1.31"))
        .push(Copy::new("/static ./static"))
        .push(Cmd::new("echo 'Hello. Goodbye.'"))
        .finish();

    // Write it out as a string.
    let output = dockerfile.to_string();
    assert_eq!(output,
r##"ARG RUST_VERSION=1.31
FROM rust:${RUST_VERSION}-slim
COPY /static ./static
CMD echo 'Hello. Goodbye.'
"##)
}

开发

我希望这个crate提供构建各种Dockerfile指令的类型安全接口。这将有助于减少只有在尝试实际调用docker build时才能发现的错误。我想尝试添加各种形式指令的构造函数;例如,提供一个接受 CMD 的构造函数,该构造函数接受 impl Iterator<Item=AsRef<str>> 以构建形式 CMD ["arg0", "arg1"] 等。

无运行时依赖

功能