如何在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
只需grep从docker 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
或日志文件。