Docker學(xué)習(xí)(6) Docker鏡像

Docker學(xué)習(xí)(5) Docker鏡像

簡介

  • Docker鏡像就是停止運(yùn)行的容器模捂。
  • 使用之前需要從鏡像倉庫里拉取鏡像枫绅,下載到本地的docker主機(jī)里
  • 鏡像是由多層組成的寓搬,每層重疊之后县耽,在外部看來就是一個(gè)獨(dú)立的個(gè)體兔毙。
  • 鏡像內(nèi)部包括操作系統(tǒng)(OS),同時(shí)還包含應(yīng)用運(yùn)行所必要的文件和依賴包锡溯。
  • 鏡像設(shè)計(jì)的初衷是快速和小巧祭饭,所有鏡像通常比較小叙量。

詳解

  • 鏡像也可以——停止某個(gè)容器運(yùn)行绞佩,并從中創(chuàng)建新的鏡像胆建。

  • 鏡像可以理解為構(gòu)建時(shí)(build-time)結(jié)構(gòu)眼坏,容器可以理解為運(yùn)行時(shí)(run-time)結(jié)構(gòu)檐蚜。

鏡像和容器

  • 容器一旦從鏡像啟動(dòng)之后闯第,二者之間變成相互依賴的關(guān)系。

  • 從鏡像中啟動(dòng)的全部容器停止之前蛛淋,鏡像無法刪除的

  • 否則會(huì)導(dǎo)致報(bào)錯(cuò),效果如下

lhf@lhf-virtual-machine:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
613dad3cfc8d        ubuntu:latest       "/bin/bash"         17 seconds ago      Up 16 seconds                           beautiful_leakey
lhf@lhf-virtual-machine:~$ docker image rm ubuntu:latest
Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - container 613dad3cfc8d is using its referenced image cf0f3ca922e0

鏡像通常比較小

  • 容器追求快速和小巧褐荷,意味這鏡像就必須裁剪掉不必要的部分,保持較小的體積叛甫。
  • 一般docker鏡像只有一個(gè)精簡的SHELL,或者沒有杨伙,鏡像不包含內(nèi)核。
  • 容器都是共享docker主機(jī)的內(nèi)核限匣。

拉取鏡像

  • docker主機(jī)本地的鏡像倉庫位置
lhf@lhf-virtual-machine:~$ sudo ls /var/lib/docker
[sudo] lhf 的密碼: 
builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes
  • 檢查本地倉庫是否有鏡像
lhf@lhf-virtual-machine:~$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                latest              e63fd667d16a        2 days ago          71.4MB
alpine              latest              965ea09ff2eb        4 days ago          5.55MB
ubuntu              latest              cf0f3ca922e0        7 days ago          64.2MB

  • 拉取鏡像到本地
lhf@lhf-virtual-machine:~$ docker pull centos:latest
latest: Pulling from library/centos
729ec3a6ada3: Pull complete 
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

鏡像倉庫服務(wù)

  • docker鏡像存儲(chǔ)在鏡像倉庫服務(wù)(image registry)當(dāng)中抖苦。默認(rèn)使用的是docker Hub
  • 鏡像倉庫服務(wù)包含多個(gè)鏡像倉庫米死,一個(gè)鏡像倉庫包含多個(gè)鏡像哲身。

官方和非官方鏡像倉庫

  • Docker Hub 分官方倉庫(Official Repositiry)和非官方倉庫(UnOfficial Repositiry)

鏡像命名和標(biāo)簽

  • 給出鏡像的名字和標(biāo)簽怔揩,從官方倉庫拉取鏡像
lhf@lhf-virtual-machine:~$ docker pull alpine:latest
latest: Pulling from library/alpine
Digest: sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a
Status: Image is up to date for alpine:latest
docker.io/library/alpine:latest
lhf@lhf-virtual-machine:~$ docker pull ubuntu:latest
latest: Pulling from library/ubuntu
Digest: sha256:a7b8b7b33e44b123d7f997bd4d3d0a59fafc63e203d17efedf09ff3f6f516152
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest

  • 如果沒有在倉庫名稱后制定具體標(biāo)簽脯丝,docker默認(rèn)標(biāo)簽是latest
  • 標(biāo)有l(wèi)atest標(biāo)簽的鏡像并不保證是這個(gè)倉庫最新的鏡像

為鏡像打多個(gè)標(biāo)簽

  • 一個(gè)鏡像可以根據(jù)用戶需求設(shè)置多個(gè)標(biāo)簽萝风。
  • 標(biāo)簽是存放在鏡像的元數(shù)據(jù)中的任意數(shù)字或字符串。
  • 在docker image pull 命令中指定-a 參數(shù)拉取倉庫中所有的鏡像材蹬。
  • latest 是一個(gè)非強(qiáng)制標(biāo)簽实幕,不保證指向倉庫中的最新鏡像。

過濾docker image ls 的輸出的內(nèi)容

  • docker提供參數(shù) --filter 來過濾docker image ls 命令返回鏡像列表的內(nèi)容堤器。
  • 返回懸虛(dangling)鏡像
lhf@lhf-virtual-machine:~$ docker image ls --filter dangling=true
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>  <none>
  • 沒有標(biāo)簽的鏡像稱為懸虛鏡像昆庇,列表顯示<none>:<none>
  • 使用docker image prune 移除全部懸虛鏡像。加-a參數(shù)闸溃,Docker會(huì)額外移除沒有被使用的鏡像整吆。

docker支持過濾方式:

  1. dangling:可以指定true后false,返回懸虛鏡像(true)和非懸虛鏡像(false).
  2. before:需要鏡像名稱和ID作為參數(shù)拱撵,返回在之前被創(chuàng)建的鏡像。
  3. since:與before類似:返回是指定鏡像之后創(chuàng)建的全部鏡像表蝙。
  4. label:根據(jù)標(biāo)注(label)的名稱或者值拴测。
  5. reference:過濾標(biāo)簽為latest的鏡像
lhf@lhf-virtual-machine:~$ docker image ls --filter=reference="*:latest"
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                latest              e63fd667d16a        2 days ago          71.4MB
alpine              latest              965ea09ff2eb        4 days ago          5.55MB
ubuntu              latest              cf0f3ca922e0        7 days ago          64.2MB
centos              latest              0f3e07c0138f        3 weeks ago         220MB

  • 可以通過--format 參數(shù)來通過go模板對輸出內(nèi)容格式化

  • 只返回docker主機(jī)上鏡像的大小屬性

lhf@lhf-virtual-machine:~$ docker image ls --format "{{.Size}}"
71.4MB
5.55MB
64.2MB
220MB

  • 只返回顯示倉庫、標(biāo)簽和大小的信息
lhf@lhf-virtual-machine:~$ docker image ls --format "{{.Repository}}:{{.Tag}}:{{.Size}}"
test:latest:71.4MB
alpine:latest:5.55MB
ubuntu:latest:64.2MB
centos:latest:220MB

通過CLI方式搜索Docker Hub

  • docker search 命令運(yùn)行通過CLI方式搜索Docker Hub
lhf@lhf-virtual-machine:~$ docker search nigelpoulton
NAME                                 DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nigelpoulton/pluralsight-docker-ci   Simple web app used in my Pluralsight videos…   18                                      [OK]
nigelpoulton/tu-demo                                                                 11                                      
nigelpoulton/k8sbook                 Simple web app used for demos in The Kuberne…   2
<snip>

lhf@lhf-virtual-machine:~$ docker search alpine
NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
alpine                                 A minimal Docker image based on Alpine Linux…   5757                [OK]                
mhart/alpine-node                      Minimal Node.js built on Alpine Linux           444                                     
anapsix/alpine-java                    Oracle Java 8 (and 7) with GLIBC 2.28 over A…   427 
<snip>


  • 搜索到的鏡像既有官方和非官方府蛇,顯示只有官方的
lhf@lhf-virtual-machine:~$ docker search alpine --filter "is-official=true"
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
alpine              A minimal Docker image based on Alpine Linux…   5757                [OK] 

鏡像和分層

  • Docker鏡像由一些松耦合的只讀鏡像組成的集索。

  • Docker復(fù)制堆積這些鏡像層,并將它們表示為單個(gè)統(tǒng)一的鏡像

  • 查看鏡像分層

lhf@lhf-virtual-machine:~$ docker image inspect ubuntu:latest
<snip>
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:a090697502b8d19fbc83afb24d8fb59b01e48bf87763a00ca55cfff42423ad36",
                "sha256:97e6b67a30f1efeb050ada13c2afa1afd748e175ae744027dd0cce1f2931a594",
                "sha256:100ef12ce3a46c3242d186dbbadedff1638dc1f69cab4e1fbf73489049c01c25",
                "sha256:19331eff40f01dd084a3f966cc6939e828d617d777163706b8a13d0f972704d1"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
   
  • 顯示該鏡像包含了是4個(gè)鏡像層欲诺、
  • 輸出的內(nèi)容使用了鏡像的SHA256散列值來標(biāo)識(shí)鏡像層抄谐。
  • 所有Docker鏡像都起始于一個(gè)基礎(chǔ)鏡像層,當(dāng)進(jìn)行修改和添加新的內(nèi)容時(shí)扰法,會(huì)在當(dāng)前鏡像層蛹含,創(chuàng)建一個(gè)新的鏡像層。
  • 在添加額外的鏡像層的同時(shí)塞颁,鏡像始終保持當(dāng)前所有鏡像的組合浦箱。
  • Docker是通過存儲(chǔ)引擎的方式來實(shí)現(xiàn)鏡像層的堆棧的,并保證多鏡像層對外展示位統(tǒng)一的文件系統(tǒng)

共享鏡像層

  • 多個(gè)鏡像直接可以共享鏡像層祠锣,這樣可以節(jié)省空間提供性能酷窥。

根據(jù)摘要拉取鏡像

  • 一般是通過標(biāo)簽來拉取鏡像的,但是標(biāo)簽是可變的伴网,可能會(huì)導(dǎo)致問題蓬推,可以通過摘要來拉取鏡像
  • 使用鏡像摘要(image Digest)
  • 使用參數(shù) --digests 在本地查看鏡像摘要
lhf@lhf-virtual-machine:~$ docker image ls --digests alpine
REPOSITORY          TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
alpine              latest              sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a   965ea09ff2eb        4 days ago          5.55MB

  • 通過摘要來拉取鏡像

鏡像散列值(摘要)

  • 鏡像是一系列松耦合的獨(dú)立層的集合
  • 鏡像是一個(gè)可配置的對象,包含了鏡像層的列表以及一些元數(shù)據(jù)的信息澡腾。
  • 鏡像層才是實(shí)際數(shù)據(jù)存儲(chǔ)的地方
  • 鏡像的唯一標(biāo)識(shí)是一個(gè)加密ID沸伏,配置對象本身的散列值。
  • 內(nèi)容散列:
    • 修改鏡像的內(nèi)容或其中的任意鏡像層都會(huì)導(dǎo)致加密散列值的變化动分。

多層架構(gòu)的鏡像

  • docker的優(yōu)點(diǎn):
    • 運(yùn)行一個(gè)應(yīng)用就行拉取一個(gè)鏡像并運(yùn)行容器這么簡單毅糟,無需安裝,依賴和配置這些問題了澜公。
  • 多層架構(gòu)的鏡像就是解決鏡像與當(dāng)前運(yùn)行環(huán)境匹配問題姆另。
  • 一個(gè)鏡像標(biāo)簽可以支持多個(gè)平臺(tái)和架構(gòu)。
  • 鏡像倉庫服務(wù)API支持兩種重要架構(gòu):Manifest列表和Manifest

刪除鏡像

  • 使用docker image rm 命令來刪除鏡像

  • 通過鏡像ID來刪除鏡像

lhf@lhf-virtual-machine:~$ docker image ls 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                latest              e63fd667d16a        3 days ago          71.4MB
alpine              latest              965ea09ff2eb        4 days ago          5.55MB
ubuntu              latest              cf0f3ca922e0        7 days ago          64.2MB
lhf@lhf-virtual-machine:~$ docker image rm cf0f3ca922e0
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:a7b8b7b33e44b123d7f997bd4d3d0a59fafc63e203d17efedf09ff3f6f516152
Deleted: sha256:cf0f3ca922e08045795f67138b394c7287fbc0f4842ee39244a1a1aaca8c5e1c
Deleted: sha256:c808877c0adcf4ff8dcd2917c5c517dcfc76e9e8a035728fd8f0eae195d11908
Deleted: sha256:cdf75cc6b4d28e72a9931be2a88c6c421ad03cbf984b099916a74f107e6708ff
Deleted: sha256:b9997ded97a1c277d55be0d803cf76ee6e7b2e8235d610de0020a7c84c837b93
Deleted: sha256:a090697502b8d19fbc83afb24d8fb59b01e48bf87763a00ca55cfff42423ad36

  • 刪除docker主機(jī)的全部鏡像
lhf@lhf-virtual-machine:~$ docker image rm $(docker image ls -q) -f
Untagged: test:latest
Deleted: sha256:e63fd667d16a799a73adf65c4882461171125f811326827b867eb5acca9d89b5
Deleted: sha256:a3656648909cd134aa602878560463d4e4b4ee48b84cf10d33b93617f98b5beb
Deleted: sha256:677c10bc62019a183422f8142accbcc09d9b65b317421dbbcd1b0935a0ca7179
Deleted: sha256:4f515774097fccbbec3608cee499fa51f1b0e9b70d2b1fdc1af6f3e2d725baf2
Deleted: sha256:6c293be80bd10ff2bdc72e3833be631bf9e734b0abbed353858f4ed04d6e3779
Deleted: sha256:dc254500dcdad9c1092f8e5a37ee6378a7df9320a84767933cf6c8692005d753
Deleted: sha256:5935d67da60e681d0ef3bedd55bde06a54e60f2c2adc8e73640943dcef8ef521
Untagged: alpine:latest
Untagged: alpine@sha256:c19173c5ada610a5989151111163d28a67368362762534d8a8121ce95cf2bd5a
Deleted: sha256:965ea09ff2ebd2b9eeec88cd822ce156f6674c7e99be082c7efac3c62f3ff652
lhf@lhf-virtual-machine:~$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

Docker 鏡像——命令

  • docker image pull :下載鏡像的命令
  • docker image ls:列出本地存儲(chǔ)的鏡像,參數(shù) --digests查看鏡像的SHA26簽名
  • docker image inspect:展示鏡像細(xì)節(jié)坟乾。包括鏡像層數(shù)據(jù)和元數(shù)據(jù)迹辐。
  • docker image rm:刪除鏡像。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甚侣,一起剝皮案震驚了整個(gè)濱河市右核,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渺绒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宗兼,居然都是意外死亡躏鱼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門殷绍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來染苛,“玉大人,你說我怎么就攤上這事主到〔栊校” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵登钥,是天一觀的道長畔师。 經(jīng)常有香客問我,道長牧牢,這世上最難降的妖魔是什么看锉? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮塔鳍,結(jié)果婚禮上伯铣,老公的妹妹穿的比我還像新娘。我一直安慰自己轮纫,他們只是感情好腔寡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掌唾,像睡著了一般放前。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上郑兴,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天犀斋,我揣著相機(jī)與錄音,去河邊找鬼情连。 笑死叽粹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的却舀。 我是一名探鬼主播虫几,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挽拔!你這毒婦竟也來了辆脸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤螃诅,失蹤者是張志新(化名)和其女友劉穎啡氢,沒想到半個(gè)月后状囱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倘是,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年亭枷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搀崭。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叨粘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘤睹,到底是詐尸還是另有隱情升敲,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布轰传,位于F島的核電站驴党,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏绸吸。R本人自食惡果不足惜鼻弧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锦茁。 院中可真熱鬧攘轩,春花似錦、人聲如沸码俩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稿存。三九已至笨篷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓣履,已是汗流浹背率翅。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袖迎,地道東北人冕臭。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像燕锥,于是被迫代替她去往敵國和親辜贵。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容