今天讓我們來講一下Docker的鏡像,首先我們先了解一些概念
容器和鏡像
如果曾經(jīng)做過 VM 管理員,可以把 Docker 鏡像理解為 VM 模板,而運行的VM就是容器
如果你是名研發(fā)人員,則可以將鏡像理解為類(Class),而容器就是對象
用一句話來說鏡像是容器的模板,容器是鏡像的運行實例
鏡像倉庫服務
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 個鏡像層,如下圖所示(這只是一個用于演示的很簡單的例子)。
所以,Docker 鏡像由一些松耦合的只讀鏡像層組成。Docker 負責堆疊這些鏡像層,并且將它們表示為單個統(tǒng)一的對象。
并且多個鏡像之間可以共享鏡像層,這樣還可以有效節(jié)省空間并提升性能。
常用的鏡像操作
拉取鏡像:
從官方倉庫拉取鏡像時,docker image pull 命令的格式如下:
docker image pull <repository>:<tag>
示例:讓我們拉取一個ubuntu吧
列出鏡像:
docker images [OPTIONS] [REPOSITORY]
示例:
查看鏡像的詳細信息:
docker inspect [OPTION] CONTAINER|IMAGE [CONTAINER|IMAGE...]
查找鏡像:
你想知道有哪些鏡像,docker search命令楞以幫助我們搜索Docker Hub,以下示例
docker search [image_name][:tag]
刪除鏡像:
docker rmi [OPTIONS] IMAGE [IMAGES...]