作者 | 羽生結(jié)弦
責(zé)編 | 胡雪蕊
出品 | CSDN(ID:CSDNnews)
Docker 是一個(gè)基于Go語言開發(fā)的開源應(yīng)用容器,開發(fā)者可以打包應(yīng)用和相關(guān)包,到一個(gè)輕量級 、可移植的容器中,并且可以發(fā)布到任何機(jī)器 ,實(shí)現(xiàn)虛擬化,完全使用沙箱機(jī)制,而且性能開銷很低。
其中鏡像是Docker三大核心概念中最重要的一個(gè)。鏡像是一個(gè)特殊的文件系統(tǒng),除了提供容器運(yùn)行時(shí)所需的程序、庫、資源、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)。鏡像是容器在本地運(yùn)行的基礎(chǔ),Dokcer運(yùn)行容器前需要本地存在對應(yīng)的鏡像,如果不存在對應(yīng)的鏡像,Docker 會(huì)先從默認(rèn)的鏡像倉庫下載(如果用戶不希望Docker從默認(rèn)的鏡像倉庫下載鏡像的話,可以使用自定義鏡像倉庫)。這篇文章將講解鏡像的拉取、查看鏡像信息、搜索鏡像、刪除鏡像和鏡像的導(dǎo)入導(dǎo)出。
1、拉取鏡像
要想拉取鏡像,就要用到 pull命令,該命令的語法為:
docker[image]pull NAME[:TAG]
注:pull 命令中參數(shù) NAME 表示鏡像倉庫名稱,TAG 表示鏡像標(biāo)簽(一般表示為版本)
舉個(gè)例子來看一下pull命令怎么使用。我們從默認(rèn)的鏡像倉庫與拉取 Ubuntu 16.04,輸入如下命令:
docker pull ubuntu:16.04
執(zhí)行上面的命令,將會(huì)看到如下輸出:
注1:如果不顯示指定TAG,Docker默認(rèn)使用latest標(biāo)簽,下載鏡像倉庫中最新的鏡像
注2:latest標(biāo)簽會(huì)隨著最新版本的變化而變化,例如昨天某鏡像的版本是 1.0 ,今天上傳了2.0版本的鏡像,那么latest標(biāo)簽指的就是2.0這個(gè)版本
我們從前面的圖中可以看到,在鏡像下載過程中出現(xiàn)了4行,這四行代表著鏡像文件有4個(gè)層,每層的唯一id就是每行開頭的那串字符串(例如:35b42117c431)。當(dāng)不同的鏡像存在相同的層時(shí),本地僅存出一份內(nèi)容,這樣就叫少了存儲空間。
一般情況下,如果是從官方倉庫注冊服務(wù)器下載鏡像文件時(shí)是不需要加上倉庫注冊服務(wù)器地址的,但是如果是從非官方倉庫注冊服務(wù)器下載的話,就需要加上注冊服務(wù)器地址,例如我們要從阿里云下載ubuntu16.04的鏡像,那么我們應(yīng)該這樣寫命令:
docker pull registry.cn-shanghai.aliyuncs.com/ubuntu:16.04
常用的pull命令參數(shù)有如下兩個(gè):

2、查看鏡像信息
查看鏡像信息所用到的命令是 images、ls和inspect命令。比如要查看當(dāng)前電腦上存在的鏡像,可以這么做:
docker images
或者
docker image ls
執(zhí)行上面的命令,將會(huì)列出當(dāng)前系統(tǒng)中存在的鏡像,如下圖
從上圖中可以看出如下信息:
-
REPOSITORY:鏡像來源
-
TAG:鏡像標(biāo)簽,用于標(biāo)記來自同一個(gè)倉庫的不同鏡像
-
IMAGE ID:鏡像ID,鏡像的唯一標(biāo)識
-
CREATED:創(chuàng)建時(shí)間
-
SIZE:鏡像大小
注1:鏡像ID是很重要的信息,因?yàn)樗晴R像的唯一標(biāo)識,我們在操作鏡像時(shí)需要用到它。一般情況下我們只會(huì)輸入鏡像ID的前N位就可以區(qū)分一個(gè)鏡像了。
注2:鏡像的大小只是代表了鏡像的邏輯體積大小。由于相同鏡像層在本地只會(huì)存儲一份,因測鏡像在物理上占用的空間小于各個(gè)鏡像的邏輯體積之和。
images 和 ls 命令常用的參數(shù)選項(xiàng)如下:
我們有時(shí)候需要獲取鏡像詳細(xì)的信息,這時(shí)我們可以使用 inspect 命令,語法格式為:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
例如我們要查看剛才我們拉取的Ubuntu16.04鏡像的詳細(xì)信息,可以這么操作:
docker inspect 13c9
運(yùn)行上面的命令后,我們會(huì)看到鏡像的詳細(xì)信息以json的形式打印出來,如圖:
我們不僅可以查看鏡像的詳細(xì)信息,同樣我們也可以查看層的詳細(xì)信息,這時(shí)就需要用到history 命令,語法如下:
docker history [OPTIONS] NAME|ID
例如我們查看Ubuntu16.04鏡像層的詳細(xì)信息:
docker history 13c9
運(yùn)行命令,將打印出層的詳細(xì)信息。

3、搜索鏡像
我們可以使用 search 命令搜索倉庫中的鏡像,語法為:
docker search [option] keyword
option 常用的參數(shù)如下:
我們舉個(gè)例子來看一下,我們要搜索倉庫中包含MySQL的鏡像,代碼如下:
docker search mysql
運(yùn)行上面的命令,將會(huì)列出包含mysql關(guān)鍵字的鏡像:

4、除/清除鏡像
1. 刪除鏡像
我們刪除鏡像的時(shí)候可以利用 鏡像標(biāo)簽 、 鏡像ID 來刪除鏡像。刪除鏡像的語法為:
docker rmi IMAGE_NAME|IMAGE_ID
例如我們利用鏡像標(biāo)簽刪除u16.04這個(gè)鏡像:
docker rmi u16.04
運(yùn)行上面的命令,u16.04這個(gè)鏡像將會(huì)被刪除。
注1:u16.04 這個(gè)鏡像是我利用ubuntu:16.04 這個(gè)鏡像通過添加鏡像標(biāo)簽創(chuàng)建的
注2:當(dāng)使用鏡像ID刪除鏡像時(shí),會(huì)先刪除所有指向該鏡像的標(biāo)簽,然后再刪除該鏡像文件本身
注3:如果存在通過該鏡像創(chuàng)建的容器時(shí),鏡像文件無法刪除。如果要強(qiáng)制刪除鏡像時(shí),可以使用 -f 參數(shù):
docker rmi -f u16.04,但是不建議強(qiáng)制刪除鏡像。
2. 清理鏡像
經(jīng)過一段時(shí)間,系統(tǒng)中會(huì)存在臨時(shí)/不再使用的鏡像文件,那么我們可以通過 prune 命令清理鏡像,語法如下:
docker image [options] prune
option 常用的參數(shù)如下:
5、導(dǎo)入導(dǎo)出鏡像
1. 導(dǎo)出
如果要將鏡像導(dǎo)出可使用 save 命令,語法如下:
docker save image -o file
-o 表示將鏡像導(dǎo)出到tar文件,例如我們將 ubuntu:16.04導(dǎo)出到 u1604.tar 文件中:
docker save 13c9 -o u1604.tar
運(yùn)行上面命令后,ubuntu:16.04就導(dǎo)入到了ub1604.tar文件中:
2. 導(dǎo)入
如果要將鏡像導(dǎo)出可使用 load命令,語法如下:
docker load -i file
-i 表示將要導(dǎo)入到docker的鏡像tar文件,例如我們將 ub1604.tar導(dǎo)入到docker中:
docker load -i u1604.tar
運(yùn)行上面命令后,ub1604.tar將被導(dǎo)入到docker中
6、上傳鏡像
如果是上傳到官方倉庫,那么需要先注冊,然后才可以利用 push命令上傳鏡像,語法如下:
docker push NAME[:TAG]|[REGISTRY_HOST[:REGISTRY_PORT]/]
例如我們將ubuntu:16.04上傳到官方服務(wù)器上:
docker push 13c9
作者簡介:朱鋼,CSDN博客專家,.NET高級開發(fā)工程師,7年一線開發(fā)經(jīng)驗(yàn),參與過電子政務(wù)系統(tǒng)和AI客服系統(tǒng)的開發(fā),以及互聯(lián)網(wǎng)招聘網(wǎng)站的架構(gòu)設(shè)計(jì),目前就職于北京恒創(chuàng)融慧科技發(fā)展有限公司,從事企業(yè)級安全監(jiān)控系統(tǒng)的開發(fā)。
【END】






