我需要为我的应用程序功能创建一些图像(azure中的几个web应用程序可以一起工作(,我还想用几个标签标记图像,如最新版本、次要版本、主要版本和完整版本。我在这里读到了有关扩展的内容https://stackoverflow.com/a/59911532/4511281和https://www.back2code.me/2020/01/multiple-image-tags-with-docker-compose/.
但我不太清楚,这会重建同一个图像4次,还是只构建一次,然后标记它们4次?或者我应该只是用";最新的";标记,然后使用一些其他命令标记图像并将其推送到容器存储中?
由于Compose 2.6.0,您可以在build
部分中定义tags
的列表:
services:
foo:
image: foo:latest # If omitted will default to 'project-service:latest'.
build:
context: .
tags:
- foo:1.2
- foo:1.2.3
docker buildx bake
还不支持这一点,在这种情况下,您必须将tags
放入x-bake
:中
services:
foo:
image: foo:latest # Will be ignored if you use tags below.
build:
context: .
x-bake:
output: type=image
tags:
- foo:latest
- foo:1.2
- foo:1.2.3
实际上有几种方法可以构建图像并添加多个标记。
-
慢版本与docker组成
使用作为环境变量传递的不同标记多次重建图像。此版本将在下一次生成中使用已兑现的映像,但无论如何,重建映像都需要时间。
-
使用docker编写扩展
根据网站上的信息,可以用同一个yaml文件定义几个标签。当然,它们可以作为环境变量传递。我不确定这种方法是否不会再次重建图像,还没有测试过。https://www.back2code.me/2020/01/multiple-image-tags-with-docker-compose/#use-yaml扩展定义多个标签
-
使用docker buildx烘焙
我更喜欢这个版本。它还使用了扩展,但它允许您更容易地定义标记。https://docs.docker.com/engine/reference/commandline/buildx_bake/#examples
希望这篇评论能帮助其他人。
那么,希望您制作几个带有多个名称的服务吗?也许您应该创建一个docker-compose.yaml文件来定义所有这些图像标记。每个服务都有自己的目录,其中有docker-compose.yaml在启动时运行的Dockerfile
docker compose run
看看这个项目,我想你想要这样的东西:https://github.com/Aragorn1992gb/multi-docker4/blob/master/docker-compose.yml
使用这种方法,您将有n个不同的映像作为您构建的n个服务。Docker compose将链接所有这些服务,使它们一起工作。在该示例中,您可以看到有"postgres"one_answers"redis"服务,它们从dockerhub加载预构建的映像。然后还有"nginx"、"api"、"client"one_answers"worker"服务,它们的文件夹中的Dockerfile.dev后面。
更清楚地说,服务标签可以与服务的文件夹名称不同。看看"api"服务:
- 这取决于postgres(这就是关系(
- 他的镜像是由Dockerfile.dev文件构建的(您只能在开发环境中使用.dev(。它存储在";服务器";文件夹,然后复制到应用程序文件夹(./server:app(的容器中
- 它在一些目录中有一些卷(这意味着当您更改这些文件夹中的某些内容时,应用程序将进行更新而不重新生成映像(
- 环境指定一些env变量
希望这能帮助您
更新:更好地阅读你的问题,方法是相似的,当然,图像是不同的。