我有以下脚本,希望能够构建并发布到我的 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 命令之后,显示的最后输出是:
=> => 命名为 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
最佳答案
将输出存储在变量中,让它成为输出
output="=> => naming to docker.io/library/my_app:v1.0"
image_and_tag=$(echo "$output" | awk -F '/' '{print $NF}')
image_name=$(echo "$image_and_tag" | awk -F ':' '{print $1}')
image_tag=$(echo "$image_and_tag" | awk -F ':' '{print $2}')
echo "Image Name: $image_name"
echo "Image Tag: $image_tag"
关于标记:
- 使用特定版本标签进行生产部署(例如 v1.0、 v1.1)。
- 使用“最新”标签进行测试、开发和内部使用,但是 避免将其用于生产。
- 定期将“最新”标签更新为最新的稳定版本 在适当的时候,但确保在部署之前进行彻底的测试 到生产。
关于azure - 如何从 docker-compose 构建输出中提取图像名称和标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77039347/