首頁  >  問答  >  主體

为什么docker上自己创建的mysql镜像特别大

新手刚入门,自己学着创建系统镜像和各种应用的镜像

我先自己制作了一个centos67的镜像,然后基于centos67装了vim,再docker commit 保存为centos67vim
然后再基于centos67vim上 编译安装了mysql5.6再commit保存为 mysql56,可是发现容量就达1.591GB了

我再docker pull mysql 发现为什么官方提供的只有360.3

多谢各位大大帮忙解答!!

巴扎黑巴扎黑2705 天前1342

全部回覆(5)我來回復

  • PHP中文网

    PHP中文网2017-04-24 09:12:48

    在製作鏡像的過程中,我們要注意幾點:
    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 -y
    mysql-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鏡像。個人估計是快取的包沒有刪掉,導致的問題。

    至於@ShawnTaoo兄弟提到的基礎鏡像大小問題,我也做了下調查:centos:latest 190+MB, debian:jessie: 130+MB, ubuntu:latest 180+MB


    參考資料:

    1. mysql鏡像分析

    2. haron/vim分析

    3. Centos基礎鏡像分析

    4. Ubuntu基礎鏡像分析

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-24 09:12:48

    怪不得我的安裝了一個lamp一件安裝包就3G了,原來一個mysql就增加了1G

    回覆
    0
  • 迷茫

    迷茫2017-04-24 09:12:48

    還沒入門
    建議讀完入門教學再玩

    沒刪除暫存檔就commit

    回覆
    0
  • 怪我咯

    怪我咯2017-04-24 09:12:48

    你可以查看mysql的官方鏡像的dockerfile,基礎鏡像估計也應該不一樣。一般情況下,很多官方的基礎鏡像都是很小的。例如scratch,然而如果使用一個ubuntu什麼的,就得180M左右 (感謝 @
    imdjh 指正) ,centos 我沒留意過。

    回覆
    0
  • 阿神

    阿神2017-04-24 09:12:48

    如果你可以把你的Dockerfile公開出來的話,大家可以幫你看看。主要還是Dockerfile的撰寫問題

    回覆
    0
  • 取消回覆