即學即用Docker(四):Docker鏡像管理
2019-09-02閱讀 2082

今天讓我們來講一下Docker的鏡像,首先我們先了解一些概念


容器和鏡像

 

如果曾經(jīng)做過 VM 管理員,可以把 Docker 鏡像理解為 VM 模板,而運行的VM就是容器

如果你是名研發(fā)人員,則可以將鏡像理解為類(Class),而容器就是對象

用一句話來說鏡像是容器的模板,容器是鏡像的運行實例

 11.gif

 

鏡像倉庫服務

 

Docker 鏡像存儲在鏡像倉庫服務(Image Registry)當中。用戶可以從Registry進行鏡像下載和訪問,可分為公有和私有兩類Registry。

 

公有鏡像倉庫:

Docker Hub是Docker公司為公眾提供的托管Registry。

Quay.io現(xiàn)為Red Hat下的公共托管Registry。

 

私有鏡像倉庫:

企業(yè)可以用Docker Registry構建私有的Registry。

Registry本身是一個開源項目,可以用于搭建私有Registry。

 

最常用的公用鏡像倉庫就是Docker Hub,Docker Hub是目前世界上最大的容器鏡像倉庫,由Docker公司維護,里面有Docker公司提供的鏡像及大量用戶上傳的鏡像。以下是它的地址

https://hub.docker.com/

 

 

Docker Hub的優(yōu)點:

為開發(fā)者提供了海量Docker鏡像,供免費下載學習和使用;

擁有完善的賬戶管理系統(tǒng),為用戶提供付費擴容;

服務器采用分布式部署,支持負載均衡;

支持鏡像上傳、下載、查詢、刪除及屬性設置等多種操作;

支持在線編譯鏡像;

后端采用分布式存儲,可容災備份;

其核心是Docker distribution,在開源社區(qū)上設計維護,會不斷更新和完善;

提供企業(yè)版Docker Hub,為企業(yè)級用戶提供一站式解決方案。

 

鏡像和分層

 

所有的 Docker 鏡像都起始于一個基礎鏡像層,當進行修改或增加新的內容時,就會在當前鏡像層之上,創(chuàng)建新的鏡像層。最常用的base鏡像是各Linux發(fā)行版的Docker鏡像,如ubuntu、centos等。

 

舉一個簡單的例子,假如基于 Ubuntu Linux 16.04 創(chuàng)建一個新的鏡像,這就是新鏡像的第一層;如果在該鏡像中添加 Python 包,就會在基礎鏡像層之上創(chuàng)建第二個鏡像層;如果繼續(xù)添加一個安全補丁,就會創(chuàng)建第三個鏡像層。

 

該鏡像當前已經(jīng)包含 3 個鏡像層,如下圖所示(這只是一個用于演示的很簡單的例子)。

 12.gif

所以,Docker 鏡像由一些松耦合的只讀鏡像層組成。Docker 負責堆疊這些鏡像層,并且將它們表示為單個統(tǒng)一的對象。

并且多個鏡像之間可以共享鏡像層,這樣還可以有效節(jié)省空間并提升性能。

 

常用的鏡像操作

 

拉取鏡像:

從官方倉庫拉取鏡像時,docker image pull 命令的格式如下:

docker image pull <repository>:<tag>

 

示例:讓我們拉取一個ubuntu吧

13.jpg

 

列出鏡像:

docker images [OPTIONS] [REPOSITORY]

示例:

 15.jpg


查看鏡像的詳細信息:

docker inspect [OPTION] CONTAINER|IMAGE [CONTAINER|IMAGE...]

 16.jpg


查找鏡像:

 

你想知道有哪些鏡像,docker search命令楞以幫助我們搜索Docker Hub,以下示例

docker search [image_name][:tag]

 14.jpg


刪除鏡像:

docker rmi [OPTIONS] IMAGE [IMAGES...]

17.jpg