BuildKit是Docker官方社区推出的下一代镜像构建神器。
可以更加快速,有效,安全地构建docker 镜像,自 docker v18.06 版本起已经集成了该组件。
Buildkit 是下一代 docker 构建组件,拥有众多特性:
- 自动垃圾收集
- 可扩展的前端格式
- 并发依赖项解析
- 高效的指令缓存
- 构建缓存导入/导出
- 嵌套的构建作业调用
- 可配置的构建底层,包括 OCI (runc)和 containerd,未来将加入更多的构建底层
- 多种输出格式
- 可插拔架构
- 无需 root 权限
其中增加了一个很实用的新语法 RUN --mount
,顾名思义用来文件挂载使用。
RUN --mount 允许您创建 mount,该 mount 作为构建期间可以访问的一部分。该特性可用于从构建的其他部分绑定文件,而无需复制、访问构建 secrets 或 ssh-agent 套接字,或者创建缓存位置从而加速构建。
打开 https://docs.docker.com/engine/reference/builder/#syntax 搜索 --mount
有官方详细的说明。
要特别注意的是,预启用 --mount 语法,需要在 dockerfile 中添加如下魔术注释,确保放在 dockerfile 文件的第一行
:
# syntax=docker/dockerfile:1.2
更多版本官方地址:https://hub.docker.com/r/docker/dockerfile
注意:就目前版本来讲,–mount 只能挂在已经存在的镜像中的目录或者构建dockerfile的当前上下文目录(from是一个已经存在的镜像的名字),不能挂在宿主机目录。
示例:
# syntax=docker/dockerfile:experimental
FROM centos AS centos
FROM alpine
RUN --mount=type=bind,from=centos,source=/,target=/centos ls /centos > /root/centos.txt
不提供 from 则默认挂载 dockerfile 当前上下文目录
启用 Buildkit 的方式有两种:
1、在原来的 docker build 命令之前增加指令,如下所示:
# 原构建命令
docker build -f Dockerfile -t test_name .
# 增加DOCKER_BUILDKIT=1后的命令
DOCKER_BUILDKIT=1 docker build -f Dockerfile -t test_name .
2、修改 /etc/docker/daemon.json 文件,添加内容如下所示:
{
"features": {
"buildkit" : true
}
}
然后重启 docker 服务
systemctl daemon-reload
systemctl restart docker
相关参考资料:
https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/reference.md
https://docs.docker.com/build/buildkit/
https://blog.51cto.com/u_15127521/2658074
buildx 资料
(END)