当前位置: 首页 > news >正文

Docker入门之构建

Docker构建概述

Docker Build 实现了客户端-服务器架构,其中:

  • 客户端:Buildx 是用于运行和管理构建的客户端和用户界面。
  • 服务器:BuildKit 是处理构建执行的服务器或构建器。
    docker 构建

当您调用构建时,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 可以从简单开始,并根据您的需求扩展以支持更复杂的场景。


未完待续,
祝各位程序员🧑‍💻,程序员节快乐。

http://www.lryc.cn/news/468394.html

相关文章:

  • StarRocks数据库在SQL语句中解析JSON字符串
  • RabbitMq-队列交换机绑定关系优化为枚举注册
  • 施磊C++ | 项目实战 | 手写移植SGI STL二级空间配置器内存池 项目源码
  • C++ | Leetcode C++题解之第507题完美数
  • Git快速上手
  • 宝塔如何部署Django项目(前后端分离篇)
  • JavaScript解析JSON对象及JSON字符串
  • Elasticsearch 构建实时数据可视化应用
  • NVR批量管理软件/平台EasyNVR多个NVR同时管理:H.265与H.264编码优势和差异深度剖析
  • C/C++(六)多态
  • 汽车及零配件企业海量文件数据如何管
  • 【AI学习】Mamba学习(十二):深入理解S4模型
  • linux入门之必掌握知识点
  • 【Web.路由]——路由原理
  • Spring Boot技术在中小企业设备管理中的应用
  • Lua表(Table)
  • 51单片机应用开发(进阶)---外部中断(按键+数码管显示0-F)
  • 怎么区分主谓宾I love you与主系表I am fine? 去掉宾语看句子完整性 主系表结构则侧重于描述主语的状态、特征或性质
  • 私域流量运营的误区
  • VirtualBox虚拟机桥接模式固定ip详解
  • 面试问题基础记录24/10/24
  • 中国区 Microsoft365主页链接请您参考:
  • Go encoding/json库
  • 「实战应用」如何用图表控件LightningChart可视化天气数据?(二)
  • 苹果瑕疵数据集苹果质量数据集YOLO格式VOC格式 深度学习 目标检测 数据集
  • 旧电脑安装Win11提示“这台电脑当前不满足windows11系统要求”,安装中断。怎么办?
  • 深入理解QT多线程编程
  • React四官方文档总结一UI与交互
  • 如何理解 HTTP 是无状态的,以及它与 Cookie 和 Session 之间的联系
  • OpenCV视觉分析之运动分析(2)背景减除类:BackgroundSubtractorKNN的使用