Docker构建概述
Docker Build 实现了客户端-服务器架构,其中:
- 客户端:Buildx 是用于运行和管理构建的客户端和用户界面。
- 服务器:BuildKit 是处理构建执行的服务器或构建器。
当您调用构建时,Buildx 客户端会向 BuildKit 后端发送构建请求。BuildKit 解析构建指令并执行构建步骤。构建输出要么发送回客户端,要么上传到注册表,例如 Docker Hub。
Buildx 和 BuildKit 均随 Docker Desktop 和 Docker Engine 一起安装,开箱即用。调用该docker build命令时,您将使用 Buildx 使用与 Docker 捆绑在一起的默认 BuildKit 运行构建。
Buildx
Buildx 是您用来运行构建的 CLI 工具。该docker build命令是 Buildx 的包装器。当您调用时docker build,Buildx 会解释构建选项并向 BuildKit 后端发送构建请求。
Buildx 客户端的功能远不止运行构建。您还可以使用 Buildx 创建和管理 BuildKit 后端(称为构建器)。它还支持管理注册表中的映像以及同时运行多个构建的功能。
Docker Buildx 默认随 Docker Desktop 一起安装。您还可以从源代码构建 CLI 插件,或从 GitHub 存储库获取二进制文件并手动安装。 有关更多信息,请参阅 GitHub 上的Buildx README 。
BuildKit
BuildKit 是执行构建工作负载的守护进程。
构建执行从调用命令开始docker build。Buildx 解释您的构建命令并向 BuildKit 后端发送构建请求。构建请求包括:
- Dockerfile
- 建立论点
- 导出选项
- 缓存选项
BuildKit 解析构建指令并执行构建步骤。在 BuildKit 执行构建时,Buildx 会监控构建状态并将进度打印到终端。
如果构建需要来自客户端的资源,例如本地文件或构建机密,BuildKit 会向 Buildx 请求所需的资源。
与早期版本的 Docker 中使用的旧构建器相比,BuildKit 在这方面更加高效。BuildKit 仅在需要时请求构建所需的资源。相比之下,旧构建器始终会获取本地文件系统的副本。
BuildKit 可以从 Buildx 请求的资源示例包括:
- 本地文件系统构建上下文
- 构建机密
- SSH 套接字
- 注册表身份验证令牌
有关 BuildKit 的更多信息,请参阅 BuildKit。
Dockerfile 概述
Dockerfile
一切都从 Dockerfile 开始。
Docker 通过读取 Dockerfile 中的指令来构建镜像。Dockerfile 是一个文本文件,其中包含构建源代码的指令。Dockerfile 指令语法由Dockerfile 参考中的规范参考定义 。
以下是最常见的指令类型:
操作说明 | Value |
---|---|
FROM <image> | 为您的图像定义一个基础。 |
RUN <command> | 在当前图像之上的新层中执行任何命令并提交结果。RUN还具有用于运行命令的 shell 形式。 |
WORKDIR <directory> | 为Dockerfile 中其后的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。 |
COPY <src> <dest> | 从路径中的容器文件系统复制新文件或目录并将它们添加到其中。 |
CMD <command> | 允许您定义基于此映像启动容器后运行的默认程序。每个 Dockerfile 只有一个,当存在多个CMD时,仅考虑最后一个CMD实例。 |
Dockerfile 是镜像构建的关键输入,可以根据您的独特配置促进自动化、多层镜像构建。Dockerfile 可以从简单开始,并根据您的需求扩展以支持更复杂的场景。
未完待续,
祝各位程序员🧑💻,程序员节快乐。