为什么apt-get update 要与apt-get install 在一起
看到很多 Dockerfile 都是把 apt-get update 和 apt-get install 寫在同一個 RUN 指令中的
RUN apt-get update && apt-get install -y
package-bar
package-baz
package-foo
而不是
RUN apt-get update
RUN apt-get install -y
package-bar
package-baz
package-foo
只知道這樣寫在同一個 RUN 中會減少 layer 層,縮減構建鏡像的大小.
但看到有一些文章提到,只有寫在同一個 RUN 中才會對后面的 apt-get install 生效,卻沒有細說原因.
因此產生了一個疑惑,分開寫也應該會對后面的 apt-get install 生效才對啊,因為鏡像的構建是一層一層的,后面的層會基于前面的層.
也就是說,RUN apt-get update 會單獨構建一層,并且會對后面 RUN apt-get install 的層產生作用才對.
分析
假設有一個這樣的 Dockerfile
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y curl
構建鏡像之后,所有的層都會在 Docker 的緩存中.
假設后來修改 apt-get install 添加額外的包
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y curl nginx
Docker 將初始和修改的指令視為相同,并會重用之前構建的緩存.
因此,不會執行 apt-get update,因為構建直接使用之前的緩存版本.
由于 apt-get update 沒有運行,所以構建安裝的 curl 和 nginx 包很可能是過時的版本.
所以,把 apt-get update 和 apt-get install 寫在同一個 RUN 中以獲取最新版本的包,而且還減少了 layer 層.
總結
以上是生活随笔為你收集整理的为什么apt-get update 要与apt-get install 在一起的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: w ndows7管理员密码,Window
- 下一篇: 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇