LoginSignup
50
50

More than 5 years have passed since last update.

一括してDockerイメージを最新にアップデートしたい

Posted at

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行おきにコマンドを実行するオプションです。
50
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
50