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

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

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

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

我怎么做呢?我真的需要重新运行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

其他回答

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

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

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

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

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

docker build -t image_name:tag_name .

否则,它将自动为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:最新的

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