新手剛入門,自己學著創作系統鏡像和各種應用的鏡像
我先自己製作了一個centos67的鏡像,然後基於centos67裝了vim,再docker commit 保存為centos67vim然後再基於centos67vim上編譯安裝了mysql5.6再commit保存為mysql56,可是發現容量就達1.591GB了
我再docker pull mysql 發現為什麼官方提供的只有360.3
多謝各位大人幫忙解答! !
在製作鏡像的過程中,我們要注意幾點:1.檔案系統是UnionFs,Dockerfile中每一條RUN都會產生一個層次(layer)。所以我們需要在每一條RUN之後清理產生的資料。因為產生的結果(3G的大小)是各層次大小的線性疊加。 2.為什麼官方的鏡像普遍偏小呢?我們就以mysql:5.6來作為參考,來分析一下:
RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/*在更新組成以後,接著刪除了apt的快取的包文件。通常來說這個資料夾視情況會佔用100M左右。
RUN { ...&& apt-get update && apt-get install -ymysql-server="${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* && rm-rf / var/lib/mysql && mkdir -p /var/lib/mysql 在安裝db以後,照例刪除快取的套件檔案。刪除/var/lib/mysql能清除範例資料庫。
而我們觀察一下,hub.docker.com中最常用的vim包,我們發現haron/vim鏡像是300M用的scratch作為基礎鏡像。
在hub.docker.com上粗略找了下,沒有找到用centos做基礎的mysql鏡像。個人估計是快取的包沒有刪掉,導致的問題。
mysql鏡像分析
haron/vim分析
Centos基礎鏡像分析
Ubuntu基礎鏡像分析
怪不得我的安裝了一個lamp一件安裝包就3G了,原來一個mysql就增加了1G
還沒入門建議讀完入門教學再玩
沒刪除暫存檔就commit
你可以查看mysql的官方鏡像的dockerfile,基礎鏡像估計也應該不一樣。一般情況下,很多官方的基礎鏡像都是很小的。例如scratch,然而如果使用一個ubuntu什麼的,就得180M左右 (感謝 @imdjh 指正) ,centos 我沒留意過。
scratch
如果你可以把你的Dockerfile公開出來的話,大家可以幫你看看。主要還是Dockerfile的撰寫問題
在製作鏡像的過程中,我們要注意幾點:
1.檔案系統是UnionFs,Dockerfile中每一條RUN都會產生一個層次(layer)。所以我們需要在每一條RUN之後清理產生的資料。因為產生的結果(3G的大小)是各層次大小的線性疊加。
2.為什麼官方的鏡像普遍偏小呢?我們就以mysql:5.6來作為參考,來分析一下:
而我們觀察一下,hub.docker.com中最常用的vim包,我們發現haron/vim鏡像是300M用的scratch作為基礎鏡像。
在hub.docker.com上粗略找了下,沒有找到用centos做基礎的mysql鏡像。個人估計是快取的包沒有刪掉,導致的問題。
至於@ShawnTaoo兄弟提到的基礎鏡像大小問題,我也做了下調查:centos:latest 190+MB, debian:jessie: 130+MB, ubuntu:latest 180+MB
參考資料:
mysql鏡像分析
haron/vim分析
Centos基礎鏡像分析
Ubuntu基礎鏡像分析
怪不得我的安裝了一個lamp一件安裝包就3G了,原來一個mysql就增加了1G
還沒入門
建議讀完入門教學再玩
沒刪除暫存檔就commit
你可以查看mysql的官方鏡像的dockerfile,基礎鏡像估計也應該不一樣。一般情況下,很多官方的基礎鏡像都是很小的。例如
scratch
,然而如果使用一個ubuntu什麼的,就得180M左右 (感謝 @imdjh 指正) ,centos 我沒留意過。
如果你可以把你的Dockerfile公開出來的話,大家可以幫你看看。主要還是Dockerfile的撰寫問題