2017-07-02 1 views
1

基本的に私はexternalディレクトリにコピーされているgradleビルドのthirdparty jarファイルをたくさん持っています。
これらのジャーはほとんど変化しませんが、Dockerは何とかそのレイヤーをキャッシュしたくありません。ドッカー - 追加されたディレクトリをキャッシュする方法?

マイドッカーファイルはかなり単純化され:

RUN mkdir -p /opt/app 
WORKDIR /opt/app 
COPY app.jar . 
COPY project /opt/app/project 
COPY external /opt/app/external 
EXPOSE 2550 7000 

そのexternalディレクトリ内のすべてのファイルjarや大きさのmd5sumが同一です。 statは、これらのファイルでinodeが異なっていることを示しています(もちろんファイル時間が必要ですが、ドッカーのドキュメントによるとmtimeは比較時に無視されます)。

しかし、私は、ドッキングウィンドウの歴史を見れば、私は層がキャッシュされていないことを参照してください。

タグ:テスト-1

1be1e9a7084b  17 hours ago  /bin/sh -C#(nop) EXPOSE 2550/tcp 7000/tcp  0B 
e593cf804634  17 hours ago  /bin/sh -C#(nop) COPY dir:b2ed14f41affcee... 60.4MB 
a55be55e6e68  17 hours ago  /bin/sh -C#(nop) COPY dir:f1abbe11a6a64fe... 566kB 
e8823ec84dfb  17 hours ago  /bin/sh -C#(nop) COPY file:ba5ef09e42eda4... 523kB 
041f6f6957b5  17 hours ago  /bin/sh -C#(nop) WORKDIR /opt/app    0B 
15e4c78e545c  17 hours ago  /bin/sh -c mkdir -p /opt/app     0B 

タグ:テスト-2

aacb13926d18  17 hours ago  /bin/sh -C#(nop) EXPOSE 2550/tcp 7000/tcp  0B 
7ebe12849fad  17 hours ago  /bin/sh -C#(nop) COPY dir:b2ed14f41affcee... 60.4MB 
4bf898283d11  17 hours ago  /bin/sh -C#(nop) COPY dir:f1abbe11a6a64fe... 566kB 
886630b2a05a  17 hours ago  /bin/sh -C#(nop) COPY file:5ad60a31d9e72d... 523kB 
041f6f6957b5  17 hours ago  /bin/sh -C#(nop) WORKDIR /opt/app    0B 
15e4c78e545c  17 hours ago  /bin/sh -c mkdir -p /opt/app     0B 

ので、どのように私はドッカーに、決して変わらないサードパーティのジャーとレイヤーを再利用することができますか? ビルド後に毎回外部ディレクトリが再作成されるためですか?他の方法はありますか?

答えて

1

最初のCOPY文として、COPY外部/ opt/app/externalレイヤーを先頭に移動します。 1つのDockerレイヤーが変更された場合は、そのレイヤーが無効になります。最も静的なCOPYとコマンドを上に移動し、頻繁に変更するコマンドをDockerfileの一番下に移動します。

+0

ええ、私は今、おかげです! – gerasalus

関連する問題