如何在Docker中创建命名和最新标记?
假设我有一个图像,我想标记为如何在Docker中创建命名和最新标记?,docker,tags,Docker,Tags,假设我有一个图像,我想标记为0.10.24(在我的例子中,它是一个包含Node.js 0.10.24的图像)。我使用Dockerfile并执行docker build以及使用-t参数提供标记来构建该图像 我希望有一天我会有该图像的其他版本,因此我将重新运行该过程,只使用另一个标记名 到目前为止,一切顺利。这很好用,一切都很好 但是,这就是问题的开始,我还希望始终将最新的图像标记为adlatest。所以我想我需要给同一个图像取两个名字 我该怎么做?我真的需要在完全相同的版本上再次运行docker
0.10.24
(在我的例子中,它是一个包含Node.js 0.10.24的图像)。我使用Dockerfile并执行docker build
以及使用-t
参数提供标记来构建该图像
我希望有一天我会有该图像的其他版本,因此我将重新运行该过程,只使用另一个标记名
到目前为止,一切顺利。这很好用,一切都很好
但是,这就是问题的开始,我还希望始终将最新的图像标记为adlatest
。所以我想我需要给同一个图像取两个名字
我该怎么做?我真的需要在完全相同的版本上再次运行
docker build
,但这次使用另一个标记,有更好的选择吗?一旦你有了图像,你可以使用
$ docker tag <image> <newName>/<repoName>:<tagName>
$ docker tag $ID creack/node:0.10.24
$ docker tag $ID creack/node: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
这是我的bash脚本
docker build -t ${IMAGE}:${VERSION} .
docker tag ${IMAGE}:${VERSION} ${IMAGE}:latest
如果使用重新生成相同版本的图像,则可以删除未标记的图像
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
或单独:
docker container prune
docker image prune
docker network prune
docker volume prune
亚伦回答的变化。 在没有临时文件的情况下使用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
只需从docker images中grep 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 .
参考资料:这似乎不再有效了?build命令不返回映像id,id包含整个构建日志。构建日志应该在stderr上,您可以在github上打开bugreport。否则,当您使用-t构建时,您可以直接使用给定的标记并完全丢弃图像id。在我的示例中,第一行生成一个图像
creack/node:latest
,然后您可以使用docker-tag-creack/node:latest-creack/node:0.10.24
对其进行标记,这与REV=$(hg-identifite--num)之类的东西很好地配合使用
要使最新标记正常工作,您可能需要执行docker标记-f$ID creack/node:latest
以强制使用最新标记(如果以前的图像已经是最新的),使用:ID=$(docker build-q-t myrepo/myname:mytag)。“-q”表示仅将ID写入标准输出。你应该总是指定一个标记,就像你不知道一样,即使你正在构建一个旧的分支,也会使用标记'latest'。相关问题:在我的机器上(Ubuntu14.04)awk'{print$3}'
awk{print$3},所以我使用的命令是docker rmi$(docker images-a | grep“^ awk'{print$3}'))
docker标签中不再存在-f
选项。用法就是docker tag IMAGE[:tag]IMAGE[:tag]
@2Fast2BCn:假设你在docker build&docker run
之后也需要docker push
,你是用:latest
还是${VERSION}
来推?我想你可以推这两个。无论如何,它只会存储一次。或者您可以将-q
/-quiet
传递到build
,如中所述,您也可以省略:latest
部分,因为这是默认部分:docker build-t whenry/fedora jboss-t whenry/fedora jboss:v2.1。
#!/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
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
$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .