作者 | 羽生結弦
責編 | 胡雪蕊
出品 | CSDN(ID:CSDNnews)
Docker 是一個基于Go語言開發的開源應用容器,開發者可以打包應用和相關包,到一個輕量級 、可移植的容器中,并且可以發布到任何機器 ,實現虛擬化,完全使用沙箱機制,而且性能開銷很低。
其中鏡像是Docker三大核心概念中最重要的一個。鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數。鏡像是容器在本地運行的基礎,Dokcer運行容器前需要本地存在對應的鏡像,如果不存在對應的鏡像,Docker 會先從默認的鏡像倉庫下載(如果用戶不希望Docker從默認的鏡像倉庫下載鏡像的話,可以使用自定義鏡像倉庫)。這篇文章將講解鏡像的拉取、查看鏡像信息、搜索鏡像、刪除鏡像和鏡像的導入導出。
1、拉取鏡像
要想拉取鏡像,就要用到 pull命令,該命令的語法為:
docker[image]pull NAME[:TAG]
注:pull 命令中參數 NAME 表示鏡像倉庫名稱,TAG 表示鏡像標簽(一般表示為版本)
舉個例子來看一下pull命令怎么使用。我們從默認的鏡像倉庫與拉取 Ubuntu 16.04,輸入如下命令:
docker pull ubuntu:16.04
執行上面的命令,將會看到如下輸出:
注1:如果不顯示指定TAG,Docker默認使用latest標簽,下載鏡像倉庫中最新的鏡像
注2:latest標簽會隨著最新版本的變化而變化,例如昨天某鏡像的版本是 1.0 ,今天上傳了2.0版本的鏡像,那么latest標簽指的就是2.0這個版本
我們從前面的圖中可以看到,在鏡像下載過程中出現了4行,這四行代表著鏡像文件有4個層,每層的唯一id就是每行開頭的那串字符串(例如:35b42117c431)。當不同的鏡像存在相同的層時,本地僅存出一份內容,這樣就叫少了存儲空間。
一般情況下,如果是從官方倉庫注冊服務器下載鏡像文件時是不需要加上倉庫注冊服務器地址的,但是如果是從非官方倉庫注冊服務器下載的話,就需要加上注冊服務器地址,例如我們要從阿里云下載ubuntu16.04的鏡像,那么我們應該這樣寫命令:
docker pull registry.cn-shanghai.aliyuncs.com/ubuntu:16.04
常用的pull命令參數有如下兩個:
2、查看鏡像信息
查看鏡像信息所用到的命令是 images、ls和inspect命令。比如要查看當前電腦上存在的鏡像,可以這么做:
docker images
或者
docker image ls
執行上面的命令,將會列出當前系統中存在的鏡像,如下圖
從上圖中可以看出如下信息:
-
REPOSITORY:鏡像來源
-
TAG:鏡像標簽,用于標記來自同一個倉庫的不同鏡像
-
IMAGE ID:鏡像ID,鏡像的唯一標識
-
CREATED:創建時間
-
SIZE:鏡像大小
注1:鏡像ID是很重要的信息,因為它是鏡像的唯一標識,我們在操作鏡像時需要用到它。一般情況下我們只會輸入鏡像ID的前N位就可以區分一個鏡像了。
注2:鏡像的大小只是代表了鏡像的邏輯體積大小。由于相同鏡像層在本地只會存儲一份,因測鏡像在物理上占用的空間小于各個鏡像的邏輯體積之和。
images 和 ls 命令常用的參數選項如下:
我們有時候需要獲取鏡像詳細的信息,這時我們可以使用 inspect 命令,語法格式為:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
例如我們要查看剛才我們拉取的Ubuntu16.04鏡像的詳細信息,可以這么操作:
docker inspect 13c9
運行上面的命令后,我們會看到鏡像的詳細信息以json的形式打印出來,如圖:
我們不僅可以查看鏡像的詳細信息,同樣我們也可以查看層的詳細信息,這時就需要用到history 命令,語法如下:
docker history [OPTIONS] NAME|ID
例如我們查看Ubuntu16.04鏡像層的詳細信息:
docker history 13c9
運行命令,將打印出層的詳細信息。
3、搜索鏡像
我們可以使用 search 命令搜索倉庫中的鏡像,語法為:
docker search [option] keyword
option 常用的參數如下:
我們舉個例子來看一下,我們要搜索倉庫中包含MySQL的鏡像,代碼如下:
docker search mysql
運行上面的命令,將會列出包含mysql關鍵字的鏡像:
4、除/清除鏡像
1. 刪除鏡像
我們刪除鏡像的時候可以利用 鏡像標簽 、 鏡像ID 來刪除鏡像。刪除鏡像的語法為:
docker rmi IMAGE_NAME|IMAGE_ID
例如我們利用鏡像標簽刪除u16.04這個鏡像:
docker rmi u16.04
運行上面的命令,u16.04這個鏡像將會被刪除。
注1:u16.04 這個鏡像是我利用ubuntu:16.04 這個鏡像通過添加鏡像標簽創建的
注2:當使用鏡像ID刪除鏡像時,會先刪除所有指向該鏡像的標簽,然后再刪除該鏡像文件本身
注3:如果存在通過該鏡像創建的容器時,鏡像文件無法刪除。如果要強制刪除鏡像時,可以使用 -f 參數:
docker rmi -f u16.04
,但是不建議強制刪除鏡像。
2. 清理鏡像
經過一段時間,系統中會存在臨時/不再使用的鏡像文件,那么我們可以通過 prune 命令清理鏡像,語法如下:
docker image [options] prune
option 常用的參數如下:
5、導入導出鏡像
1. 導出
如果要將鏡像導出可使用 save 命令,語法如下:
docker save image -o file
-o 表示將鏡像導出到tar文件,例如我們將 ubuntu:16.04導出到 u1604.tar 文件中:
docker save 13c9 -o u1604.tar
運行上面命令后,ubuntu:16.04就導入到了ub1604.tar文件中:
2. 導入
如果要將鏡像導出可使用 load命令,語法如下:
docker load -i file
-i 表示將要導入到docker的鏡像tar文件,例如我們將 ub1604.tar導入到docker中:
docker load -i u1604.tar
運行上面命令后,ub1604.tar將被導入到docker中
6、上傳鏡像
如果是上傳到官方倉庫,那么需要先注冊,然后才可以利用 push命令上傳鏡像,語法如下:
docker push NAME[:TAG]|[REGISTRY_HOST[:REGISTRY_PORT]/]
例如我們將ubuntu:16.04上傳到官方服務器上:
docker push 13c9
作者簡介:朱鋼,CSDN博客專家,.NET高級開發工程師,7年一線開發經驗,參與過電子政務系統和AI客服系統的開發,以及互聯網招聘網站的架構設計,目前就職于北京恒創融慧科技發展有限公司,從事企業級安全監控系統的開發。
【END】