文章出處

對于 Docker 用戶來說,最好的情況是不需要自己創建鏡像。幾乎所有常用的數據庫、中間件、應用軟件等都有現成的 Docker 官方鏡像或其他人和組織創建的鏡像,我們只需要稍作配置就可以直接使用。

使用現成鏡像的好處除了省去自己做鏡像的工作量外,更重要的是可以利用前人的經驗。特別是使用那些官方鏡像,因為 Docker 的工程師知道如何更好的在容器中運行軟件。

當然,某些情況下我們也不得不自己構建鏡像,比如:

  1. 找不到現成的鏡像,比如自己開發的應用程序。

  2. 需要在鏡像中加入特定的功能,比如官方鏡像幾乎都不提供 ssh。

所以本節我們將介紹構建鏡像的方法。同時分析構建的過程也能夠加深我們對前面鏡像分層結構的理解。

Docker 提供了兩種構建鏡像的方法:

  1. docker commit 命令

  2. Dockerfile 構建文件

docker commit

docker commit 命令是創建新鏡像最直觀的方法,其過程包含三個步驟:

  1. 運行容器

  2. 修改容器

  3. 將容器保存為新的鏡像

舉個例子:在 ubuntu base 鏡像中安裝 vi 并保存為新鏡像。

  1. 第一步, 運行容器 

    -it 參數的作用是以交互模式進入容器,并打開終端。412b30588f4a 是容器的內部 ID。

  2. 安裝 vi

    確認 vi 沒有安裝。

    安裝 vi。
    也可能出現的問題

    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    E: Unable to locate package vim

    這時候需要敲:apt-get update,(這個命令要在docker容器下輸入,而不是在linux上)這個命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,這樣才能獲取到最新的軟件包。

    等更新完畢以后再敲命令:apt-get install vim命令即可。

     

  3. 保存為新鏡像
    在新窗口中查看當前運行的容器。
    silly_goldberg 是 Docker 為我們的容器隨機分配的名字。

    執行 docker commit 命令將容器保存為鏡像。 
    新鏡像命名為 ubuntu-with-vi

    查看新鏡像的屬性。
    從 size 上看到鏡像因為安裝了軟件而變大了。

    從新鏡像啟動容器,驗證 vi 已經可以使用。

以上演示了如何用 docker commit 創建新鏡像。然而,Docker 并不建議用戶通過這種方式構建鏡像。原因如下:

  1. 這是一種手工創建鏡像的方式,容易出錯,效率低且可重復性弱。比如要在 debian base 鏡像中也加入 vi,還得重復前面的所有步驟。

  2. 更重要的:使用者并不知道鏡像是如何創建出來的,里面是否有惡意程序。也就是說無法對鏡像進行審計,存在安全隱患。

既然 docker commit 不是推薦的方法,我們干嘛還要花時間學習呢?

原因是:即便是用 Dockerfile(推薦方法)構建鏡像,底層也 docker commit 一層一層構建新鏡像的。學習 docker commit 能夠幫助我們更加深入地理解構建過程和鏡像的分層結構。

下一節我們學習如何通過 Dockerfile 構建鏡像。

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()