【问题标题】:create multiple tag docker image创建多个标签泊坞窗图像
【发布时间】:2014-03-22 15:13:06
【问题描述】:

如何将多个标签附加到一个 Docker 映像?是否可以使用一个 Dockerfile 创建多个标签?

有可能,不知何故;例如docker pull ubuntu 会得到几张图片,其中一些有多个标签:

ubuntu                  13.10               9f676bd305a4        2 weeks ago         182.1 MB
ubuntu                  saucy               9f676bd305a4        2 weeks ago         182.1 MB
ubuntu                  raring              eb601b8965b8        2 weeks ago         170.2 MB
ubuntu                  13.04               eb601b8965b8        2 weeks ago         170.2 MB
ubuntu                  12.10               5ac751e8d623        2 weeks ago         161.4 MB
ubuntu                  quantal             5ac751e8d623        2 weeks ago         161.4 MB
ubuntu                  10.04               9cc9ea5ea540        2 weeks ago         183 MB
ubuntu                  lucid               9cc9ea5ea540        2 weeks ago         183 MB
ubuntu                  12.04               9cd978db300e        2 weeks ago         204.7 MB
ubuntu                  latest              9cd978db300e        2 weeks ago         204.7 MB
ubuntu                  precise             9cd978db300e        2 weeks ago         204.7 MB

【问题讨论】:

标签: docker


【解决方案1】:

从 1.10 版本开始,您现在可以在构建时一次添加多个标签:

docker build -t name1:tag1 -t name1:tag2 -t name2 .

来源:Add ability to add multiple tags with docker build

【讨论】:

  • 我认为这是在构建过程中易于使用的更正确的答案
  • 这是不对的,因为ubuntu的tag不同版本,内容不一样。
  • 如何让这些标签在推送后出现在存储库中?不幸的是,只有我在 push 命令中使用的那个出现在 repo 中。
  • 即使在 2018 年底 Docker 在这方面仍然非常不成熟,每个“标签”都必须仍然单独推送,尽管它们附加到同一个镜像。这里需要一些类似于 Git 标签的能力。
  • @EdRandall 没关系,因为如果图像已经存在于您的存储库中,那么 docker 只需将标签添加到图像而不是再次推送整个图像。
【解决方案2】:

你不能用 Dockerfiles 创建标签,但是你可以通过命令行在你的镜像上创建多个标签。

使用它来列出您的图像 ID:

$ docker images

然后标记离开:

$ docker tag 9f676bd305a4 ubuntu:13.10
$ docker tag 9f676bd305a4 ubuntu:saucy
$ docker tag eb601b8965b8 ubuntu:raring
...

【讨论】:

  • 重点在Dockerfile中,这些命令无法写入到Dockerfile中。
  • 请参阅this answer 了解避免手动找出 ID 的方法。
【解决方案3】:

如何不做:

在构建图像时,您也可以这样标记它。

docker build -t ubuntu:14.04 .

然后你用另一个标签再次构建它:

docker build -t ubuntu:latest .

如果您的 Dockerfile 充分利用了缓存,应该会输出相同的图像,并且它实际上与重新标记相同的图像相同。如果您执行docker images,那么您将看到它们具有相同的 ID。

不过,这可能会出错...... 但是就像@david-braun 说的,你不能用 Dockerfiles 自己创建标签,只能用 docker 命令。

【讨论】:

  • 我可以补充一点,像@david-braun 那样做会更干净。
  • 不要构建两次。见this answer
  • 构建两次破坏了 CI/CD 的概念...第二次编译可能会因依赖关系而有所不同...一切都在时间安排中。
  • 有了明确的“如何不做”标题,这个答案现在确实增加了对它如何工作的理解。
猜你喜欢
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
相关资源
最近更新 更多