pull済みのDockerコンテナイメージを一括して最新にするワンライナーです。
sudo docker images | cut -d ' ' -f1 | tail -n +2 | sort | uniq | egrep -v '^(<none>|ubuntu)$' | xargs -P0 -L1 sudo docker pull
どのようにしたらイメージが最新になるか?
Dockerのコンテナイメージを最新にするには、イメージ名を指定してdocker pull
します。
docker pull イメージ名
Docker 1.6では、引数に1つのイメージのみ指定可能であるため、全てのイメージをアップデートしようとしたら、docker pull イメージ名
を繰り返し実行します。イメージが多くなると、手動でやるのは大変なので、上記のワンライナーではxargs
で一括してdocker pull
できるようにしています。
各コマンドの説明
-
sudo docker images
: Dockerのイメージ一覧を取得するコマンドです。イメージ名だけでなくタグ名など他の情報も出ます。
出力例
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mysql 5.7 804442d17d6a 8 days ago 321.7 MB
mysql 5.7.7-rc 804442d17d6a 8 days ago 321.7 MB
mysql 5.7.7 804442d17d6a 8 days ago 321.7 MB
mysql 5.6 56f320bd6adc 8 days ago 282.9 MB
...
-
cut -d' ' -f1
: 1列目だけを抜き出すコマンドです。-dはデリミタにスペースを指定、-fでは1列目を指定しています。
出力例
$ sudo docker images | cut -d' ' -f1
REPOSITORY
mysql
mysql
mysql
mysql
mysql
mysql
mysql
mysql
mysql
-
tail -n +2
: 2行目以降に絞り込みます。つまり1行目(ヘッダ行)を取り除きます。 -
sort
: イメージ名をアルファベット順にソートします。 -
uniq
: イメージ名で重複している行を取り除きます。 -
egrep -v '^(<none>|ubuntu)$'
: アップデート対象外にするイメージ名を指定しています。 -
xargs -P0 -L1 sudo docker pull
: 各イメージをdocker pull
するコマンドです。-P0
は並列してコマンドを実行するオプションです。-P
の数値は並列数です。-P4
のように明示的に4並列などと指定することもできます。-P0
にしておくとxargsがリソースに応じて並列数を決めてくれます。-L1
は1行おきにコマンドを実行するオプションです。