Dofigen is a Dockerfile generator using a simplified description in YAML or JSON format. It defines default values and behaviors that makes the creation of Dockerfiles simplier.
A french DevOps said about it:
C'est une bouffée Dofigen dans ce monde de con...teneurs.
Install Dofigen using one of the next possibilities.
First install Cargo, the Rust package manager: https://doc.rust-lang.org/cargo/getting-started/installation.html
Then use the next command to install dofigen:
bash
cargo install dofigen
You can download the Dofigen binary from the release page and add it to your path environment variable.
You can run Dofigen directly from it Docker image with the next command:
bash
docker run --rm -it -v $(pwd):/app lenra/dofigen
Use the help options to understand how to use it:
```bash $ dofigen --help dofigen 0.0.0 Dofigen is a Dockerfile generator using a simplyfied description in YAML or JSON format
USAGE: dofigen [OPTIONS] [INPUT_FILE]
ARGS:
OPTIONS:
-d, --dockerfile
The image descriptor structure has been created to be simplier than the Dockerfile's one.
Here is an example to generate the Dofigen Dockerfile:
builders: - name: builder image: ekidd/rust-musl-builder adds: - "." script: # Build with musl to work with scratch - cargo build --release --target=x8664-unknown-linux-musl # 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/x8664-unknown-linux-musl/release/dofigen ../ caches: # Cargo cache - /home/rust/.cargo # build cache - /home/rust/src/target image: scratch workdir: /app artifacts: - builder: builder source: "/home/rust/dofigen" destination: "/bin/" entrypoint: - /bin/dofigen cmd: - --help ignores: - "*" - "!/dofigen" - "!/dofigen_lib" - "!/Cargo." ```
The image is the main element. It defines the runtime stage of the Dockerfile:
| Field | Type | Description |
|------------------|------------------|-------------------------------|
| image
| String? | The FROM
Docker image |
| user
| String? | The runtime user (default 1000
) |
| workdir
| String? | The runtime work directory |
| envs
| Mapartifacts
| Artifact[]? | Defines artifacts to copy from builders |
| adds
| String[]? | Paths of elements to add at build time to the workdir |
| root
| Root? | Actions made using the root
user |
| script
| String[]? | Script commands to execute |
| caches
| String[]? | Paths in the image stage to cache during the script
execution |
| builders
| Builder[]? | Build stages executed before the runtime stage and not in the final Docker image. Mostly to generate artifacts |
| ports
| int[]? | The list of exposed ports of the Docker image |
| healthcheck
| Healthcheck? | The Docker image healthcheck definition. |
| entrypoint
| String[]? | The Docker image ENTRYPOINT
parts |
| cmd
| String[]? | The Docker image CMD
parts |
| ignores
| String[]? | Paths to generate the .dockerignore
file |
The builders are stages executed before the runtime stage and not in the final Docker image. Mostly to generate artifacts :
| Field | Type | Description |
|------------------|------------------|-------------------------------|
| name
| String? | The builder name. If not defined, a name is defined with the given pattern: builder-<position in the builders list starting at 0>
|
| image
| String? | The FROM
Docker image of the builder |
| user
| String? | The builder user |
| workdir
| String? | The builder work directory |
| envs
| Mapartifacts
| Artifact[]? | Defines artifacts to copy from previous builders |
| adds
| String[]? | Paths of elements to add at build time to the workdir |
| root
| Root? | Actions made using the root
user |
| script
| String[]? | Script commands to execute |
| caches
| String[]? | Paths in the image stage to cache during the script
execution |
Artifacts are element copied from a previous build to the current stage :
| Field | Type | Description |
|------------------|------------------|-------------------------------|
| builder
| String | The builder name from which the artifact will be copied |
| source
| String | The source of the artifact in the given builder |
| destination
| String | The destination path in the current stage |
Actions made using the root
user :
| Field | Type | Description |
|------------------|------------------|-------------------------------|
| script
| String[]? | Script commands to execute |
| caches
| String[]? | Paths in the image stage to cache during the script
execution |
The Docker image's healthcheck definition. It defines when the container is not healthy :
| Field | Type | Description |
|------------------|------------------|-------------------------------|
| cmd
| String | The command executed to check the container health |
| interval
| String? | The command execution interval (default 30s
) |
| timeout
| String? | The command execution timeout (default 30s
) |
| start
| String? | The duration before starting the commmand execution at container start (default 0s
) |
| retries
| int? | The number of retries before defining the container as unhealthy (default 3
) |
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!
Distributed under the MIT License. See LICENSE for more information.
Lenra - @lenra_dev - contact@lenra.io
Project Link: https://github.com/lenra-io/dofigen