Dofigen
Dofigen is a Dockerfile generator using a simplified description in YAML or JSON format. It defines default values and behaviors that simplify the creation of Dockerfiles.
Dofigen is also made to use the Buildkit, which is now the default Docker build engine, optimizations that speed-up the Docker image build by parallelizing the layer builds.
A french DevOps said about it:
C'est une bouffée, Dofigen, dans ce monde de con...teneurs.
Getting Started
Prerequisites
Install Dofigen using one of the following options.
Use it with Docker
You can run Dofigen directly from its Docker image with the following command:
Arch Linux
dofigen is available as an AUR package.
You can install it using an AUR helper (e.g. paru):
Cargo
First install Cargo, the Rust package manager: https://doc.rust-lang.org/cargo/getting-started/installation.html
Then use the following command to install dofigen:
Homebrew
You can install Dofigen using Homebrew:
Or:
Download the binary
You can download the Dofigen binary from the release page and add it to your path environment variable.
How to use it
To generate a Dockerfile, you need to create a Dofigen file dofigen.yml and run the next command:
Use the help options to understand how to override default behaviors:
To look further use the help command:
Dofigen descriptor
The structure of the Dofigen descriptor was created to be simpler than the Dockerfile.
The JSON Schema of the Dofigen descriptor is available here.
Here is an example to generate the Dofigen Dockerfile:
builders:
muslrust:
fromImage: clux/muslrust:stable
workdir: /app
bind:
- Cargo.toml
- Cargo.lock
- src/
run:
# Build with musl to work with scratch
- cargo build --release
# copy the generated binary outside of the target directory. If not the other stages won't be able to find it since it's in a cache volume
- mv target/x86_64-unknown-linux-musl/release/dofigen /tmp/
cache:
# Cargo cache
- /home/rust/.cargo
# build cache
- /app/target
# Runtime
workdir: /app
copy:
- fromBuilder: muslrust
paths: "/tmp/dofigen"
target: "/bin/"
entrypoint: dofigen
cmd: --help
context:
- "/src"
- "/Cargo.*"
Extending external files
You can extend the Dofigen file with external files using the extend attribute.
You can find some Dofigen templates on the Dofigen Hub repository.
Here is an example of extending a Dofigen file:
extend:
- https://raw.githubusercontent.com/lenra-io/dofigen/main/dofigen.yml
You can also override or merge the structure of the extended files:
extend:
- https://raw.githubusercontent.com/lenra-io/dofigen/main/dofigen.yml
user: 1001
The lock file
Dofigen generates a lock file to keep the version of the Dofigen descriptor used to generate the Dockerfile.
The lock file also keep the loaded resources and images tags to rebuild the Dockerfile with the same versions.
To update the images and resources, you can use the dofigen update command.
To regenerate the Dockerfile with the same versions, you can use the dofigen gen --locked command.
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please open an issue with the tag "enhancement" or "bug". Don't forget to give the project a star! Thanks again!
Tests
To run the tests, use the following command:
Test coverage
To generate the test coverage, use the following commands:
# Generate the coverage report
RUSTFLAGS="-C instrument-coverage" \
RUSTDOCFLAGS="-C instrument-coverage" \
LLVM_PROFILE_FILE="target/coverage/profiles/cargo-test-%p-%m.profraw" \
# Convert to lcov format
# Generate the HTML report
Generate the JSON Schema
To generate the JSON schema of the Dofigen file structure, use the following command:
License
Distributed under the MIT License. See LICENSE for more information.
Contact
Lenra - @lenra_dev - contact@lenra.io
Project Link: https://github.com/lenra-io/dofigen