【发布时间】:2021-04-24 04:46:26
【问题描述】:
是否可以让 docker-compose 构建一个镜像并将其推送到远程仓库?现在我做
docker-compose
构建然后我做
docker-compose config --services
遍历名称重建图像名称和标签,然后执行
docker push blah
似乎必须有一种方法可以要求它也推动。
【问题讨论】:
标签: docker docker-compose
是否可以让 docker-compose 构建一个镜像并将其推送到远程仓库?现在我做
docker-compose
构建然后我做
docker-compose config --services
遍历名称重建图像名称和标签,然后执行
docker push blah
似乎必须有一种方法可以要求它也推动。
【问题讨论】:
标签: docker docker-compose
首先,您需要使用aws ecr get-login-password 命令为 AWS ECR 生成登录信息。在 bash 中我做到了:
$ eval $(aws ecr get-login-password)
那么对于每个镜像,ecr 要求你在推送镜像之前创建一个仓库。
在我的 docker-compose.yml 文件中,我有一系列服务:
version: '3'
services:
scheduler:
image: ${DOCKER_REGISTRY}/pipeline_scheduler
build:
context: ../
dockerfile: ./docker/scheduler/Dockerfile
startup:
image: ${DOCKER_REGISTRY}/pipeline_setup
build:
context: ../
dockerfile: ./docker/startup/Dockerfile
# etc...
在我的 .env 文件中,我将 DOCKER_REGISTRY 设置为亚马逊注册表位置:
DOCKER_REGISTRY=919057965832.dkr.ecr.us-east-1.amazonaws.com
在 ecr 中创建存储库(再次使用 bash):
$ for r in $(grep 'image: \${DOCKER_REGISTRY}' docker-compose.yml | sed -e 's/^.*\///')
> do
> aws ecr create-repository --repository-name "$r"
> done
(输出将显示包括帐户和区域在内的注册表信息,因此您可以根据需要检查/设置您的 .env 文件)。
然后你就可以用通常的方式构建和推送镜像了:
$ docker-compose build
$ docker-compose push
【讨论】:
get-login 现在已弃用,应替换为get-login-password。我一直在我的脚本中使用eval $(aws ecr get-login-password --region <region>)。
${DOCKER_REGISTRY} env var 并导致 @ 987654332@.
FOR /F "delims=/ tokens=1*" %%A IN ('docker images 123.dkr.ecr.ca-region.amazonaws.com/* --format "{{.Repository}}"') DO ( echo %%B aws ecr create-repository --repository-name %%B ) PAUSE
从https://docs.docker.com/compose/compose-file/compose-file-v3/#build 的文档中查看这个 sn-p:
如果您指定图像和构建,则 Compose 命名构建 带有 webapp 和 image 中指定的可选标签的图像:
build: ./dir
image: webapp:tag
这将产生一个名为 webapp 和 tagged 标签,由 ./dir 构建。
您至少可以在图像名称中添加图像存储库。然后你应该可以使用docker-compose push 与较新版本的 Docker Compose。
【讨论】: