2017-07-02 106 views
1

基本上我有一堆來自Gradle構建的第三方jar文件,它們被複制到external目錄中。
那些罐子幾乎不會改變,但Docker不知何故不想緩存該圖層。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 

所有jar文件和大小在external目錄的md5sum是相同的。 stat只顯示inode在這些文件上有所不同(當然期待文件時間,但根據docker文檔,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 

所以我該如何強制docker重複使用那些幾乎不會改變的第三方瓶子的圖層? 是否因爲每次構建後都重新創建外部目錄?有沒有其他方法?

回答

1

將COPY外部/ opt/app/external圖層作爲第一個COPY語句移動到頂部。如果一個Docker圖層發生了變化,則下面的圖層將失效。將大多數靜態COPY和命令移動到頂部,並將頻繁更改的命令移動到Dockerfile的底部。

+0

恩,我現在感覺很蠢,謝謝! – gerasalus