1. 概述
Docker Compose 是一个自动化工具,它使管理多容器应用程序变得容易。BuildKit 是 Docker 中的强大力量构建引擎,能够提升应用构建的性能和灵活性。此外,它还有助于创建有效的构建管道,并与 Docker 镜像 和 Docker Compose 文件无缝集成。
在这篇教程中,我们将解释如何在 Docker Compose 中启用 BuildKit。
2. 了解 BuildKit
BuildKit 是随 Docker 守护进程(Docker daemon)提供的特性,简化了构建和打包 容器 镜像的过程。通过 BuildKit,我们可以在 Docker 中执行并行、增量和多阶段构建。作为 BuildKit 的一部分,我们现在可以指定构建时的秘密和构建时的参数,这使得构建过程更加定制化和优化。它还提供了一种新的镜像格式,以提高镜像分发和存储的效率。
相比之前的 Docker 版本,这个 BuildKit 构建器更强大,并且在旧版本构建器的基础上提供了许多增强功能和改进。
3. 在 Docker Compose 中启用 BuildKit
为了在我们的流程中开始使用 BuildKit,我们需要有 Docker 版本 18.09 或更高版本。在继续之前,如果我们的版本较旧,需要升级 Docker。
3.1. 通过 Docker 守护程序配置启用
通过 Docker 守护程序配置来启用 BuildKit,我们需要将配置文件中的 buildkit 特性设置为 true。一旦 Docker 守护程序激活 BuildKit,我们就可以使用它来构建镜像。让我们向 /etc/docker/daemon.json 文件添加以下配置来启用 BuildKit:
{
"features": {
"buildkit": true
}
}
现在,我们需要重启 docker 服务:
$ sudo systemctl restart docker
要使用 BuildKit 功能,我们可以使用带有 –progress=buildkit 标志的 docker build 命令或设置 DOCKER_BUILDKIT 环境变量。
3.2. 使用 docker-compose.yml
要在 Docker Compose 中启用 BuildKit,我们需要在 docker-compose.yml 中添加 DOCKER_BUILDKIT=1 环境变量。让我们创建一个 docker-compose.yml 文件:
version: '3.8'
services:
web:
build:
context: .
args:
DOCKER_BUILDKIT: 1
在这个配置中,web 服务使用 Docker Compose 版本 3.8 并带有环境变量 DOCKER_BUILDKIT。这告诉 Docker Compose 在构建 web 服务时使用 BuildKit。
3.3. 使用 export 命令
我们也可以通过在当前 shell 会话的所有子进程中使 DOCKER_BUILDKIT 环境变量可用,从而设置 DOCKER_BUILDKIT 环境变量,然后运行 docker-compose build 命令来启用 BuildKit。让我们看看命令:
$ export DOCKER_BUILDKIT=1
上述命令将 DOCKER_BUILDKIT 值设置为 1。当构建 Docker 镜像时,此 ENV 变量启用 BuildKit。当设置为 1 时,它启用 BuildKit;当设置为 0 或未设置时,它禁用 BuildKit。默认情况下,Docker 禁用 BuildKit,并使用旧版本构建引擎。
我们使用了 export 命令来使环境变量对当前 shell 会话中的所有后续命令可用。一旦执行此命令,所有后续的 docker build 命令都将使用 BuildKit 而不是旧版构建引擎。让我们查看用于构建 docker-compose.yml 中定义的服务的命令:
$ docker-compose build
通过上述构建命令,将为 docker-compose.yml 中定义的所有服务创建镜像。此外,它将使用 BuildKit 作为默认引擎,因为 ENV 变量 DOCKER_BUILDKIT 设置为 1。
4. BuildKit 的优势
BuildKit 引擎允许我们改善应用构建的性能和灵活性。它被设计得与 Docker 完美兼容,易于集成以提供高效和优化的构建管道。其多阶段构建可以轻松地减少最终镜像的整体大小。这最终有助于节省服务器上的磁盘空间并在开发过程中节省时间。
通过使用 BuildKit 的功能,如多阶段构建、并行处理和缓存,我们可以显着提高应用构建的性能和效率。这可以帮助我们在开发过程中节省时间和资源,最终导致更快和更高效的部署。
4.1. 多个构建阶段
BuildKit 的关键优势之一是支持多个构建阶段。这帮助我们将完整的构建过程分为多个阶段,每个阶段执行特定的任务。通过 BuildKit,我们可以轻松分离构建阶段。一个阶段用于编译代码,另一个阶段将编译后的代码复制到运行时镜像。这样,我们的最终镜像将更小且更高效。
4.2. 并行处理和缓存
为了加快构建速度,BuildKit 还允许并行处理和缓存。并行处理允许我们同时执行多个任务,从而增加构建的速度。此外,它提供缓存以重用先前的构建结果。这样做,我们可以在开发阶段节省时间和资源。
5. 总结
在这篇文章中,我们讨论了如何在 Docker Compose 中启用 BuildKit。首先,我们探索了使用 docker-compose.yml 文件启用 BuildKit 的不同方式。之后,我们讨论了 BuildKit 的各种优势,以改进开发流程。