0.10.24
としてタグ付けしたいイメージがあるとします(私の場合はNode.js 0.10.24を含むイメージです)。 Dockerfileを使用してdocker build
を実行し、-t
パラメーターを使用してタグを提供することによって、そのイメージを作成しました。
いつかその画像の追加バージョンがあると思うので、別のタグ名でプロセスを再実行します。
ここまでは順調ですね。これは素晴らしくうまく機能し、すべてうまくいきました。
しかし、これが問題の始まりです。また、常に最新の画像タグ付きの広告latest
を追加したいと思います。だから私は2つの名前を同じイメージに付ける必要があると思います。
どうやってこれをするの?まったく同じバージョンでもう一度docker 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>
画像を作成してcreack/node:latestでタグ付けします
$ ID=$(docker build -q -t creack/node .)
新しいタグを追加
$ docker tag $ID creack/node:0.10.24
これを使ってbuildから-tの部分を飛ばすことができます
$ docker tag $ID creack/node:latest
これが私のbashスクリプトです
docker build -t ${IMAGE}:${VERSION} .
docker tag ${IMAGE}:${VERSION} ${IMAGE}:latest
同じバージョンを再構築した場合は、タグなしイメージを削除できます。
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では、クリーンアップコマンドが導入されました。未使用のコンテナ、イメージ、ネットワーク、ボリュームをすべて削除するには:
docker system Prune
または個別に
docker container Prune
docker image Prune
docker network Prune
docker volume Prune
ID
にはビルドからの出力が含まれるので、ID=$(docker build -t creack/node .)
は私にはうまくいきません。
だから私はこの小さな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 images
からIDをgrep:
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
またはログファイルにリダイレクトできます。).
アーロンの答えのバリエーション。一時ファイルなしで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