如何使用 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 调用的 .sh 文件中使用 .NET Core 机密
如何使用 NGINX、PHP-FPM 在 docker-compose.yml 文件中加载 mysqli 扩展