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

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

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

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

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


当前回答

一旦你有了你的图像,你就可以使用

$ docker tag <image> <newName>/<repoName>:<tagName>

用creack/node:latest构建并标记图像 $ ID=$(docker build -q -t creack/node .) 添加一个新标签 $ docker标签$ID creack/node:0.10.24 您可以使用它并跳过构建中的-t部分 $ docker标签$ID creack/node:最新的

其他回答

一旦你有了你的图像,你就可以使用

$ docker tag <image> <newName>/<repoName>:<tagName>

用creack/node:latest构建并标记图像 $ ID=$(docker build -q -t creack/node .) 添加一个新标签 $ docker标签$ID creack/node:0.10.24 您可以使用它并跳过构建中的-t部分 $ docker标签$ID creack/node:最新的

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

所以我使用这个小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

这是我的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

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

docker build -t image_name:tag_name .

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

亚伦回答的变化。 使用不带临时文件的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