前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >下一代 docker 构建组件Buildkit

下一代 docker 构建组件Buildkit

作者头像
yxxhero
发布2022-05-31 19:25:30
1.7K0
发布2022-05-31 19:25:30
举报
文章被收录于专栏:DevOps充电宝

BuildKit 简介

buildkit 是下一代 docker 构建组件,拥有众多特性:

  • 自动垃圾收集
  • 可扩展的前端格式
  • 并发依赖项解析
  • 高效的指令缓存
  • 构建缓存导入/导出
  • 嵌套的构建作业调用
  • 可配置的构建底层,包括 OCI (runc)和 containerd,未来将加入更多的构建底层
  • 多种输出格式
  • 可插拔架构
  • 无需 root 权限

BuildKit的build输出

Buildkit 内部格式 LLB

BuildKit构建基于一种称为 LLB 的二进制中间格式,该格式用于为构建流程定义依赖关系图,依赖 LLB 的优点,它为构建流程提供强大的特性:

  • 可封装为 Protobuf messages
  • 并行执行
  • 高效缓存
  • 供应商中立[可自定义其实现]

BuildKit 新语法之 RUN --mount

注意:为了支持此语法,需在 dockerfile 文件加入以下内容

代码语言:javascript
复制
# syntax=docker/dockerfile:1.2

RUN --mount 允许您创建 mount,该 mount 作为构建期间可以访问的一部分。该特性可用于从构建的其他部分绑定文件,而无需复制、访问构建 secrets 或 ssh-agent 套接字,或者创建缓存位置从而加速构建。 支持以下语法:

  • RUN --mount=type=bind 默认挂载类型 这种挂载类型允许将上下文或 image 中的目录(只读)绑定到构建容器中。

选项

描述

target (required)

挂载路径.

source

源路径基于from. 默认是from的根路径.

from

指定挂载的源头,可以是构建阶段名称或者镜像名称. 默认为构建上下文.

rw,readwrite

读写模式,数据将会被丢弃.

  • RUN --mount=type=cache 此挂载类型允许挂载缓存目录,从而访问缓存。

Option

Description

id

可选 区分不同的缓存

target (required)

挂载路径.

ro,readonly

是否只读.

sharing

shared, private, locked三者其一. 默认shared. shared 缓存挂载可以被多个写入器同时使用. private 如果有多个写入,则创建一个新的挂载. locked 暂停第二个写入器,直到第一个写入器释放mount.

from

作为缓存挂载的基础的构建阶段名称。默认为空目录

source

将要挂载的from的子路径. 默认是from的根路径.

mode

新缓存目录的文件模式. 默认0755.

uid

新缓存目录的用户ID. 默认为0.

gid

新缓存目录的组ID. 默认为0.

  • RUN --mount=type=tmpfs 这种挂载类型允许在build容器时挂载tmpfs。

Option

Description

target (required)

挂载路径.

  • RUN --mount=type=secret 这种挂载类型允许生成容器访问安全文件,比如私钥,而无需将它们放入映像中

Option

Description

id

secret的id. 默认为target path的basename.

target

挂载路径. 默认/run/secrets/ + id.

required

如果设置为true,当secret不可用时,指令会出错。默认为false.

mode

文件的模式. 默认为0400.

uid

UID. 默认 0.

gid

Group ID. 默认 0.

  • RUN --mount=type=ssh 这种挂载类型允许构建容器通过ssh agent访问 SSH keys,并支持密码.

Option

Description

id

SSH代理套接字或密钥ID. 默认为"default".

target

SSH代理套接字路径. 默认为/run/buildkit/ssh_agent.${N}.

required

如果设置为true,当secret不可用时,指令会出错。默认为false.

mode

套接字文件模式. 默认0600.

uid

socket的用户ID. 默认0.

gid

socket的组ID. 默认0.

BuildKit 新语法之 RUN --security=insecure|sandbox

注意: 使用此语法需要在dockerfile加入以下内容:

代码语言:javascript
复制
#syntax=docker/dockerfile:1.2-labs

使用--security=insecure,构建器可以在非安全模式下运行非沙盒的命令,再运行需要特权的工作流中是需要的(例如containerd)。作用类似于docker run --privileged。为了启用此特性,security.insecure应该开启,即在buildkitd启动时开启(--allow-unsecure-entitlement security.insecure)和(--allow security.insecure)选项。

默认的sandbox模式可以通过 --security=sandbox开启,但这是没什么作用的。

BuildKit 新语法之 RUN --network=none|host|default

注意: 使用此语法需要在dockerfile加入以下内容:

代码语言:javascript
复制
#syntax=docker/dockerfile:1.2-labs

此指令主要为了构建运行命令时指定不同的网络模式。

BuildKit 支持情况

自 docker 18.06 起,BuildKit 就被集成到 docker build 中,设置 docker BUILDKIT=1 环境变量即可轻松开启。

参考文档:

  • https://github.com/moby/buildkit
  • https://docs.docker.com/develop/develop-images/build_enhancements/
  • https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps充电宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • BuildKit 简介
  • Buildkit 内部格式 LLB
  • BuildKit 新语法之 RUN --mount
  • BuildKit 新语法之 RUN --security=insecure|sandbox
  • BuildKit 新语法之 RUN --network=none|host|default
  • BuildKit 支持情况
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档