六。docker鏡像

前面基本概念部分咱們已經介紹了docker鏡像就是一個只讀模板,能夠從鏡像啓動一個容器實例。咱們也發現,在啓動容器的過程當中,若是鏡像不存在,docker會自動從默認鏡像倉庫(默認爲官方Docker Hub)下載相應的鏡像,而後再啓動容器。redis

如今咱們來探討更多鏡像的操做docker

一、列出本地已有的鏡像

[root@localhost ~]# docker images
REPOSITORY            TAG                         IMAGE ID                        CREATED                        VIRTUAL SIZE
centos                        latest                      ce20c473cd8a               2 weeks ago                   172.3 MBubuntu

二、從默認鏡像倉庫搜索鏡像

[root@localhost ~]# docker  search rediscentos

image

*說明:沒有/分隔前綴的,表示官方鏡像,咱們儘可能選擇官方鏡像或者下載量較高的鏡像使用。服務器

三、下載鏡像到本地

[root@localhost ~]# docker  pull redisspa

下載過程以下圖:3d

image

下載過程要耐心等待,由於從國外的服務器下載,速度是很慢的,好在咱們僅需下載幾個基本鏡像便可,後期都可經過這些基本鏡像僅需修改,修改咱們所需的便可。code

下載完成後,查看以下:blog

[root@localhost ~]# docker images
REPOSITORY           TAG                         IMAGE ID                  CREATED                   VIRTUAL SIZE
redis                        latest                       c08dd1f8fad9           12 days ago               109.2 MB
centos                     latest                       ce20c473cd8a           2 weeks ago              172.3 MBget

*注:也能夠會看到新增了3個鏡像,實際上這三個鏡像都是對應的一個(注意看image ID),這是鏡像的tag,相似軟鏈接。下一條將講解。

四、給鏡像添加tag

tag的做用主要有兩點:一是爲鏡像起一個容易理解的名字,二是能夠經過docker tag來從新指定鏡像的倉庫,這樣在push時自動提交到倉庫。

image

如上圖,經過docker images命令,咱們能夠看到一個鏡像有以下幾個關鍵信息:

REPOSITORY :包含倉庫信息,如docker.io/redis ,表示docker.io倉庫的redis名稱鏡像。

TAG:同一個名稱的鏡像可能有多個版本,默認爲latest版本(最新版),TAG就標明瞭版本

IMAGE ID :鏡像惟一ID

所以能夠經過兩個方法肯定某個惟一的鏡像:

一、REPOSITORY:TAG :如docker.io/centos:6.6

二、IMAGE ID : 如12c9d795d85a

*注意:若是直接使用「REPOSITORY」,則默認「TAG」爲「latest」,如鏡像redis就標識「redis:latest」

鏡像的名稱「REPOSITORY:TAG 」能夠用下面的命令重命名:

將同一IMAGE_ID的全部tag,合併爲一個新的
# docker tag 195eb90b5349 seanlook/ubuntu:rm_test

新建一個tag,保留舊的那條記錄
# docker tag Registry/Repos:Tag New_Registry/New_Repos:New_Tag

五、將容器的修改提交到鏡像

在上一步中,若是已經爲鏡像tag指定了倉庫信息,這可使用下面命令提交鏡像到倉庫中:

以下是提交已經鏡像到一個私有倉庫,私有倉庫的搭建參考後文

# docker push  192.168.1.200:5000/centos:6.6

六、存出或載入鏡像

保存鏡像爲tar文件:

若是要導出鏡像到本地文件,可使用docker save命令。

# docker save -o redis.tar redis

載入鏡像:

可使用docker load從導出的本地文件中再導入到本地鏡像庫,例如

# docker load --input redis.tar

# docker load < redis.tar

這將導入鏡像以及其相關的元數據信息(包括標籤等)。

*注:經過存出和載入鏡像,能夠在沒有搭建私有倉庫的狀況下,快速在不一樣主機之間拷貝鏡像。

七、刪除鏡像

若是要移除本地的鏡像,可使用docker rmi命令。

# docker rmi redis
Untagged: redis:latest
Deleted: c08dd1f8fad9ff2622a1b5d74650a8e494ee380b74030e21584fea05079c2818
Deleted: 1749db59d6f291dc5b9b76610f33a15421170b711a07e0e4a835edb43c2d52f1
Deleted: e1c16660ac6110b9defa97ec9883e85f680459a951bd3c9aa9a02a4aa81034e7
Deleted: 134e55bc9c437b5a822885b879d34dc7f0bb189406ff6bfe33889e56e75fd7ba
Deleted: 3968e93424409ba4c7ebfb73dc8ca8b20ac1c1f622ea0ce1753efe6e57f5bb5e
Deleted: 57f1a903e59a508e0690c226b8e3016a125d98c2e42f9fc03efe871b85e35052

*注意:

1)在刪除鏡像以前要先用 docker rm 刪掉依賴於這個鏡像的全部容器。

2)docker rm命令是移除容器。

八、鏡像的原理

Docker 鏡像是怎麼實現增量的修改和維護的? 每一個鏡像都由不少層次構成,Docker 使用 Union FS 將這些不一樣的層結合到一個鏡像中去。

一般 Union FS 有兩個用途, 一方面能夠實現不借助 LVM、RAID 將多個 disk 掛到同一個目錄下,另外一個更經常使用的就是將一個只讀的分支和一個可寫的分支聯合在一塊兒,Live CD 正是基於此方法能夠容許在鏡像不變的基礎上容許用戶在其上進行一些寫操做。 Docker 在 AUFS 上構建的容器也是利用了相似的原理。

相關文章
相關標籤/搜索