Docker學習筆記(4)--鏡像篇

傳送門:
Docker學習筆記(1)--Docker安裝(Ubuntu 16.04)
Docker學習筆記(2)--使用Docker Hub Mirror加速Docker官方鏡像下載
Docker學習筆記(3)--什么是Docker鏡像、容器和倉庫?
Docker學習筆記(4)--鏡像篇

基本概念

Docker鏡像可以用來創建Docker容器,為一個只讀的模板。

Docker運行容器前需要本地存在對應的鏡像,如果鏡像不在本地,Docker會從鏡像倉庫下載。

docker的鏡像實際上由一層一層的文件系統組成,這種層級的文件系統被稱為UnionFS。在Docker鏡像的最底層是bootfs。這一層與我們典型的Linux/Unix系統是一樣的,包含boot加載器和內核。當boot加載完成之后整個內核就都在內存中了,此時內存的使用權已由bootfs轉交給內核,此時系統也會卸載bootfs。Docker在bootfs之上的一層是rootfs(根文件系統)。rootfs就是各種不同的操作系統發行版,比如Ubuntu,Centos等等。

由于 Docker 使用一個統一文件系統,Docker 進程認為整個文件系統是以讀寫方式掛載的。 但是所有的變更都發生頂層的可寫層,而下層的原始的只讀鏡像文件并未變化。由于鏡像不可寫,所以鏡像是無狀態的。

docker鏡像的層級結構圖:


獲取鏡像

從Docker Hub倉庫獲取

目前 Docker 官方維護了一個公共倉庫 Docker Hub,其中已經包括了超過 15,000 的鏡像。大部分需求,都可以通過在 Docker Hub 中直接下載鏡像來實現。可以使用 docker pull 命令來從倉庫獲取所需要的鏡像。

例如從 Docker Hub 倉庫下載一個 Ubuntu 12.04 操作系統的鏡像:

sudo docker pull ubuntu:12.04S

有時候官方倉庫注冊服務器下載較慢,可以從其他倉庫下載,如下所述。

從Docker Hub Mirror獲取

《Docker學習筆記(2)--使用Docker Hub Mirror加速Docker官方鏡像下載》介紹了如何通過DaoCloud提供Docker Hub Mirror服務進行鏡像的加速下載。

例如使用ocker Hub Mirror服務下載一個 CentOS 操作系統的鏡像:

dao pull centos

鏡像的拉取過程如下圖所示:


本地鏡像

使用docker images顯示本地已有鏡像。

ymhou@ubuntu:~$ sudo docker images
[sudo] ymhou 的密碼: 
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
aspnet-equip2                           latest              7db79b00dfc6        13 hours ago        1.352 GB
aspnet-equip                            latest              c43889d0c994        13 hours ago        828.2 MB
aspnet-hello-web                        latest              0caea7860935        13 hours ago        1.228 GB
ubuntu                                  14.04               c8ceaee85d23        5 days ago          188 MB
hello-world                             latest              c54a2cc56cbb        3 weeks ago         1.848 kB
microsoft/aspnet                        latest              137814287352        5 weeks ago         815.2 MB
daocloud.io/daocloud/daocloud-toolset   latest              1ab33797d8a1        3 months ago        150.2 MB
training/webapp                         latest              694deee4f65f        14 months ago       348.8 MB
training/postgres                       latest              ed8be1ec6753        2 years ago         364.6 MB

其中包含了如下信息:倉庫,標記,ID,創建時間,大小。

其中鏡像的 ID 唯一標識了鏡像;
TAG 信息用來標記來自同一個倉庫的不同鏡像。例如 ubuntu 倉庫中有多個鏡像,通過 TAG 信息來區分發行版本,例如 10.04、12.04、12.10、13.04、14.04 等。

搜索鏡像

Docker的特點之一是人們創建了各種各樣的docker鏡像。而且這些鏡像已經被上傳到了Docker Hub。我們可以從Docker Hub網站來搜索鏡像;同樣的,之前我們提到的DaoCloud也提供了鏡像搜索服務。


Docker Hub

DaoCloud

我們也可以使用docker search命令來搜索鏡像:

sudo docker search [server/]registry[:tag]

當未指定server時,默認從官方倉庫注冊服務器搜索,當未指定tag時,默認為latest版本鏡像。比如搜索mysql

ymhou@ubuntu:~$ sudo docker search mysql
[sudo] ymhou 的密碼: 
NAME                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                      MySQL is a widely used, open-source relati...   2748      [OK]       
mysql/mysql-server         Optimized MySQL Server Docker images. Crea...   177                  [OK]
centurylink/mysql          Image containing mysql. Optimized to be li...   46                   [OK]
sameersbn/mysql                                                            36                   [OK]
appcontainers/mysql        Centos/Debian Based Customizable MySQL Con...   8                    [OK]
marvambass/mysql           MySQL Server based on Ubuntu 14.04              6                    [OK]
alterway/mysql             Docker Mysql                                    2                    [OK]
drupaldocker/mysql         MySQL for Drupal                                2                    [OK]
azukiapp/mysql             Docker image to run MySQL by Azuki - http:...   2                    [OK]
yfix/mysql                 Yfix docker built mysql                         2                    [OK]
...

我們看到了返回了大量的mysql鏡像。我們看到列表中有鏡像名稱、描述、Stars(衡量鏡像的流行程度-如果用戶喜歡這個鏡像他就會點擊stars)和官方自動構建鏡像狀態。

創建鏡像

如果在官方服務器上沒有自己需要的鏡像,我們可以自己創建一個新的鏡像。創建鏡像有三種方法。

修改已有鏡像

首先利用已有鏡像創建容器,然后在容器里面完成我們需要的操作,最后將新的容器使用dockercommit提交到本地鏡像庫。

sudo docker commit -m "commit information" -a "user information" Container_ID Image:Tag

其中,-m 來指定提交的說明信息,跟我們使用的版本控制工具一樣;-a 可以指定更新的用戶信息;之后是用來創建鏡像的容器的 ID;最后指定目標鏡像的倉庫名和 tag 信息。創建成功后會返回這個鏡像的 ID 信息。

例如:

sudo docker commit -m "add new file" -a "ymhou" 0b2616b0e5a8 mysql-db:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c

利用Dockerfile創建鏡像

首先生成一個創建鏡像的Dockerfile文件,包含一些如何創建鏡像的指令,然后運行docker build命令創建鏡像。
比如下面的Dockerfile文件:

ymhou@ubuntu:~/equip$ vim Dockerfile 

From microsoft/aspnet

COPY . /app
WORKDIR /app
RUN ["dnu","restore"]

EXPOSE 5004
ENTRYPOINT ["dnx","-p","project.json","web"]

編寫完成 Dockerfile 后可以使用 docker build 來生成鏡像。

sudo docker build -t="aspnet-mvc:v2" .

其中 -t 標記來添加 tag,指定新的鏡像的用戶信息。 “.” 是 Dockerfile 所在的路徑(當前目錄),也可以替換為一個具體的 Dockerfile 的路徑。

從本地文件系統導入

如果為從容器生成的鏡像則使用docker import導入,如果為從鏡像導出的鏡像,則使用docker load導入。

導出和載入鏡像

導出鏡像

如果要導出鏡像到本地文件,可以使用 docker save 命令。

sudo docker save -o ubuntu14.04.tar ubuntu:14.04

載入鏡像

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

sudo docker load --input ubuntu14.04.tar

sudo docker load < ubuntu14.04.tar

刪除本地鏡像

使用docker rmi命令刪除本地鏡像。

ymhou@ubuntu:~/equip$ sudo docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
aspnet-equip2                           latest              7db79b00dfc6        17 hours ago        1.352 GB
aspnet-equip                            latest              c43889d0c994        18 hours ago        828.2 MB
aspnet-hello-web                        latest              0caea7860935        18 hours ago        1.228 GB
ubuntu                                  14.04               c8ceaee85d23        5 days ago          188 MB
hello-world                             latest              c54a2cc56cbb        3 weeks ago         1.848 kB
microsoft/aspnet                        latest              137814287352        5 weeks ago         815.2 MB
daocloud.io/daocloud/daocloud-toolset   latest              1ab33797d8a1        3 months ago        150.2 MB
training/webapp                         latest              694deee4f65f        14 months ago       348.8 MB
training/postgres                       latest              ed8be1ec6753        2 years ago         364.6 MB
ymhou@ubuntu:~/equip$ sudo docker rmi aspnet-equip
Untagged: aspnet-equip:latest
Deleted: sha256:c43889d0c994d425a6cc4ec5333186c4aa771a7b82325a698254b95edc4ea1fa
Deleted: sha256:aee0abb3d94c523b30df01cbb4465b49d63cf2159696d6383bb2d079d6aa10e7
Deleted: sha256:411d2ea3ecbc324a13d1c72b6103e20a996d99954b15eb91b3130623323794d2
Deleted: sha256:d06161776c4b435c672fed1ee6ac54013781d253ba58581cb2cf4263aa4ca311
Deleted: sha256:5b601853e6b6ca283954848d460cecb1b385269dea98c19e59193e256e4124c9
Deleted: sha256:9409ca5cff2757904d32b3a887e171bc8ad2a0d537996d4f4da50adc491e20d4
Deleted: sha256:aa488445dd361a59d30361bd5849fc4b61763dd577436066945f67b74d5823cf

Reference

https://yeasy.gitbooks.io/docker_practice/content/index.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容

  • 轉載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,524評論 0 120
  • Docker — 云時代的程序分發方式 要說最近一年云計算業界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,591評論 15 147
  • 0. 前言 docker是什么?docker是用GO語言開發的應用容器引擎,基于容器化,沙箱機制的應用部署技術。可...
    sessionboy閱讀 3,874評論 2 49
  • 一、Docker 簡介 Docker 兩個主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,406評論 0 27
  • 開始的開始是我們唱歌 最后的最后是我們在走 最親愛的你象是夢中的風景 說夢醒后你會去我相信 不憂愁的臉是我的少年 ...
    M_152閱讀 300評論 0 1