如何在CloudBuild上的Docker(DinD)中设置Docker



我正试图在CI上运行一个在幕后使用docker的脚本(unitest(。该脚本在droneci上按预期工作,但切换到CloudBuild时,尚不清楚如何设置DinD。

对于droneci,我基本上使用这里显示的DinD,我的问题是,如何将代码翻译到GoogleCloudBuild。这可能吗?

我在互联网上搜索CloudBuild wrt DinD的语法,但找不到什么。

Cloud Build允许您从源代码创建Docker容器映像。Cloud SDK提供了container build子命令,以便轻松使用此服务。

例如,这里有一个构建Docker镜像的简单命令:
gcloud builds submit -t gcr.io/my-project/my-image

该命令将当前目录中的文件发送到Google Cloud Storage,然后在其中一个Cloud Build VM上,获取源代码,运行Docker Build,并将图像上传到Container Registry默认情况下,Cloud Build运行docker Build命令来构建图像。您还可以通过自定义生成步骤来自定义生成管道。如果您可以使用任意Docker映像作为构建步骤,并且源代码可用,那么您可以将单元测试作为构建步骤运行。通过这样做,您总是使用相同的Docker映像运行测试。cloudbuild测试运行程序示例中有一个演示存储库。本教程使用演示存储库作为其说明的一部分
我还建议您查看这些具有类似用例的信息链接:

  • 在Google云构建上运行集成测试
  • 谷歌云构建管道

我设法找到了一种在CloudBuild中的Docker(DinD(中运行Docker的方法。要做到这一点,我们需要在后台使用dockercompose启动一项服务。您的docker-compose.yml脚本应该是这样的。

version: '3'
services:
dind-service:
image: docker:<dnd-version>-dind
privileged: true
ports:
- "127.0.0.1:2375:2375"
- "127.0.0.1:2376:2376"
networks:
default:
external:
name: cloudbuild

在我的情况下,我使用18.03或18.09版本没有问题,以后的版本也应该可以。其次,将容器连接到cloudbuild网络非常重要。这样,dind容器将与步骤中生成的每个容器位于同一网络上。

要启动服务,您需要在cloudbuild.yml文件中添加一个步骤。

- id: start-dind
name: docker/compose
args: ['-f', 'docker-compose.yml', 'up', '-d', 'dind-service']

要验证dind服务是否按预期工作,只需创建一个ping步骤即可。

- id: 'Check service is listening'
name: gcr.io/cloud-builders/curl
args: ["dind-service:2375"]
waitFor: [start-dind]

现在,如果它有效,你可以在后台使用dind正常运行脚本。重要的是传递DOCKER_HOSTenv变量,以便docker客户端能够定位docker引擎。

- id: my-script
name: my-image
script: myscript
env:
- 'DOCKER_HOST=tcp://dind-service:2375'

请注意,由脚本派生的任何容器都将位于dind服务中,因此,如果要对其进行任何请求,则不应该对http://localhost进行请求,而应该向http://dind-service进行请求。此外,如果要使用私人映像,则在运行脚本之前需要进行某种类型的身份验证。为此,您应该在运行脚本之前先运行gcloud auth configure-docker --quiet。确保你的docker镜像已经安装了gcloud。这将创建运行应用程序所需的身份验证凭据。凭据保存在与$HOME变量相关的路径中,因此请确保您的应用程序能够访问它。例如,如果使用tox,您可能会遇到一些问题。

相关内容

  • 没有找到相关文章

最新更新