LoginSignup
7
3

More than 5 years have passed since last update.

Dockerの全Image,全Layerを保存するワンライナー

Last updated at Posted at 2017-12-24

コマンド

  • docker save -o ~/caches/app.tar $(docker image ls -q | xargs -I XXX docker history -q XXX |grep -v \<missing\> | tr '\n' ' ')

解説

  • docker save -o ~/caches/app.tar
    • docker save dockerのimageをtarに保存
    • -o オプションはoutputオプションで指定した場所に保存する、今回は ~/caches/app.tarに保存
  • $(docker image ls -q | xargs -I XXX docker history -q XXX | grep -v \<missing\> | tr '\n' ' ')
    • docker image ls はimageのリストを表示する
    • -q オプションはIDのみを表示する
    • xargs -I XXX docker history -q XXX
      • docker image ls -qで取得したImageのIDをパイプでxargs -I XXXに渡し、XXXdocker history -q XXXの引数に渡している
      • docker historyはdocker image履歴を取得するコマンド
      • -q オプションはIDのみを表示する
    • grep -v \<missing\>
      • は履歴の中から <missing> を除去
    • tr '\n' ' '
      • docker historyの出力が改行区切りで返ってくるので、スペース区切りに変換 -$(docker image ls -q | xargs -I XXX docker history -q XXX | grep -v \<missing\> | tr '\n' ' ') dockerの全layerのidをdocker saveの引数にしている。

経緯

  • Circle CIでテストする時にdockerのimageをsave_cache機能でcircleCI保存して、次回build時はdockerのcacheを再利用するために保存したかった。
  • docker-composeを利用して複数コンテナを利用しているので、CI環境にある全部のimageのlayerを保存する必要があった。

おわりに

  • CI環境のcache保存するために利用しているけど、他の人に自分が持っているdockerの環境を全部渡すためにも利用できるかもしれない。

参考

7
3
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
7
3