原文出自: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的前提,使用過程中可以一邊收集一些比較有用的鏡像,目前網上流行的鏡像倉庫已經存在了大量穩定好用的鏡像,我們可以拿來即用的。