我们当前的构建系统在 docker 容器(Docker in Docker)内构建 docker 镜像。我们的许多 Docker 构建都需要凭据才能从私有工件存储库中提取。
我们已经使用 docker Secrets 处理了这个问题。将秘密传递给 docker build 命令,并在 Dockerfile 中,在需要的地方引用 RUN 命令中的秘密。这意味着我们正在使用 docker buildkit。 本文对此进行了解释。
我们正在迁移到不同的构建系统(GitLab),并且管理员已在 Docker 中禁用 Docker(安全原因),因此我们将迁移到Kaniko进行 docker 构建。
Kaniko 似乎不像 docker 那样支持秘密。(没有命令行选项可以通过 Kaniko 执行器传递秘密)。
docker 构建所需的凭据存储在 GitLab 变量中。对于 DinD,您只需将这些变量作为秘密添加到 docker 构建中:
DOCKER_BUILDKIT=1 docker build . \
--secret=type=env,id=USERNAME \
--secret=type=env,id=PASSWORD \
Run Code Online (Sandbox Code Playgroud)
然后在 docker 中,使用秘密:
RUN --mount=type=secret,id=USERNAME --mount=type=secret,id=PASSWORD \
USER=$(cat /run/secrets/USERNAME) \
PASS=$(cat /run/secrets/PASSWORD) \
./scriptThatUsesTheseEnvVarCredentialsToPullArtifacts
...rest of build..
Run Code Online (Sandbox Code Playgroud)
如果没有 kaniko 执行器的 --secret 标志,我不确定如何利用 …
gitlab-ci docker-secrets docker-in-docker kaniko docker-buildkit