如何在Docker中创build命名和最新的标签?

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

我希望有一天我会有更多版本的图像,所以我会重新运行这个过程,只是使用另一个标签名称。

到现在为止还挺好。 这工作很好,一切都很好。

但是,这是问题开始的地方,我也想永远有最新的图像标记广告latest另外。 所以我想我需要把两个名字给相同的图像。

我该怎么做呢? 我是否真的需要重新运行docker build完全相同的版本,但这次使用另一个标记,是否有更好的select?

构build图像时可以有多个标签:

 $ 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 tag <image> <newName>/<repoName>:<tagName>

1.用creack / node构build和标记图像:最新

$ ID=$(docker build -q -t creack/node .)

2.添加一个新的标签

$ docker tag $ID creack/node:0.10.24

3.你可以使用这个,从构build中跳过-t部分

$ docker tag $ID creack/node:latest

这是我的bash脚本

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

如果重新创build相同的版本,则可以删除未标记的图像

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

链接

要么

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

要么

清理命令:自docker 1.13开始引入清理命令。 删除所有未使用的容器,图像,networking和卷:

docker system prune

或单独:

docker container prune

docker image prune

docker network prune

docker volume prune

ID=$(docker build -t creack/node .)不适用于我,因为ID将包含构build的输出。

所以我正在使用这个小的BASH脚本:

 #!/bin/bash set -o pipefail IMAGE=...your image name... VERSION=...the version... docker build -t ${IMAGE}:${VERSION} . | tee build.log || exit 1 ID=$(tail -1 build.log | awk '{print $3;}') docker tag $ID ${IMAGE}:latest docker images | grep ${IMAGE} docker run --rm ${IMAGE}:latest /opt/java7/bin/java -version 

亚伦回答的变化。 使用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 

只需grepdocker images 的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 

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