我有下面的脚本,我希望将构建和发布到我的Azure容器注册表。
echo "env override file:${1}"
cd ../.devcontainer
docker compose --env-file .env --env-file $1 build
#parse image name and tag from above output here into $docker_image and $tag
docker image tag $docker_image:$tag mycontainerreg.azurecr.io/$docker_image:latest
docker push mycontainerreg.azurecr.io/$docker_image:latest
在compose命令之后,显示的最后一个输出是:=> => naming to docker.io/library/my_app:v1.0
我希望能够从输出中提取图像名称和标签,以便在后续的docker命令中使用。我该怎么做?
另外,标记的最佳实践是什么?我用版本号标记。但是我是否也应该像我一样重新标记为最新版本-因为它会简化下游部署?
为了完整性,我的docker-compose相关上下文:
services:
my_app:
container_name: my_app_${ENV}
image: "my_app:${VERSION:-local}"
env文件包括.env、env_dev等:
VERSION=v1.0
ENV=local
USER_ID=1000
GROUP_ID=1000
USER_NAME=user1
SVC_PORT=5000
DB_PORT=5434
2条答案
按热度按时间bkkx9g8r1#
将输出存储在变量中,让它成为输出
关于标记:
a0x5cqrl2#
我只是从Compose文件中复制
image:
,而不尝试解析Compose的输出。Compose的环境变量替换是POSIX shell语法的一个子集,您应该能够在脚本中使用完全相同的字符串格式。当您在Compose文件中同时设置
build:
和image:
时,image:
将设置构建映像的名称,因此更好的方法可能是将Composeimage:
设置为您想要的。然后,您可以docker-compose push
构建的映像,而无需手动提取其名称。我建议使用日期戳、源代码控制提交ID或版本字符串标记图像是最佳实践。像
latest
这样的固定标签可能会导致一些问题,特别是如果你使用Kubernetes,因为不清楚你使用的是哪个“最新”镜像-如果本地系统已经有一个“最新”镜像,那么容器系统通常不会检查上游注册表是否有一个更新的镜像。