buildkit 是下一代 docker 构建组件,拥有众多特性:
BuildKit的build输出:
BuildKit构建基于一种称为 LLB 的二进制中间格式,该格式用于为构建流程定义依赖关系图,依赖 LLB 的优点,它为构建流程提供强大的特性:
注意:为了支持此语法,需在 dockerfile 文件加入以下内容
# syntax=docker/dockerfile:1.2
RUN --mount 允许您创建 mount,该 mount 作为构建期间可以访问的一部分。该特性可用于从构建的其他部分绑定文件,而无需复制、访问构建 secrets 或 ssh-agent 套接字,或者创建缓存位置从而加速构建。 支持以下语法:
选项 | 描述 |
---|---|
target (required) | 挂载路径. |
source | 源路径基于from. 默认是from的根路径. |
from | 指定挂载的源头,可以是构建阶段名称或者镜像名称. 默认为构建上下文. |
rw,readwrite | 读写模式,数据将会被丢弃. |
Option | Description |
---|---|
id | 可选 区分不同的缓存 |
target (required) | 挂载路径. |
ro,readonly | 是否只读. |
sharing | shared, private, locked三者其一. 默认shared. shared 缓存挂载可以被多个写入器同时使用. private 如果有多个写入,则创建一个新的挂载. locked 暂停第二个写入器,直到第一个写入器释放mount. |
from | 作为缓存挂载的基础的构建阶段名称。默认为空目录 |
source | 将要挂载的from的子路径. 默认是from的根路径. |
mode | 新缓存目录的文件模式. 默认0755. |
uid | 新缓存目录的用户ID. 默认为0. |
gid | 新缓存目录的组ID. 默认为0. |
Option | Description |
---|---|
target (required) | 挂载路径. |
Option | Description |
---|---|
id | secret的id. 默认为target path的basename. |
target | 挂载路径. 默认/run/secrets/ + id. |
required | 如果设置为true,当secret不可用时,指令会出错。默认为false. |
mode | 文件的模式. 默认为0400. |
uid | UID. 默认 0. |
gid | Group ID. 默认 0. |
Option | Description |
---|---|
id | SSH代理套接字或密钥ID. 默认为"default". |
target | SSH代理套接字路径. 默认为/run/buildkit/ssh_agent.${N}. |
required | 如果设置为true,当secret不可用时,指令会出错。默认为false. |
mode | 套接字文件模式. 默认0600. |
uid | socket的用户ID. 默认0. |
gid | socket的组ID. 默认0. |
注意: 使用此语法需要在dockerfile加入以下内容:
#syntax=docker/dockerfile:1.2-labs
使用--security=insecure,构建器可以在非安全模式下运行非沙盒的命令,再运行需要特权的工作流中是需要的(例如containerd)。作用类似于docker run --privileged
。为了启用此特性,security.insecure
应该开启,即在buildkitd启动时开启(--allow-unsecure-entitlement security.insecure)和(--allow security.insecure)选项。
默认的sandbox模式可以通过 --security=sandbox开启,但这是没什么作用的。
注意: 使用此语法需要在dockerfile加入以下内容:
#syntax=docker/dockerfile:1.2-labs
此指令主要为了构建运行命令时指定不同的网络模式。
自 docker 18.06 起,BuildKit 就被集成到 docker build 中,设置 docker BUILDKIT=1 环境变量即可轻松开启。
参考文档:
- END -