コマンド
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
に渡し、XXX``docker 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の環境を全部渡すためにも利用できるかもしれない。
参考
- docker save
- docker image
- docker history
- xargs のオプションいろいろ
- Pulling build cache
- circle CI