web-dev-qa-db-ja.com

Dockerで名前付きの最新のタグを作成する方法

0.10.24としてタグ付けしたいイメージがあるとします(私の場合はNode.js 0.10.24を含むイメージです)。 Dockerfileを使用してdocker buildを実行し、-tパラメーターを使用してタグを提供することによって、そのイメージを作成しました。

いつかその画像の追加バージョンがあると思うので、別のタグ名でプロセスを再実行します。

ここまでは順調ですね。これは素晴らしくうまく機能し、すべてうまくいきました。

しかし、これが問題の始まりです。また、常に最新の画像タグ付きの広告latestを追加したいと思います。だから私は2つの名前を同じイメージに付ける必要があると思います。

どうやってこれをするの?まったく同じバージョンでもう一度docker buildを再実行する必要がありますか?しかし今回は別のタグを使用します。もっと良い選択肢はありますか?

197
Golo Roden

画像を作成するときに複数のタグを付けることができます。

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

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

192
Tommy

あなたがあなたのイメージを持ったら、あなたは使うことができます

$ docker tag <image> <newName>/<repoName>:<tagName>
  1. 画像を作成してcreack/node:latestでタグ付けします

    $ 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
    
147
creack

これが私の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
31
2Fast2BCn

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
19
Aaron Digulla

ただ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
5
Tony