我试图在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) 我export DOCKER_BUILDKIT=1之前尝试过docker-compose build,但没有看到预期的BuildKit输出。它应该工作吗?
我读过一些文章,其中建议有一个专用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) 当启用 BuildKit 构建 Docker 镜像时,它仅同时显示构建日志的最后 6 行。--progress=plain一次显示所有数千行,但我想得到介于两者之间的一些内容,比如说 20 行。是否可以将 6 行的默认值更改为无穷大以下的某个自定义值?
docker buildx build我正在阅读有关构建多个架构的文档,我对这个--push选项感到困惑,它说它直接推送到注册表,但它如何知道或如何指定我希望它推送构建图像的位置?
有关更多上下文,我的计划是将图像从我的 Gitlab CI/CD 管道推送到我的 Gitlab 私有容器注册表
长话短说:
如何手动ACTIONS_RUNTIME_TOKEN和 ACTIONS_CACHE_URL在 GitHub 中查找操作?
语境
我正在尝试在 GitHub 操作中的 buildkit 构建过程中缓存 docker 层。
理论上,使用docker/setup-buildx-action、docker/build-push-action和crazy-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_TOKEN和
ACTIONS_CACHE_URL。它们将由 来设置ghaction-github-runtime,因此我无法使用。查看代码,似乎从环境中导出了2个变量,但我找不到它们。
我如何在没有其他操作帮助的情况下手动找到它们?
caching docker github-actions docker-buildkit github-actions-artifacts
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) 我正在尝试实现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) 我的主机(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
我正在尝试使用该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-buildkit ×10
docker ×9
dockerfile ×3
caching ×2
pip ×2
buildx ×1
go ×1
go-modules ×1
macos ×1
ssh ×1