假设我有一个图像,我想标记为0.10.24(在我的情况下,它是一个包含Node.js 0.10.24的图像)。我使用Dockerfile和执行docker构建,并使用-t参数提供一个标记来构建该映像。

我希望有一天我将拥有该图像的其他版本,因此我将重新运行该过程,只是使用另一个标记名。

到目前为止,一切顺利。这工作得很好,一切都很好。

但是,这就是问题开始的地方,我还想总是有最新的图像标记广告最新另外。所以我想我需要给同一个图像起两个名字。

我怎么做呢?我真的需要重新运行docker构建在完全相同的版本,但这次使用另一个标签,是有更好的选择吗?


当前回答

只需从docker映像中获取ID:

docker build -t creack/node:latest .
ID="$(docker images | grep 'creak/node' | head -n 1 | awk '{print $3}')"
docker tag "$ID" creack/node:0.10.24
docker tag "$ID" creack/node:latest

不需要临时文件,并提供完整的构建输出。您仍然可以将其重定向到/dev/null或日志文件。

其他回答

在构建映像时可以有多个标记:

$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .

参考:https://docs.docker.com/engine/reference/commandline/build/ # tag-image-t

只需从docker映像中获取ID:

docker build -t creack/node:latest .
ID="$(docker images | grep 'creak/node' | head -n 1 | awk '{print $3}')"
docker tag "$ID" creack/node:0.10.24
docker tag "$ID" creack/node:latest

不需要临时文件,并提供完整的构建输出。您仍然可以将其重定向到/dev/null或日志文件。

亚伦回答的变化。 使用不带临时文件的sed

#!/bin/bash
VERSION=1.0.0
IMAGE=company/image
ID=$(docker build  -t ${IMAGE}  .  | tail -1 | sed 's/.*Successfully built \(.*\)$/\1/')

docker tag ${ID} ${IMAGE}:${VERSION}
docker tag -f ${ID} ${IMAGE}:latest

在build命令中给docker文件添加标签:

docker build -t image_name:tag_name .

否则,它将自动为docker映像提供最新标签。

这是我的bash脚本

docker build -t ${IMAGE}:${VERSION} .
docker tag ${IMAGE}:${VERSION} ${IMAGE}:latest

然后可以删除未标记的图像,如果您重新构建了相同的版本

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

link

or

docker rmi $(docker images | grep "^<none>" | tr -s " " | cut -d' ' -f3 | tr '\n' ' ')

or

清理命令:

Docker 1.13引入了清理命令。删除所有未使用的容器、映像、网络和卷:

docker system prune

或个人:

docker container prune
docker image prune
docker network prune
docker volume prune