在Concourse构建中将Docker映像下载并上传到其他仓库

时间:2019-10-21 05:38:39

标签: docker concourse

我想将某些docker映像设为公开(当前为私有)。 因此,基本上,我希望从GCR(私有存储库)下载该主题构建,然后将其上传到dockerhub(公共存储库)

我当前的工作方式是使用docker in docker container,然后运行显式显示到第一个标签的docker命令,然后推送到dockerhub。

Docker的任何现有场所资源都可以自动执行此操作吗?

编辑

结果是可以的。在docker-image-resourceregistry-image-resource中,在配置资源时都需要在开始时设置标签。但是,我想运行一个任务,从中获取标签,然后从私有仓库下载带有标签的docker映像,然后将其上传到公共仓库。 有可能吗?

1 个答案:

答案 0 :(得分:0)

是的,docker-image-resource可以做到这一点。您可以在github上找到很多mor文档/示例:https://github.com/concourse/docker-image-resource

这就是我用来构建图像并将图像推送到AWS ECR的方法。

首先将其定义为管道中的资源并进行配置。

resources:
  - name: ecr-repository
    type: docker-image
    source:
      repository: xxxx.dkr.ecr.eu-central-1.amazonaws.com/some/ecr/path

由于我是从ec2实例中推送的,因此我不需要设置任何凭据。当您想推送到docker hub时,需要使用凭据配置资源。

因此,concourse现在知道该资源,可以在作业步骤中使用它。对于构建/推送,您将使用put步骤,如下所示:

- put: ecr-repository
  params:
    build: .

如果您的Dockerfile不在资源的根目录中,则可以将build设置为指向该路径,也可以使用dockerfile选项。有关更多信息,请参阅文档。

或者,有注册表图像资源。我自己还没有使用过它,但是如果您已经有了一个可以正常工作的构建,那么您可以只给出您所拥有的文物并将其推向所需的位置。配置大概是相同的(给它URL,凭据)并在放置步骤中使用它。

https://github.com/concourse/registry-image-resource

编辑:

两个资源都有一个参数“ additional_flags”。 为了不更改构建任务,您可以将图像输出为归档文件以及指定要推送标签的文件。

docker save image:latest | gzip > ./outdir/image.tar.gz
echo "some foo tags" > ./outdir/tags_file

然后您可以使用其他标签上传该图像

put: registry-resource
    params:
      image: ./outdir/image.tar.gz
      additional_tags: ./outdir/tags_file

当然,您必须在第一个任务中将'outdir'指定为输出,在第二个任务中将'outdir'指定为输入,以使concourse传输文件。