- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Buildkit 探索 docker 构建过程。在调用 docker build
之前,我通过在 CLI 上设置环境变量 DOCKER_BUILDKIT=1
来启用它。来自 buildkit documentation它说,
# syntax=docker/dockerfile:1
指向您要使用的特定镜像。从语法 documentation它说,
这个 frontend 和 backend 在 docker 构建过程中意味着什么?谁能帮我简单理解一下?
最佳答案
TLDR; 前端和后端的概念是由 Buildkit 诞生的,之前在 docker 中是不存在的。前端就像一个将用户文件(例如:Dockerfile)转换为 LLB 的编译器。后端以最有效的方式执行 LLB 构建 docker 镜像。
如果没有 Buildkit,则直接使用 Dockerfile 中的指令构建 Docker 镜像。没有创建这些指令的中间表示。指令被传递给 docker 引擎(也称为 Moby 引擎或 classic builder),然后构建镜像。
然后意识到,为了进一步改进和优化构建过程,构建操作的大部分基础都必须重新定义。因此,proposal为创建新引擎而生,Buildkit 伴随着构建过程的前后端分离而诞生。
One of the main design goals of buildkit is to separate frontend and backend concerns during a build process. A frontend is something designed for the users to describe their build definition. Backend solves the problem of finding a most efficient way to solve a common low-level description of the build operations, that has been prepared for them by the frontends.
前后端分离由LLB(low-leve builder)实现。
Everything about execution and caching of your builds is defined only in LLB.
前端是在 BuildKit 中运行的组件,将任何构建定义(用户编写的文件)转换为 LLB。 BuildKit 通过指定:#syntax=...
支持从容器镜像动态加载前端。一个著名的前端是 dockerfile 前端,因为它与 docker 引擎一起使用。您可以使用以下命令指定此容器镜像:#syntax=docker/dockerfile:latest
。
还有很多其他的前端可以使用,例如 mockerfile前端:#syntax=r2d4/mocker
。与通常的 Dockerfile 语法相比,这允许您使用稍微不同的语法。
Buildkit 后端解决由各种前端生成的 LLB。由于 LLB 是一个依赖图,它可以被处理为:检测并跳过执行未使用的构建阶段,并行构建独立的构建阶段等。这就是为什么 Buildkit 能够在旧的构建过程中提高性能、存储管理等。此外,缓存模型已完全重写。
The core part of the builder(Buildkit) is a solver that takes a DAG of low-level build(LLB) instructions from the frontend and finds a way to execute them in a most efficient manner while keeping the cache for the next invocations.
要使用 Buildkit 后端,请指定DOCKER_BUILDKIT=1
。
Starting with version 18.09, Docker supports a new backend for executing your builds that is provided by the moby/buildkit project.
Moby 引擎(经典构建器)可以称为原始后端,但请记住它不使用 LLB,因此它的构建过程没有前端和后端。 p>
引用资料和资源:
关于docker - docker buildkit 的前端和后端到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73067660/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!