18 个版本 (8 个稳定版)
新 2.0.0-beta.11 | 2024 年 8 月 21 日 |
---|---|
2.0.0-beta.6 | 2024 年 7 月 10 日 |
2.0.0-beta.3 | 2024 年 6 月 26 日 |
1.4.1 | 2024 年 6 月 24 日 |
0.0.0 | 2022 年 9 月 14 日 |
#46 在 构建工具
272 每月下载次数
在 lenra_cli 中使用
230KB
5.5K SLoC
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