鏡像是Docker的三大核心概念之一。mysql
Docker運行容器前須要本地存在對應的鏡像,若是鏡像不存在本地,Docker會嘗試先從默認鏡像倉庫下載,用戶也能夠經過配置,使用自定義的鏡像倉庫。sql
一、獲取鏡像docker
鏡像是Docker運行容器的前提。ubuntu
一般狀況下咱們能夠經過使用docker pull命令從網上下載鏡像。該命令的格式爲docker pull NAME[:TAG]。對於Docker鏡像來講,若是不指定TAG,則會默認選擇latest標籤,即下載倉庫中最新版本的鏡像。bash
從Docker Hub的Ubuntu倉庫下載一個最新的Ubuntu操做系統的鏡像:服務器
$sudo docker pull ubuntu ubuntu:latest:The p_w_picpath you are pulling has been verified d497ad3926c8:Downloading [======> ] 25.14MB/201.06 MB 51m14s ccb62158e970:Download complete e791be0477f2:Download complete 3680052c0f5c:Download complete 22093c35d77b:Download complete 5506de2b643b:Download complete
該命令實際上下載的就是ubuntu:latest鏡像,目前最新的14.04版本的鏡像。ide
另外咱們也能夠經過指定標籤來下載特定版本的某一個鏡像,例如14.04標籤的鏡像。spa
$sudo docker pull ubuntu:14.04操作系統
以上兩條命令實際上都至關於$sudo docker pull registry.hub.docker.com/ubuntu:latest命令,即從默認的註冊服務器registry.hub.docker.com中的ubuntu倉庫來下載標記爲latest的鏡像。3d
下載鏡像到本地後,便可隨時使用該鏡像了,例如利用該鏡像建立一個容器,在其中運行bash應用。
$sudo docker run -t -i ubuntu /bin/bash root@fe7fc4bd8fc9:/#
二、查看鏡像信息
使用docker p_w_picpaths命令能夠列出本地主機上已有的鏡像。
例如,下面的命令列出了本地從官方下載的ubuntu鏡像:
在列出的信息中,能夠看到幾個字段信息:
來自於哪一個倉庫,好比ubuntu倉庫
鏡像的標籤信息,好比latest
鏡像的ID號(惟一)
建立時間
鏡像大小
其中鏡像的ID信息十分重要,它惟一標識了鏡像。
爲了方便在後續工做中使用這個鏡像,還可使用docker tag命令爲本地鏡像添加新的標籤。例如添加一個新的ubuntu:latest鏡像標籤以下:
$sudo docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest
另外,不一樣標籤額鏡像的ID是徹底一致的,說明它們實際上指向了同一個鏡像文件,只是別名不一樣而已。標籤在這裏起到了引用或快捷方式的做用。
使用docker inspect命令能夠獲取該鏡像的詳細信息。
docker inspect命令返回的是一個JSON格式的消息,若是咱們只要其中一項內容時,可使用-f參數來指定,例如,獲取鏡像的Architecture信息:
$sudo docker inspect -f {{".Architecture"}} 550 amd64
在指定鏡像ID的時候,一般使用該ID的前若干個字符組成的可區分字符串來替代完整的ID。
三、搜尋鏡像
使用docker search命令能夠搜索遠程倉庫中共享的鏡像,默認搜索Docker Hub官方倉庫中的鏡像。用法爲docker search TERM,支持的參數包括:
--automated=flase僅顯示自動建立的鏡像
--no-trunc=flase 輸出信息不截斷顯示。
-s,--stars=0 指定僅顯示評價爲指定星級以上的鏡像。
例如,搜索帶mysql關鍵字的鏡像以下所示:
$sudo docker search mysql
能夠看到返回了不少包含關鍵字的鏡像,其中包括鏡像名字,描述,星級(表示該鏡像的受歡迎的程度)、是否官方建立,是否自動建立等。
默認的輸出結果將按照星級評價進行排序。
官方的鏡像說明是官方組建立和維護的,automated資源則容許用戶驗證鏡像的來源和內容。
四、刪除鏡像
(1)使用鏡像的標籤刪除鏡像
使用docker rmi命令能夠刪除鏡像,命令格式爲docker rmi IMAGE [IMAGE...],其中IMAGE能夠爲標籤或ID。
例如,要刪除掉dl.dockerpool.com:5000/ubuntu:latest鏡像,可使用以下命令:
$sudo docker rmi dl.dockerpool.com:5000/ubuntu Untagged:dl.dockerpool.com:5000/ubuntu:latest
這裏可能會有人擔憂本地的ubuntu:latest鏡像是否會受到此命令的影響。無需擔憂,當同一個鏡像擁有多個標籤的時候,docker rmi命令只是刪除了該鏡像多個標籤中的指定標籤而已,並不影響鏡像文件。所以上述操做至關於只是刪除了鏡像5506de2b643b的一個標籤而已。
爲保險起見,再次查看本地的鏡像,發現ubuntu:latest鏡像仍然存在:
$sudo docker p_w_picpaths
但當鏡像只剩下一個標籤的時候就要當心了,此時再使用docker rmi命令會完全刪除該鏡像。
(2)使用鏡像ID刪除鏡像
當使用docker rmi命令後面跟上鏡像的ID時,會嘗試刪除全部指向該鏡像的標籤,而後刪除該鏡像文件自己。
注意,當有該鏡像建立的容器存在時,鏡像文件默認是沒法被刪除的,例如:
先利用ubuntu鏡像建立一個簡單的容器,輸出一句話「hello! I am here!」:
$sudo docker run ubuntu echo 'hello! I am here!' hello! I am here!
使用docker ps -a命令能夠看到本機上存在的全部容器
試圖刪除該鏡像,Docker會提示有容器正在運行,沒法刪除:
$sudo docker rmi ubuntu
若是要強行刪除鏡像,可使用-f參數:
$sudo docker rmi -f ubuntu
不過不推薦使用-f參數來強制刪除一個存在容器依賴的鏡像,由於這樣每每會形成一些遺留的問題。
再次使用docker p_w_picpaths查看本地的鏡像列表,會發現一個標籤爲<none>的臨時鏡像,原來被強制刪除的鏡像換了新的ID繼續存在系統中。
所以,正確的作法是,先刪除依賴該鏡像的全部容器,再來刪除鏡像。