标签: docker-buildkit

在Google Cloud Build上使用Docker Buildkit

我试图在Google Cloud Build上将BuildKit与Docker结合使用,以便最终使用--secret标志。我正在使用Docker的构建增强功能作为参考。

当我使用以下命令时,它可以在笔记本电脑上工作: DOCKER_BUILDKIT=1 docker build -t hello-world:latest .

在Cloud Build上运行它时,出现错误“ docker.io/docker/dockerfile:experimental not found”。

知道如何在Cloud Build上使用它吗?

这是设置(请注意:我尚未使用--secret标志):

Dockerfile:

#syntax=docker/dockerfile:experimental

FROM node:10.15.3-alpine

RUN mkdir -p /usr/src/app && \
    apk add --no-cache tini

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install --production

COPY . .

RUN chown -R node:node .

USER node

EXPOSE 8080

ENTRYPOINT ["/sbin/tini", "--"]

CMD [ "node", "index.js" ]
Run Code Online (Sandbox Code Playgroud)

cloudbuild.yaml:

steps:

  - id: 'Build'
    name: 'gcr.io/cloud-builders/docker'
    args: [
      'build',
      '-t', 'gcr.io/$PROJECT_ID/hello-world:latest',
      '.'
    ]
    env:
      - "DOCKER_BUILDKIT=1" …
Run Code Online (Sandbox Code Playgroud)

docker google-cloud-build docker-buildkit

5
推荐指数
2
解决办法
339
查看次数

如何使用docker-compose启用BuildKit?

export DOCKER_BUILDKIT=1之前尝试过docker-compose build,但没有看到预期的BuildKit输出。它应该工作吗?

docker docker-compose docker-buildkit

5
推荐指数
3
解决办法
74
查看次数

在 Docker 中缓存 Go 依赖项

我读过一些文章,其中建议有一个专用go mod download层来下载 go 依赖项。据我所知,该层已被缓存,如果依赖项在下一个构建中没有更改,则将使用缓存的层,从而节省我们的时间。我还注意到,使用 BuildKit 安装功能,go build二进制结果缓存在GO env GOCACHE目录中,以便用于将来的构建。

现在的情况是,很多时候只有少数 go 依赖项发生了变化,因此缓存go mod download层失效了。因此,在下一个构建中,所有依赖项都将再次下载,即使只有其中少数发生了变化。我的问题是是否可以挂载下载的包(依赖项)?这样做的缺点是什么?我还没有看到 Go Dockerfile 最佳实践中使用了这种技术。就像是

RUN --mount=type=cache,target=/go/pkg/mod go mod download
Run Code Online (Sandbox Code Playgroud)

go docker dockerfile go-modules docker-buildkit

5
推荐指数
1
解决办法
4120
查看次数

如何增加 Docker BuildKit 显示的行数?

当启用 BuildKit 构建 Docker 镜像时,它仅同时显示构建日志的最后 6 行。--progress=plain一次显示所有数千行,但我想得到介于两者之间的一些内容,比如说 20 行。是否可以将 6 行的默认值更改为无穷大以下的某个自定义值?

docker docker-buildkit

5
推荐指数
0
解决办法
438
查看次数

如何使用 docker buildx build 命令指定推送位置

docker buildx build我正在阅读有关构建多个架构的文档,我对这个--push选项感到困惑,它说它直接推送到注册表,但它如何知道或如何指定我希望它推送构建图像的位置?

有关更多上下文,我的计划是将图像从我的 Gitlab CI/CD 管道推送到我的 Gitlab 私有容器注册表

docker docker-buildkit

5
推荐指数
1
解决办法
8359
查看次数

在没有官方操作的情况下使用 docker buildx github 操作缓存

长话短说:

如何手动ACTIONS_RUNTIME_TOKENACTIONS_CACHE_URL在 GitHub 中查找操作?

语境

我正在尝试在 GitHub 操作中的 buildkit 构建过程中缓存 docker 层。

理论上,使用docker/setup-buildx-actiondocker/build-push-actioncrazy-max/ghaction-github-runtime操作很容易。问题是,我不能使用它们(组织政策)。

我的工作流程的相关部分现在是:

$repo_url= "<ECR repo in aws>"
docker buildx create --use --driver=docker-container
docker buildx build --tag "${repo_url}:latest"  --file docker/Dockerfile . --cache-to "type=gha,mode=max" --cache-from type=gha
Run Code Online (Sandbox Code Playgroud)

缓存需要 2 个变量/配置:ACTIONS_RUNTIME_TOKENACTIONS_CACHE_URL。它们将由 来设置ghaction-github-runtime,因此我无法使用。查看代码,似乎从环境中导出了2个变量,但我找不到它们。

我如何在没有其他操作帮助的情况下手动找到它们?

caching docker github-actions docker-buildkit github-actions-artifacts

5
推荐指数
1
解决办法
1463
查看次数

我可以使用 Docker buildkit 向非 root 用户提供 ssh 密钥吗?

RUN --mount=type=ssh我在以非 root 用户身份使用 buildkit 时遇到了麻烦。

使用这个命令:

eval $(ssh-agent)
ssh-add ~/.ssh/id_ed25519
DOCKER_BUILDKIT=1 docker build --ssh default=${SSH_AUTH_SOCK} .
Run Code Online (Sandbox Code Playgroud)

还有这个 Dockerfile:

FROM docker.io/apache/airflow
USER root
RUN apt update && apt install -y git openssh-client

# uncommenting this breaks it
#USER airflow

RUN mkdir -m 700 ~/.ssh
RUN ssh-keyscan github.com > ~/.ssh/known_hosts
RUN --mount=type=ssh ssh -vvvT git@github.com
Run Code Online (Sandbox Code Playgroud)

有用。我得到的输出如下:

 > [5/5] RUN --mount=type=ssh ssh -vvvT git@github.com:
...
#8 0.931 debug1: Will attempt key: matt@ChoedanKal ED25519 SHA256:2IGNbnSt122LtFaH5Z6u5eQf9B+aG0khsfNUxOKfHJU agent
#8 0.931 debug1: Will attempt key: …
Run Code Online (Sandbox Code Playgroud)

ssh pip dockerfile docker-buildkit

5
推荐指数
1
解决办法
921
查看次数

Docker BuildKit --mount=type=cache 不起作用,为什么?

我正在尝试实现Buildkit 的缓存挂载功能。

我的 Dockerfile 是:

# syntax = docker/dockerfile:experimental
FROM python:3.6-alpine
RUN --mount=type=cache,target=/root/.cache/pip pip install pyyaml
Run Code Online (Sandbox Code Playgroud)

指令: docker build --progress=plain -t abc:1 . --no-cache

首次运行输出:

#2 [internal] load .dockerignore
#2 transferring context: 2B done
#2 DONE 0.0s

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 175B done
#1 DONE 0.0s

#3 resolve image config for docker.io/docker/dockerfile:experimental
#3 DONE 2.8s

#4 docker-image://docker.io/docker/dockerfile:experimental@sha256:787107d7f...
#4 CACHED

#5 [internal] load metadata for docker.io/library/python:3.6-alpine
#5 DONE 0.0s

#6 [stage-0 1/2] FROM docker.io/library/python:3.6-alpine …
Run Code Online (Sandbox Code Playgroud)

macos caching pip docker docker-buildkit

4
推荐指数
1
解决办法
2014
查看次数

Docker Buildx 无法从本地拉取继承的镜像

我的主机(Ubuntu 20.04)上有 2 个 Dockerfile。我正在运行 docker-ce 版本 Docker 版本 19.03.12,构建 48a66213fe 并启用了实验功能。我能够使用“docker buildx”为 ARM 架构构建它们中的每一个,并在我的嵌入式 Linux ARM 板上成功运行它们。

Dockerfile 1:

FROM python:3.8-slim-buster

COPY git /home/git

WORKDIR /home

RUN apt-get update -y && apt-get --no-install-recommends install build-essential pkg-config libzmq5 -y && \
    cd git && python3 setup.py install && apt remove --purge build-essential pkg-config -y && \
    apt auto-remove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/*

ADD publisher.py /home/publisher.py
Run Code Online (Sandbox Code Playgroud)

Dockerfile 2:

FROM python:3.8-slim-buster

COPY git /home/git

WORKDIR /home

RUN …
Run Code Online (Sandbox Code Playgroud)

embedded-linux docker dockerfile docker-registry docker-buildkit

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

有没有办法使用docker中的buildx构建命令创建多个标签?

我正在尝试使用该docker buildx build命令,并且希望能够在一行中创建多个标签。我尝试过的一个例子

docker buildx build . \
    --platform linux/arm64,linux/amd64 \
    --no-cache --push \
    -t test:latest -t test:${CI_COMMIT_SHORT_SHA}
Run Code Online (Sandbox Code Playgroud)

我已经看到这个问题,但我无法让它工作 https://github.com/docker/buildx/issues/396

docker docker-buildkit buildx

3
推荐指数
1
解决办法
4942
查看次数