構建鏡像 - 天天5分鐘玩轉容器技術(12)

對於 Docker 用戶來講,最好的狀況是不須要本身建立鏡像。幾乎全部經常使用的數據庫、中間件、應用軟件等都有現成的 Docker 官方鏡像或其餘人和組織建立的鏡像,咱們只須要稍做配置就能夠直接使用。docker

使用現成鏡像的好處除了省去本身作鏡像的工做量外,更重要的是能夠利用前人的經驗。特別是使用那些官方鏡像,由於 Docker 的工程師知道如何更好的在容器中運行軟件。數據庫

固然,某些狀況下咱們也不得不本身構建鏡像,好比:ubuntu

  1. 找不到現成的鏡像,好比本身開發的應用程序。安全

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

因此本節咱們將介紹構建鏡像的方法。同時分析構建的過程也可以加深咱們對前面鏡像分層結構的理解。學習

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

  1. docker commit 命令中間件

  2. Dockerfile 構建文件開發

docker commitit

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

  1. 運行容器

  2. 修改容器

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

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

  1. 第一步, 運行容器 

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

  2. 安裝 vi

    確認 vi 沒有安裝。

    安裝 vi。

  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 構建鏡像。

二維碼+指紋.png

相關文章
相關標籤/搜索