> 1.10、私はこの問題について何かを見つけました:このDockerfile
FROM busybox
RUN mkdir this-is-a-test
RUN echo "hello world"
実行docker build -t caching-test .
を考えるとhttps://github.com/docker/docker/issues/20316#issuecomment-221289631
その後、我々は、ドッキングウィンドウの履歴キャッシングで画像を含む層を見ることができますテスト
3e4a484f0e67 About an hour ago /bin/sh -c echo "Hello world!" 0 B
6258cdec0c4b About an hour ago /bin/sh -c mkdir this-is-a-test 0 B
47bcc53f74dc 9 weeks ago /bin/sh -C#(nop) CMD ["sh"] 0 B
<missing> 9 weeks ago /bin/sh -C#(nop) ADD file:47ca6e777c36a4cfff 1.113 MB
1.11で保存/読み込みを変更すると、親と子のレイヤー間の関係は保持されますが、ドッカーで一緒に保存することによってのみ保存されます。私たちは、これが私たちのドッカー履歴出力から2番目に最上層であるdocker inspect test | grep Parent.
$ docker inspect caching-test | grep Parent
"Parent": "sha256:6258cdec0c4bef5e5627f301b541555883e6c4b385d0798a7763cb191168ce09",
を実行することによって、最終的なテスト画像の親を見ることができます。
saveとloadを使用してキャッシュを再作成するには、親として参照されているすべてのイメージとレイヤーを保存する必要があります。実際には、これは通常、同じコマンドでFROMイメージと同様に各レイヤーを保存する必要があることを意味します。
docker save caching-test 6258cdec0c4b busybox > caching-test.tar
- IDの代わりにレイヤー名をsaveコマンドに与えることもできます。
すべてを消去してから、tarファイルからイメージをリロードしてみましょう。 docker rmi $(docker images -q)
。イメージが存在しないことを確認します。
docker load -i caching-test.tar
を実行します。イメージを見ると、ビジーボックスとキャッシングテストが表示されます。 docker history caching-test
を実行すると、画像が最初に作成されたときとまったく同じ出力が表示されます。これは、親子関係が保存と読み込みによって保持されたためです。 docker inspect caching-test | grep Parent
を実行して、親レイヤと同じIDを指定することもできます。
同じDockerfileのリビルドを実行すると、キャッシュが使用されていることが表示されます。
Sending build context to Docker daemon 5.391 MB
Step 1 : FROM busybox
---> 47bcc53f74dc
Step 2 : RUN mkdir this-is-a-test
---> Using cache
---> 6258cdec0c4b
Step 3 : RUN echo "hello world"
---> Using cache
---> 3e4a484f0e67
Successfully built 3e4a484f0e67
EDIT:この下には新しいものを構築する前にdocker pull theimagefromthefirstdockerfileontheregistry
可能な第2のマシンでのみ 1.10ドッキングウィンドウの前に
に動作します。
そうすれば、すべてのレイヤーが2台目のマシンに存在することになります。
docker-engineは、レイヤーが構築されるたびにレジストリにクエリを出しません。それはあまりにも遅く/重いので別の方法があるとは思われません。
これを試しましたか? https://blog.docker.com/2015/10/registry-proxy-cache-docker-open-source/ –
@JosipIvicはい、とにかくプライベートレジストリから引き出されたレイヤは無視されます。 –