云计算核心技术Docker教程:使用BuildKit构建容器镜像
Docker Build是Docker引擎最常用的功能之一-开发人员,构建团队和发行团队的用户都使用Docker Build。
针对18.09版本的Docker Build增强功能引入了对构建体系结构急需的全面检查。通过集成BuildKit,用户应该看到性能,存储管理,功能功能和安全性方面的改进。
1.可以将使用BuildKit创建的Docker映像推送到Docker Hub,就像使用旧版构建的Docker映像一样
2.适用于旧版构建的Dockerfile格式也将与BuildKit构建一起使用
3.新的--secret命令行选项允许用户传递秘密信息,以使用指定的Dockerfile构建新映像
要求
当前版本的Docker(18.09或更高版本)
下载自定义前端的镜像所需的网络连接
局限性
仅支持构建Linux容器
启用BuildKit构建
全新安装docker的最简单方法是DOCKER_BUILDKIT=1 在调用docker build命令时设置环境变量,例如:
$ DOCKER_BUILDKIT=1 docker build .
要默认启用Docker BuildKit,请将/etc/docker/daemon.jsonfeature中的守护程序配置设置 为true并重新启动守护程序:
{ "features": { "buildkit": true } }
新的Docker Build命令行构建输出
新的Docker构建BuildKit TTY输出(默认):
新的Docker构建BuildKit普通输出:
重写默认前端
Dockerfile如果您覆盖默认前端,则可以使用中的新语法功能。要覆盖默认前端,请将的第一行设置 Dockerfile为
带有特定前端图像的注释:
# syntax =, e.g. # syntax = docker/dockerfile:1.0-experimental
新的Docker Build机密信息
--secret用于docker build的新标志允许用户以安全的方式传递将在Dockerfile中使用的秘密信息,以构建docker映像,而最终不会存储在最终映像中。
id是传递到中的标识符docker build --secret。该标识符与RUN --mount要在Dockerfile中使用的标识符相关联。
Docker不使用将秘密保存在Dockerfile外部的文件名,因为这可能是敏感信息。
dst将秘密文件重命名为DockerfileRUN命令中要使用的特定文件。
例如,将秘密信息存储在文本文件中:
$ echo 'WARMACHINEROX' > mysecret.txt
使用指定使用BuildKit前端的Dockerfile docker/dockerfile:1.0-experimental,可以访问秘密。
例如:
# syntax = docker/dockerfile:1.0-experimental
FROM alpine
# shows secret from default secret location:
RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret
# shows secret from custom secret location:
RUN --mount=type=secret,id=mysecret,dst=/foobar cat /foobar
该Dockerfile只是为了证明可以访问该机密。如您所见,机密信息显示在构建输出中。构建的最终映像将没有秘密文件: