2017-09-14 92 views
1

我正在嘗試爲正在處理的項目創建Dockerfile。通過aptpip安裝所有必需的軟件包需要幾分鐘的時間。由於所需的軟件包不會改變,有沒有辦法讓我可以跳到改變的步驟?如何加快Docker構建

我在OS X上運行Docker CE(版本17.06.2-ce-mac27)。

回答

1

是的,你可以。創建兩個圖像

Dockerfile基

FROM python:3.6 
RUN pip install selenium 

然後建立使用下面

docker build -f Dockerfile-base -t base . 

Dockerfile

FROM base 
COPY . . 

所以你不會重建基地。並繼續在主Dockerfile上工作。還有其他可能的解決方案,例如部署本地Nexus package manager並將其用於本地緩存包。但是,對於開發人員而言,然後太多努力

1

如果您使用docker緩存,則圖像的每一層只會在其更改或上面的圖層發生更改時纔會重建。

FROM alpine:latest   # First layer 
RUN apk add git gcc   # Second layer 
RUN apk add another-package # Third layer 

如果第一或第二層被改變(說你添加的OpenSSL到例如第二行),第二和第三層將不使用的高速緩存被重建。
但是,如果只更改第三層,則只有該層必須重建,而第一層和第二層是從緩存構建的。
所以有時你可以將所有應該內置的東西很少移動到文件的頂部,然後讓重建的東西往往會進一步向下(即使更多圖層增加了圖像大小)。

如果您願意將其移動到多個圖像中,您絕對可以像塔倫在上面所說的那樣做。 如果只有你想從一個圖像移動到另一個圖像的數據(也就是說,沒有安裝軟件包等),你可以檢查到multi-stage builds,它允許你定義一個文件中的多個圖像,並讓它們從一個文件中複製數據在之前建立在文件中。

要了解關於構建緩存如何工作的更多信息,請查看docs

+0

不要忘了,theres緩存破解operaton – herm