我想将某些docker映像设为公开(当前为私有)。 因此,基本上,我希望从GCR(私有存储库)下载该主题构建,然后将其上传到dockerhub(公共存储库)
我当前的工作方式是使用docker in docker container
,然后运行显式显示到第一个标签的docker命令,然后推送到dockerhub。
Docker的任何现有场所资源都可以自动执行此操作吗?
结果是可以的。在docker-image-resource
和registry-image-resource
中,在配置资源时都需要在开始时设置标签。但是,我想运行一个任务,从中获取标签,然后从私有仓库下载带有标签的docker映像,然后将其上传到公共仓库。
有可能吗?
答案 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传输文件。