我有以下脚本,希望能构建并发布到我的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

作曲命令后,显示的最后一个输出为:

=> => naming to docker.io/library/my_app:v1.0

我希望能够从该输出中提取image名称和标签,以在后续Docker命令中使用。我怎样才能做到这一点?

还有什么是标记的最佳实践?我标记了一个版本号。但是,我是否也应该像IM一样作为最新版本作为最新版本,因为它可以简化下游部署?

为了完整,我的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)。
  • 使用“最新”标签进行测试,开发和内部使用,但是 避免将其用于生产。
  • 定期将“最新”标签更新为最新稳定版本 适当的时候,但请确保在部署前进行彻底测试 生产。