azure - 如何从 docker-compose 构建输出中提取图像名称和标签

标签 azure docker shell docker-compose devops

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

相关文章:

docker - 通过命令行为Docker Compose创建自定义网络

shell - 使用awk提取最大值和最小值

linux - ASN 查找别名不起作用

azure - 连续执行Azure Function

azure - 在构建中使用 Azure 构建管道日志

azure - 在 Terraform Azure 应用服务资源中配置 CORS

linux - 从 Red Hat Linux 收集系统数据

azure - Azure AD B2C 上的单点注销

docker - ConnectionError : Error -3 connecting to redis:6379. 再试一次

node.js - Docker+node.js : can't spawn phantomjs (ENOENT)