Docker基礎教程——鏡像

來源:互聯網
上載者:User

原文出自:http://blog.csdn.net/anxpp/article/details/52464806

    上一篇文章也說了,鏡像是Docker三大核心概念之一。

    Docker運行容器前需要本地存在對應的鏡像,如果本地不存在,會嘗試從預設(Docker Hub)的鏡像倉庫擷取,也可以配置使用自訂的鏡像倉庫。     1、擷取鏡像

    鏡像是Docker的基礎,運行容器的前提。

    可以使用命令從網路上下載鏡像,命令如下(如果不是Root使用者需要在命令前加上sudo命令):

docker pull NAME[:TAG]
    如果不顯示的指定TAG,會預設選擇latest標籤的鏡像下載。

    比如要下載一個最新的ubuntu鏡像:

docker pull ubuntu
    這裡實際上下載的是latest標籤的鏡像,上面的命令等同於:

docker pull ubuntu:latest
    下載過程會看到鏡像檔案實際是又多個層組成的,每行最前面的內容就是這層的ID。

    層(Layer)是AUFS(一種聯合檔案系統)中的重要概念,是實現增量儲存於更新的基礎。

    如果需要下載指定版本的鏡像,可以如下:

docker pull ubuntu:14.04
    如果想從指定的註冊伺服器的倉庫下載鏡像,可以像下面這樣:

docker pull registry.hub.docker.com/ubuntu:latest
    下載完成後就可以啟動了:

docker -t -i ubuntu /bin/bash
    這裡的命令後面會解釋。

   2、 查看鏡像資訊

    docker image命令可以列出本地已有的所有鏡像:

docker inages
    顯示的欄位分別表示:

    1、來自於哪個倉庫

    2、鏡像的標籤資訊

    3、鏡像的唯一ID

    4、建立時間

    5、鏡像大小

    其中鏡像的ID比較重要,經常會用到。

    標籤TAG用於標示同一倉庫不同版本的鏡像。

    為了使用方便,還可以通過docker tag命令為本地鏡像添加新的標籤:

docker tag ubuntu:latest ubuntu:newtag
    這時查看鏡像列表會多出來一個鏡像,但是其ID還是一樣的。

    使用docker inspect命令可以擷取鏡像的詳細資料:

docker inspecct 鏡像ID
    這裡返回的是一個json格式的字串,如果只想擷取其中指定的內容,可以通過-f指定參數:

docker inspect -f {{".Architecture"}} 550
    此時返回的就是Architecture資訊。

    任何時候,在指定ID時都可以只指定前幾個字元來代替完整的ID字串,前提是能唯一標示。    3、 尋找鏡像

    docker search命令可以搜尋遠程倉庫中的公用鏡像,預設為Docker Hub倉庫。

    用法為:

docker search TERM
    支援的參數如下:

    1、--automated=false:僅顯示自動建立的鏡像

    2、--no-trunc=false:輸出資訊不截斷顯示

    3、-s, --stars=0:指定僅顯示評論為指定星級以上的鏡像

    比如要搜尋帶lamp關鍵字的鏡像:

docker search lamp
    之後返回的資訊包括:鏡像名字、描述、星級、是否官方建立和是否自動建立等。

    預設的輸出結果將按星級排序,官方鏡像說明是官方項目組建立和維護的,automated資源允許使用者驗證鏡像的來源和內容。     4、刪除鏡像

    可以使用鏡像的標籤和ID刪除鏡像。
    命令格式為:

docker rmi IMAGE[IMAGE...]
    IMAGE可以為標籤或者ID。

    當同一個鏡像有多個標籤的時候,docker rmi命令只是刪除了該鏡像多個標籤中指定的標籤,並不影響鏡像檔案。

    如果鏡像只剩下一個標籤的時候,使用docker rmi命令會徹底刪除該鏡像。

    如果docker rmi後面跟上ID刪除時,會嘗試刪除該鏡像的所有標籤後刪除鏡像檔案本身。

    如果要刪除逇鏡像建立的容器存在時,鏡像檔案預設試試無法被刪除的。如果直接執行刪除命令,會提示有容器正在運行(即使容器已經Exit)。但是可以加上參數-f強行刪除:

docker rmi -f ID或標籤
    不過並不推薦這麼做,因為這可能會導致一些遺留問題,如果一定要刪除,推薦先刪除該鏡像的所有容器,然後再刪除鏡像,如果有容器不能刪除,那麼這個鏡像也不應該直接被刪除。

    刪除鏡像時會輸出類似於擷取鏡像時一樣的各層資訊。     5、建立鏡像

    建立鏡像有三種方式:

    1、基於已有鏡像建立

    2、基於本地模板匯入

    3、基於Dockerfile檔案建立

    其中在大規模應用情境,一般使用第三種方式,所以在此處不會詳談(後續文章會詳細介紹),這裡主要介紹前兩種。

   5.1、 基於已有鏡像建立     該方法主要使用docker commit命令,格式為:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    其中的選項:

-a、--author="":作者資訊 -m\--message="":提交訊息 -p、--pause=true:提交時暫停容器運行。

    下面是一個例子:

docker commit -m "message" -a "anxpp" 容器ID 新的容器TAG 新的容器ID
    之後就可以通過docker images命令查看到建立的容器了。

    5.2、基於本地模板匯入     可以直接從一個作業系統模板檔案匯入一個鏡像。比如OpenVZ提供的模板(http://openvz.org/Download/templates/precreated)

    比如要匯入下載好的ubuntu模板為鏡像:

cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
    然後使用docker images就可以看到鏡像了。

    6、鏡像的匯入匯出(檔案)

    可能有時候我們想直接匯出鏡像為檔案供其他地方使用,docker提供了這樣的功能。     6.1、匯出鏡像為檔案

    使用docker save命令將鏡像儲存為檔案,如:

docker save -o ubuntu.tar ubuntu:14.04
    6.2、從檔案匯入鏡像

    使用docker load命令將檔案匯入為鏡像,如:

docker load < ubuntu.tar
    此時會匯入鏡像以及相關的中繼資料資訊,如標籤等。

    7、上傳鏡像     上傳鏡像到倉庫使用docker push命令,預設會上傳到DockerHub官方倉庫(需登入),命令格式為docker push NAME[:TAG]。


小結     鏡像是使用Docker的前提,使用過程中可以一邊收集一些比較有用的鏡像,目前網上流行的鏡像倉庫已經存在了大量穩定好用的鏡像,我們可以拿來即用的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.