dockerfile_builder

Crates.iodockerfile_builder
lib.rsdockerfile_builder
version
sourcesrc
created_at2023-07-15 20:32:17.35876+00
updated_at2025-03-11 01:14:35.537523+00
descriptionFlexible Dockerfile builder with type-safe features
homepage
repositoryhttps://github.com/simp4t7/dockerfile-builder/
max_upload_size
id917406
Cargo.toml error:TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
(simp4t7)

documentation

README

Documentation Crates.io Crates.io

This library provides a convenient way to programmatically generate Dockerfiles using Rust.

Dockerfiles instructions can be generated using structured and type-safe interfaces, or they can be added flexibly in raw form.

Quickstart

[dependencies]
dockerfile_builder = "0.1.4"
use dockerfile_builder::Dockerfile;
use dockerfile_builder::instruction::{RUN, EXPOSE};

fn main() {
    let dockerfile = Dockerfile::default()
        .push(RUN::from("echo $HOME"))
        .push(EXPOSE::from("80/tcp"))
        .push_any("# Just adding a comment");
    
    let expected = r#"RUN echo $HOME
EXPOSE 80/tcp
# Just adding a comment"#;

    assert_eq!(
        dockerfile.to_string(),
        expected
    );
}

Type-safe support

Dockerfile instructions can be created from a string or with instruction builders. Instruction builders provide structured and type-safe interfaces to build instructions.

use dockerfile_builder::Dockerfile;
use dockerfile_builder::instruction::EXPOSE;
use dockerfile_builder::instruction_builder::ExposeBuilder;

fn main() -> eyre::Result<()> {
    let expose = EXPOSE::from("80/tcp");
    
    let expose_from_builder = ExposeBuilder::builder()
        .port(80)
        .protocol("tcp")
        .build()?;
    
    assert_eq!(expose, expose_from_builder);
    
    let dockerfile = Dockerfile::default()
        .push(expose_from_builder);
      
    assert_eq!(
        dockerfile.to_string(), 
        "EXPOSE 80/tcp"
    );

    Ok(())
}
Commit count: 0

cargo fmt