如何使用 docker-compose 标记 docker 镜像

Posted

技术标签:

【中文标题】如何使用 docker-compose 标记 docker 镜像【英文标题】:How to tag docker image with docker-compose 【发布时间】:2016-02-22 08:05:33 【问题描述】:

我想通过 docker-compose 构建图像并为其设置特定标签。 Documentation 说:

Compose 将使用生成的名称构建和标记它,并使用该名称 之后的图像。

但我找不到指定标签的方法,对于构建的图像,我总是看到“最新”标签。

【问题讨论】:

github.com/docker/compose/issues/2092 是使用不同名称构建图像的问题跟踪支持 【参考方案1】:

似乎文档/工具已更新,您现在可以将image 标签添加到您的脚本中。这对我来说是成功的。

例子:

version: '2'
services:

  baggins.api.rest:
    image: my.image.name:rc2
    build:
      context: ../..
      dockerfile: app/Docker/Dockerfile.release
    ports:
      ...

https://docs.docker.com/compose/compose-file/#build

【讨论】:

确实,它说“如果您指定图像以及构建,那么 Compose 使用 webapp 和图像中指定的可选标签命名构建的图像” 多么奇怪的界面!一个字段的存在会反转处于相同缩进级别的另一个字段的语义。 是的,我发现这个概念很奇怪。我期待一个tag 选项。我在文档中寻找标签无济于事 @Navin 如果这还不够奇怪,请尝试将 image: my.image.name:rc2 放入 docker-compose.yml 并将 build: . 放入 docker-compose.override.yml 并让 docker-compose 合并两者! (你得到与接受的答案相同的效果) 我通过传递环境变量 OP_ENV(开发、阶段或产品)来构建/运行。我可以在标签中引用它,对我来说效果很好:image: avail_imageresizer/build_test_uwsgi:$OP_ENV 【参考方案2】:

原始答案2015 年 11 月 20 日

截至今天,没有特定标签的选项。 Docker compose 只是发挥了它的魔力,并像你看到的那样分配一个标签。调用 docker-compose 后,您始终可以调用一些脚本 docker tag <image> <tag>

现在有一个如上所述的选项或here

build: ./dir
image: webapp:tag

【讨论】:

【参考方案3】:

如果你指定镜像和构建,那么 Compose 使用 webapp 和镜像中指定的可选标签命名构建的镜像:

build: ./dir
image: webapp:tag

这会生成一个名为 webapp 并标记为 tag 的图像,由 ./dir 构建。

https://docs.docker.com/compose/compose-file/#build

【讨论】:

【参考方案4】:

你可以试试:

services:
  nameis:
    container_name: hi_my
    build: .
    image: hi_my_nameis:v1.0.0

【讨论】:

【参考方案5】:

我想补充一点,您还可以通过环境变量或 .env 文件来管理您的标签版本。

https://docs.docker.com/compose/environment-variables/#the-env-file

export TAG=1.11

例子:

version: '3.3'
services:

  baggins.api.rest:
    image: my.image.name:$TAG
    build:
      context: ../..
      dockerfile: app/Docker/Dockerfile.release
    ports:
      ...

docker-compose config 验证

在我的 ci 管道中,我的第一个构建被标记为用于运行测试的一次性值。然后在推送到注册表之前,我将标签更改为最新并再次重建(几乎是瞬间,因为它已全部缓存)。

【讨论】:

【参考方案6】:

如果您已经构建了镜像,您可以使用docker tag 命令重新标记它:

docker tag imagename imagename:v1.0

docker tag imagename:v1.0 imagename:v1.1

如果您的存储库附加了多个标签,并且想要删除其中一个,可以使用docker rmi 命令:

$ docker rmi imagename:v1.0
Untagged imagename:v1.0

参考:

https://docs.docker.com/engine/reference/commandline/tag/ https://docs.docker.com/engine/reference/commandline/rmi/

【讨论】:

【参考方案7】:

确保 Dockerfile 中的 FROM 语句包含正确的映像名称。

【讨论】:

以上是关于如何使用 docker-compose 标记 docker 镜像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 docker-compose 中设置主机名?

如何在从 docker-compose 调用的 .sh 文件中使用 .NET Core 机密

docker-compose安装

如何使用 NGINX、PHP-FPM 在 docker-compose.yml 文件中加载 mysqli 扩展

docker编排参数详解(docker-compose.yml配置文件编写)

在 AWS ECS 上使用 docker-compose 进行持续部署的最佳实践