2017-08-30 65 views
0

我使用Debian:latest作爲我的Docker容器的基礎鏡像。更新操作系統需要永遠的時間,同時構建Docker鏡像

問題是,在每個版本中,我必須更新操作系統軟件包,這需要永久。這是我做的:

FROM debian:latest 

RUN apt-get update && apt-get install -y --force-yes --no-install-recommends nginx 

... 

apt-get update && apt-get install永遠持續。我該怎麼做?

+1

你在做什麼,防止它緩存該行? – BMitch

+0

我每次都刪除圖像。但爲什麼它不是新鮮的,幷包含所有最新的軟件包更新?我說'debian:latest',但是它已經過了幾個月了=( –

+0

apt-get update'不會更新任何軟件包,它只是從APT倉庫中提取當前的軟件包列表。 「永遠」? – jwodder

回答

3

泊塢窗圖像是最小的,只包括運行該基本圖像的絕對必需品。對於Debian基本映像,這意味着沒有軟件包回購緩存。因此,當您運行apt-get update時,它將首次從所有回購站下載軟件包回購緩存。如果他們包含了軟件包回購緩存,那麼將會有很多包狀態的兆字節會很快過時,從而導致基礎映像更大,而稍後進行更新的時候幾乎不會減少。

實際的debian:最新的圖像與上個月的提交相比,維護得相當好。你可以在這裏查看它的各種標籤:https://hub.docker.com/_/debian/

爲了縮短你的圖片編譯時間,我建議你不要每次都刪除你的圖片。相反,請執行新構建和標記,一旦構建新圖像,就可以運行docker image prune --force以從先前的構建中刪除未標記的圖像。這使得docker可以重用先前映像構建中的緩存。

或者,您可以創建自己的基礎映像,以便更新頻率更低,並且具有所有應用程序先決條件。像其他圖像一樣構建它,然後將FROM debian:latest更改爲FROM your_base_image

最後一個技巧,避免在您的圖像構建中使用latest,而不是使用FROM debian:9之類的東西,以便debian中的主要版本更新不會破壞構建。

1

不要刪除每個版本上的圖像。只需修改您的Dockerfile並再次構建。 Docker是「聰明的」,它將保持未修改的圖層僅根據您更改的線條進行構建。用於此目的(泊塢窗會自動創建它們)這中間圖像可以用這個命令很容易地刪除:

docker rmi $(docker images -q -f dangling=true) 

你可以節省大量的時間與this.Remember,請不要刪除圖像。只需修改Dockerfile並再次構建。在完成所有工作後,完成這個命令,這就是你所需要的。

另一個「好發動清洗命令」可以是:

docker volume prune -f 

但這最後的命令是其他類型的清潔不相關的圖片...更側重於容器。

+0

不幸的是,我在'docker-compose'中使用了這個方法,在任何提交到github的時候,用Jenkins重新部署整個網站。完全放棄舊圖像更容易。但隨後Debian的更新/升級將永遠存在。 –

+0

哦,我不確定,很難知道只有這個信息發生了什麼。也許你正在安裝一個「鎖定」安裝的軟件包,詢問一些問題。嘗試在環境變量'ENV DEBIAN_FRONTEND noninteractive'之前設置。使用它,安裝不會掛在問題上。也許它可以解決你的問題,這只是一個想法。 – OscarAkaElvis

相關問題