#json-format #dockerfile #yaml #docker-build #generator #json #generate-json

构建 dofigen

使用 YAML 或 JSON 格式简化描述创建 Dockerfile 的 Dockerfile 生成器

18 个版本 (8 个稳定版)

2.0.0-beta.11 2024 年 8 月 21 日
2.0.0-beta.62024 年 7 月 10 日
2.0.0-beta.32024 年 6 月 26 日
1.4.1 2024 年 6 月 24 日
0.0.0 2022 年 9 月 14 日

#46构建工具

Download history 15/week @ 2024-05-03 221/week @ 2024-05-10 41/week @ 2024-05-17 9/week @ 2024-05-24 5/week @ 2024-05-31 7/week @ 2024-06-07 6/week @ 2024-06-14 378/week @ 2024-06-21 147/week @ 2024-06-28 248/week @ 2024-07-05 30/week @ 2024-07-12 1/week @ 2024-07-19 104/week @ 2024-07-26 17/week @ 2024-08-02 151/week @ 2024-08-16

272 每月下载次数
lenra_cli 中使用

MIT 许可证

230KB
5.5K SLoC

Contributors Forks Stargazers Issues MIT License Crates.io

Dofigen

Dofigen 是一个使用 YAML 或 JSON 格式简化描述创建 Dockerfile 的 Dockerfile 生成器。它定义了默认值和行为,简化了 Dockerfile 的创建。

Dofigen 还旨在使用 Buildkit 优化,通过并行化层构建来加速 Docker 镜像构建。在添加文件时使用 --link 选项,在运行脚本时(当定义 caches 属性时)使用 --mount=type=cache 选项。您可以使用以下命令使用 Buildkit:

docker buildx build --cache-to=type=local,dest=.dockercache --cache-from=type=local,src=.dockercache -t my-app:latest --load .

一位法国 DevOps 对其的评价

这是一个在充满...内容的世界上的一股清流,Dofigen。

报告错误 · 请求功能

入门指南

先决条件

使用以下任一选项安装 Dofigen。

Cargo 安装

首先安装 Cargo,Rust 软件包管理器: https://doc.rust-lang.net.cn/cargo/getting-started/installation.html

然后使用以下命令安装 dofigen

cargo install dofigen -F cli -F permissive

下载二进制文件

您可以从 发行页面 下载 Dofigen 二进制文件,并将其添加到您的路径环境变量中。

与 Docker 一起使用

您可以使用以下命令直接从其 Docker 镜像运行 Dofigen

docker run --rm -it -v $(pwd):/app lenra/dofigen

(返回顶部)

如何使用它

要生成Dockerfile,您需要创建一个Dofigen文件 dofigen.yml 并运行以下命令

dofigen gen

使用帮助选项了解如何覆盖默认行为

$ dofigen gen --help
Generate the Dockerfile and .dockerignore files

Usage: dofigen generate [OPTIONS]

Options:
  -f, --file <FILE>      The input file Dofigen file. Default search for the next files: dofigen.yml, dofigen.yaml, dofigen.json Define to - to read from stdin
  -o, --output <OUTPUT>  The output Dockerfile file Define to - to write to stdout [default: Dockerfile]
  -h, --help             Print help

要了解更多信息,请使用帮助命令

dofigen --help

镜像描述符

镜像描述符的结构设计得比Dockerfile更简单。

以下是一个生成Dofigen Dockerfile的示例

---
builders:
- name: builder
  from: ekidd/rust-musl-builder
  add:
  - "."
  run:
  # Build with musl to work with scratch
  - cargo build --release --target=x86_64-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/x86_64-unknown-linux-musl/release/dofigen ../
  cache:
  # Cargo cache
  - /home/rust/.cargo
  # build cache
  - /home/rust/src/target
from: scratch
workdir: /app
artifacts:
- builder: builder
  source: "/home/rust/dofigen"
  target: "/bin/"
entrypoint: 
- /bin/dofigen
cmd:
- --help
context:
- "/dofigen"
- "/dofigen_lib"
- "/Cargo.*"

镜像

镜像是其主要元素。它定义了Dockerfile的运行阶段

字段 别名 类型 描述
from image String? FROM Docker镜像
user String? 运行时用户(默认 1000
workdir String? 运行时工作目录
env envs Map<String, String>? 运行时环境变量
artifacts Artifact[]? 定义从构建器复制的工件
add adds String[]? 在构建时添加到工作目录的元素路径
root Root? 使用 root 用户执行的操作
run script String[]? 要执行的脚本命令
bind binds Bind[]? run 期间进行文件系统绑定
cache caches String[]? script 执行期间缓存的镜像阶段的路径。请注意,缓存的目录在脚本执行后不存在
builders Builder[]? 在运行阶段之前执行且不在最终Docker镜像中的构建阶段。主要用于生成工件
expose ports int[]? Docker镜像暴露的端口号列表
healthcheck Healthcheck? Docker镜像健康检查定义。
entrypoint String[]? Docker镜像 ENTRYPOINT 部分
cmd String[]? Docker镜像 CMD 部分
context String[]? 要包含在Docker构建上下文中的元素路径。它们用于生成 .dockerignore 文件
ignore ignores String[]? 生成 .dockerignore 文件的路径

Builder

构建器是在运行阶段之前执行且不在最终Docker镜像中的阶段。主要用于生成工件

字段 别名 类型 描述
name String? 构建器名称。如果没有定义,将使用以下模式定义一个名称:builder-<位置 in 构建器列表的起始位置 0>
from image String? 构建器的 FROM Docker镜像
user String? 构建器用户
workdir String? 构建器工作目录
env envs Map<String, String>? 构建器环境变量
artifacts Artifact[]? 定义从先前构建器复制的工件
add adds String[]? 在构建时添加到工作目录的元素路径
root Root? 使用 root 用户执行的操作
run script String[]? 要执行的脚本命令
bind binds Bind[]? run 期间进行文件系统绑定
cache caches String[]? script 执行期间缓存的镜像阶段的路径。请注意,缓存的目录在脚本执行后不存在

Artifact

工件是从先前的构建复制到当前阶段的元素

字段 别名 类型 描述
builder String 将从其中复制工件构建器的名称
source String 给定构建器中工件的来源
target 目标 String 当前阶段的目标路径

Bind

Bind 允许在运行期间从主机、构建器或镜像绑定文件或目录到阶段

字段 别名 类型 描述
from String? 源根的构建阶段或镜像名称。默认为构建上下文
source String? from 中的源路径。默认为 from 的根目录
target String 当前阶段的目标路径
readwrite bool? 允许在挂载上进行写入。写入的数据将被丢弃

有关更多信息,请参阅 https://docs.docker.net.cn/reference/dockerfile/#run---mounttypebind

Root

使用 root 用户执行的操作

字段 别名 类型 描述
run script String[]? 要执行的脚本命令
bind binds Bind[]? run 期间进行文件系统绑定
cache caches String[]? script 执行期间缓存的镜像阶段的路径。请注意,缓存的目录在脚本执行后不存在

Healthcheck

Docker镜像的健康检查定义。它定义了何时容器不健康

字段 别名 类型 描述
cmd String 执行以检查容器健康的命令
间隔 String? 命令执行间隔(默认 30s
超时 String? 命令执行超时(默认 30s
开始 String? 在容器启动时开始命令执行前的持续时间(默认 0s
重试 int? 在将容器定义为不健康之前重试的次数(默认 3

(返回顶部)

贡献

贡献使开源社区成为一个如此令人惊叹的学习、灵感和创造的地方。您所做出的任何贡献都将被强烈赞赏。

如果您有任何改进的建议,请打开带有“enhancement”或“bug”标签的问题。别忘了给项目加星!再次感谢!

测试

要运行测试,请使用以下命令

cargo test --all-features

生成JSON模式

要生成Dofigen文件结构的JSON模式,请使用以下命令

cargo run -F cli -F json_schema -- schema

(返回顶部)

许可

在MIT许可下分发。有关更多信息,请参阅LICENSE

(返回顶部)

联系方式

Lenra - @lenra_dev - [email protected]

项目链接:https://github.com/lenra-io/dofigen

(返回顶部)

依赖项

~8–26MB
~380K SLoC