标签: docker-buildkit

在 docker-compose 文件中启用“progress plain”

当我使用 运行构建时docker-compose build --progress plain,它在构建过程中显示比默认 BuildKit 输出更有用的信息。

有没有办法将简单的进度选项嵌入到 docker-compose.yml 文件本身中,这样我就可以调用docker-compose build并仍然获得更好的输出?

我尝试添加这些构建参数,但它们似乎都不起作用:

build:
    args:
        #progress: plain  
        #- progress=plain  
        #- progress plain  
        #BUILDKIT_PROGRESS: plain  
        #- BUILDKIT_PROGRESS=plain  
Run Code Online (Sandbox Code Playgroud)

docker docker-compose docker-buildkit

40
推荐指数
3
解决办法
3万
查看次数

Docker BuildX 映像未显示在 docker image ls 中

我目前正在尝试使用 BuildKit/BuildX 构建多平台映像(x86_64、arm64、armv7、armv6),并且似乎构建成功,但我似乎找不到映像所在的位置。与我之前的 x86_64 版本相比,它并没有显示出任何变化,并且当尝试将其送到我的存储库时,它说所有层都已经存在,并且只存在一个平台。我用来构建图像的命令是:

docker buildx build \
--platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 -m 5120M \
--no-cache \
--progress auto \
--pull -t frostedflakez/php-mysql-webserver:php-latest-7.4 \
--push ./
Run Code Online (Sandbox Code Playgroud)

构建后我从终端得到的最后几行是:

 => exporting to image                                                                                                                                                     264.6s
 => => exporting layers                                                                                                                                                     46.1s
 => => exporting manifest sha256:585ca6c82887a6f0178007c905f11c7fbde5e6220b9c451892c40d2844b43403                                                                            0.0s
 => => exporting config sha256:0923c92918eb6fad44396000250f11946f38f6e1eb0d78ec916a794f395f526a                                                                              0.0s
 => => exporting manifest sha256:0b9fceb5f74bca71942ce3e1aa5fdf5ed0453e16aff53bec5d22a9c15233fbc2                                                                            0.0s
 => => exporting config sha256:ba19e5dab51b74549775cfbc1b0ce3961342a2c859050d98e68b6130ee276e91                                                                              0.0s
 => => exporting manifest sha256:540ef45e6b3cfec74af6a4c641b70009587b19b1fe5702338a9b93b409136b28                                                                            0.0s
 => => exporting config sha256:7be378e1831fa4bd00f1595bf4d511286c600d21ee245db567115fb85fdd24cc                                                                              0.0s
 => => exporting manifest sha256:9a339a6283db4ffe56c735d85306e87261aebe8a7f696984da67720f24d4ab73                                                                            0.0s …
Run Code Online (Sandbox Code Playgroud)

docker docker-buildkit docker-cli

20
推荐指数
2
解决办法
1万
查看次数

是否可以分别推送不同架构的docker镜像?

据我所知docker buildx build --push将用您在--platform参数中指定的图像架构覆盖现有的图像架构。据我了解,在使用buildx. 但是,我知道官方 docker 镜像使用arm64构建农场来构建linux/arm64镜像。这怎么可能?他们只是使用docker pushwithout吗buildx?如果是这样,是否意味着docker push不会覆盖现有架构buildx?如果我想在不同的机器上构建和推送多个架构,最好的方法是什么?

docker docker-buildkit buildx

16
推荐指数
1
解决办法
7412
查看次数

如何重用“RUN --mount=type=cache” docker 构建中的缓存?

我正在使用新的实验性 docker buildkit 语法来进行多阶段构建,如下所示:

Dockerfile:

RUN --mount=type=cache,target=/home/build/.build-cache,gid=1000,uid=1001 ./build
Run Code Online (Sandbox Code Playgroud)

重击:

RUN --mount=type=cache,target=/home/build/.build-cache,gid=1000,uid=1001 ./build
Run Code Online (Sandbox Code Playgroud)

在本地效果很好。在 CI 上我每次都会得到一个新的 docker 环境,所以没有缓存。

我可以将文件导出和导入到环境中,但我不知道缓存位于哪里。有任何想法吗?

或者我应该通过一些 docker 命令导出/导入缓存?我已阅读https://docs.docker.com/engine/reference/commandline/build/#specifying-external-cache-sourceshttps://github.com/moby/buildkit#export-cache但不清楚对我来说,这是特定于 buildkit 的,是特定于 docker 的,或者是否真正适用于安装到 Dockerfile RUN 命令中的此缓存。

我在这里添加了一个失败测试的公共要点,展示了我所希望的: https ://gist.github.com/Mahoney/85e8549892e0ae5bb86ce85339db1a71/6308f1bdb062a8982017193b96d61ec00a7698c5

后来的修订版有效,但我对此不满意 - 太多的引导: https://gist.github.com/Mahoney/85e8549892e0ae5bb86ce85339db1a71

docker dockerfile docker-buildkit

15
推荐指数
1
解决办法
6332
查看次数

Kaniko 和 BuildKit/Buildx 有什么区别?

据我了解:

  • 它们都是构建容器镜像的工具
  • 构建本身在容器中运行
  • 构建可以在远程节点上进行,例如在 Kubernetes 集群中(KanikoBuildKit
  • 它们都提供高级功能,例如层缓存

我能收集到的差异:

  • 安全模型(Kaniko
  • BuildKit 利用最新的开发成果,例如缓存清单和清单列表
  • BuildKit 支持多种架构

我不清楚的是两组工具之间的重叠程度以及何时应该使用其中一个而不是另一个。例如,这两个工具似乎都很好地涵盖了在 Kubernetes 集群上自托管远程映像构建场的用例。

containers docker kaniko docker-buildkit buildx

15
推荐指数
1
解决办法
7999
查看次数

我可以在 docker 构建期间使用 RUN --mount=type=bind 保留纱线安装缓存吗?

yarn install我正在尝试在使用 Docker BuildKit 构建 Docker 映像时生成并重用缓存。纱线缓存保留在目录中.yarn/cache,并且永远不应包含在最终映像中(.yarn/cache相对于构建上下文根)。该.yarn/cache目录应该在多个构建之间共享,以便始终从热缓存启动并具有快速yarn install命令(即使我们由于 的更改而导致缓存未命中package.json)。如果我们可以在结束后访问.yarn/cache内容docker build,则可以轻松在多个构建之间共享,例如将其上传到 Amazon S3 或 GCS 存储桶。

我考虑过两种选择:

  1. RUN --mount=type=bind
  2. RUN --mount=type=cache

下面描述为什么这两种方法都不起作用。

(1) 运行 --mount=type=bind

(简化的)Dockerfile 如下所示:

ENV YARN_CACHE_FOLDER ".yarn/cache"
COPY package.json yarn.lock ./
RUN --mount=type=bind,source=.yarn/cache,target=.yarn/cache,rw yarn install --frozen-lockfile
Run Code Online (Sandbox Code Playgroud)

.yarn/cache不幸的是,命令结束后目录中不存在任何数据docker build

rw选项文档中描述了没有保留数据的原因:Allow writes on the mount. Written data will be discarded。如果写入的数据被丢弃,那么第一次生成缓存的工作方式是什么?

(2)RUN --mount=type=cache

或者我考虑使用RUN --mount=type=cache. …

docker dockerfile yarnpkg google-cloud-build docker-buildkit

13
推荐指数
1
解决办法
4431
查看次数

如何使用docker中挂载的ssh进行Dockerfile中的后续命令

我必须在使用 CMD 运行容器时执行 git Push。但是 ssh 在最后一行(即 CMD 部分)中不可用,无法进行 git 推送。我可以在这里做什么来获取 git Push 的 ssh 密钥?请有人帮助我。

请找到我的Dockerfile

# syntax = docker/dockerfile:1.0-experimental
FROM continuumio/anaconda3

# Install git
RUN apt-get update && apt-get install -y git

# Download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

# Clone private repository
RUN --mount=type=ssh git clone git@github.com:myorg/myproject.git myproject

CMD python myproject/src/example.py && git push
Run Code Online (Sandbox Code Playgroud)

然后我使用以下命令在运行期间传递我的 ssh 密钥

docker build --ssh default .
Run Code Online (Sandbox Code Playgroud)

git ssh docker dockerfile docker-buildkit

12
推荐指数
2
解决办法
2万
查看次数

在 ECR 中标记多平台图像会创建未标记的清单

我开始使用 docker buildx 来标记多平台映像并将其推送到 ECR。但是,ECR 似乎将标签应用于父清单,并将每个相关清单保留为未加标签。ECR 似乎确实可以防止删除子清单,但它使管理孤立的未标记图像的清理变得复杂。

有没有办法以某种方式标记这些子清单?

例如,考虑一下这个推送:

docker buildx build --platform "linux/amd64,linux/arm64" --tag 1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0 --push  . 
Run Code Online (Sandbox Code Playgroud)

检查图像:

 docker buildx imagetools inspect 1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0
Run Code Online (Sandbox Code Playgroud)

显示:

Name:      1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest:    sha256:4221ad469d6a18abda617a0041fd7c87234ebb1a9f4ee952232a1287de73e12e
       
Manifests: 
    Name:      1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0@sha256:c1b0c04c84b025357052eb513427c8b22606445cbd2840d904613b56fa8283f3
    MediaType: application/vnd.docker.distribution.manifest.v2+json
    Platform:  linux/amd64
         
    Name:      1234567890.dkr.ecr.eu-west-1.amazonaws.com/my-service/my-image:1.0@sha256:828414cad2266836d9025e9a6af58d6bf3e6212e2095993070977909ee8aee4b
    MediaType: application/vnd.docker.distribution.manifest.v2+json
    Platform:  linux/arm64
Run Code Online (Sandbox Code Playgroud)

然而,ECR 将 2 个子图像显示为untagged

amazon-web-services docker amazon-ecr docker-buildkit

12
推荐指数
2
解决办法
5628
查看次数

docker buildkit的前端和后端到底是什么?

我正在使用 Buildkit 探索 docker 构建过程。DOCKER_BUILDKIT=1我在调用之前通过在 CLI 上设置环境变量来启用它docker build。从 buildkit文档中可以看出,

  • 要使用外部 Dockerfile 前端,Dockerfile 的第一行需要指向# syntax=docker/dockerfile:1您要使用的特定映像。

从语法文档中可以看出,

  • 此功能仅在使用 BuildKit 后端时可用,并且在使用经典构建器后端时被忽略。

这个前端后端在 docker 构建过程中意味着什么?谁能帮助我简单地理解它?

docker dockerfile docker-build docker-buildkit

12
推荐指数
1
解决办法
2130
查看次数

使用 buildkit 构建时如何附加到中间 docker 容器

我最近听说了 Buildkit,并一直在尝试将它与 Docker 一起使用。

我正在 DOCKER_BUILDKIT=1 docker build . -t experimental 用来构建我的 Dockerfile。

Dockerfile由于缺少一些依赖包,我的构建不正确。

我想要做的是附加到最后一个工作的中间容器并使用apt工具解决问题。

在不使用 Buildkit 的情况下构建时,这可以通过终端输出的中间容器的哈希值实现。

但是,Buildkit 的输出并没有为我提供这样的值。那么,有什么方法可以让我访问它们吗?

提前致谢。

docker dockerfile docker-buildkit

11
推荐指数
1
解决办法
559
查看次数