docker - 构建 docker 并将其推送到不同 CI 构建步骤中的策略,无需 tar

标签 docker continuous-integration google-cloud-build docker-build docker-push

我想在我的 Google Cloud Build 的某个步骤中构建一些 docker 镜像,然后在另一个步骤中推送它们。我认为这里使用的 CI 并不重要。

这是因为一些推送命令依赖于其他一些条件,我不想重新构建图像。

我可以docker save对一些 tar在已安装的工作区中,然后 docker load稍后。然而,这相当缓慢。有没有更好的策略?我想过尝试复制到/从 /var/lib/docker ,但这似乎是不明智的。

最佳答案

这里的关键是从您完成 docker build 的同一主机上执行 docker push。

但是,docker 构建不需要在 CICD 构建机器本身上进行,因为您可以将其本地 docker 客户端指向远程 docker 主机。

要将 docker 客户端指向远程 docker 主机,您需要设置三个环境变量。

在 Linux 环境中:

DOCKER_HOST=tcp:<IP Address Of Remote Server>:2376
DOCKER_CERT_PATH=/some/path/to/docker/client/certs
DOCKER_TLS_VERIFY=1

这是一个非常强大的概念,有很多用途。例如,可以指向一个 dev|tst|prod docker swarm manager 节点。或者,从 Linux 指向远程 Windows 机器并启动 Windows 容器的构建。如果您有通用 CICD 工具来实现一些您希望也用于 Windows 容器的专有图像标签,则后一种用例可能会很有用。

这里的身份验证是双向 SSL/TLS,因此需要使用公共(public) CA 生成客户端和服务器私钥/公钥。一开始这可能有点棘手,因此您可能想首先使用环境设置快捷方式来了解它是如何使用 docker-machine 工作的:
https://docs.docker.com/machine/reference/env/

一旦你掌握了这个概念,你就需要在 CICD 脚本中编写这些环境变量的设置脚本,从而以安全的方式提供客户端证书。

关于docker - 构建 docker 并将其推送到不同 CI 构建步骤中的策略,无需 tar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58579976/

相关文章:

docker - Docker Swarm:添加工作程序节点时拒绝连接

jenkins - 问: How can I save an artifact into Nexus Repository using a groovy pipeline?

testing - 使用构建脚本和持续集成的原因是什么?

docker - 使用 CloudBuild 共享用于多阶段 Docker 构建的 Kaniko 缓存

docker - 为什么在Alpine上运行.NET Core 2.1时会出现System.OutOfMemory异常?

docker - Debezium SQL Server 源连接器设置 Kafka 代理

docker - 无法拉 docker 图片

bash - 如何在 YAML 中使用 'script:' 中的多行命令?

google-cloud-build - 对数组的每个结果运行 Google Cloud Build 命令

google-cloud-build - 是否可以在 Google Cloud Build 中动态生成标签?