在Dockerfile我有一個是從裝入基本映像節,這樣說docker是否構建兩次運行命令?
FROM mysql:5.7
的Dockerfile內爲MySQL運行和apt-get update命令,但我不明白的是爲什麼我需要在我自己的Dockerfile中的FROM語句之後運行apt-get update?我知道我需要運行apt-get更新,因爲隨後的命令會失敗,直到我運行apt-get,但我認爲FROM映像已經運行了這些命令?
在Dockerfile我有一個是從裝入基本映像節,這樣說docker是否構建兩次運行命令?
FROM mysql:5.7
的Dockerfile內爲MySQL運行和apt-get update命令,但我不明白的是爲什麼我需要在我自己的Dockerfile中的FROM語句之後運行apt-get update?我知道我需要運行apt-get更新,因爲隨後的命令會失敗,直到我運行apt-get,但我認爲FROM映像已經運行了這些命令?
望着Dockerfile for mysql,你會看到一個模式像上幾個RUN命令如下:
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
wget \
&& rm -rf /var/lib/apt/lists/*
第一線採集包回購的當前狀態,那麼安裝運行,並最後,軟件包回購狀態從文件系統中刪除。這是繼best practices from Docker以防止兩個問題:
常見的錯誤是試圖用兩個單獨的RUN命令將apt-get update
與apt-get install
分開。由於docker緩存圖層的方式,如果apt-get update命令與很久以前運行的命令相同,docker將重新使用緩存的結果。如果您然後更改apt-get install
命令以包含不同的軟件包,則會發現映像將無法生成,因爲緩存的更新命令指向不再位於軟件包儲存庫中的映像。