LoginSignup
16
12

More than 5 years have passed since last update.

【古い記事・今はできる】CircleCI で Docker ビルドキャッシュができない理由

Last updated at Posted at 2016-10-09

2017/04 追記

CircleCI 2.0 で Docker のバージョンが上がったためキャッシュできるようになりました

以下は CircleCI 1.0 時代になぜできなかったのかの説明

やりたいこと

  • CircleCI の Docker イメージビルドが遅い
    • イメージキャッシュが引き継がれないため
  • なんとかしてイメージキャッシュを引き継ぎたい

TL;DR

CircleCI ドキュメントにある workaround は効かない

Caching Docker layers

docker save でイメージを CircleCI にキャッシュさせて、docker load で引き継ぐ方法。
2016年10月現在 CircleCI の Docker はバージョン 1.10 で、この方法は使えない。

Docker 1.10

Docker 1.10 でレイヤ情報がイメージに含まれなくなった。
https://github.com/docker/docker/issues/20380#issuecomment-184978854

このバージョンでキャッシュを持ち越す方法は、おそらく /var/lib/docker 以下をハックする以外にない。

Docker 1.11 / 1.12

このバージョンでは、tonistiigi/buildcache を使ってビルドキャッシュデータを save & load できる。

また、docker load でレイヤ情報を復元できるようになった (https://github.com/docker/docker/pull/21385) ので、

  1. docker save {history全部} > cache.tar
  2. docker load -i cache.tar

でキャッシュが復元できる。(詳細: https://github.com/docker/docker/issues/20316#issuecomment-221289631)

Docker 1.13 (未リリース)

docker build に cache-from オプションが追加される。
https://github.com/docker/docker/pull/26839

docker build --cache-from myimage:v1.0 -t myimage:v1.1 .

docker save と組み合わせてうまくやれると思う。

結論

CircleCI を諦める / Docker 1.11 以降の対応を待つ

16
12
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
16
12