日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《Docker进阶与实战》——3.2节使用Docker image

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Docker进阶与实战》——3.2节使用Docker image 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節書摘來自華章社區《Docker進階與實戰》一書中的第3章,第3.2節使用Docker image,作者華為Docker實踐小組,更多章節內容可以訪問云棲社區“華章社區”公眾號查看

3.2 使用Docker image
Docker內嵌了一系列命令制作、管理、上傳和下載鏡像??梢哉{用REST API給Docker daemon發送相關命令,也可以使用client端提供的CLI命令完成操作。本書的第7章會詳細闡述Docker REST API的細節,本節則主要根據功能對涉及image的命令進行說明。下面就從Docker image的生命周期角度說明Docker image的相關使用方法。

3.2.1 列出本機的鏡像
下面的命令可以列出本地存儲中鏡像,也可以查看這些鏡像的基本信息。

$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04.2 2103b00b3fdf 5 months ago 188.3 MB ubuntu latest 2103b00b3fdf 5 months ago 188.3 MB ubuntu trusty 2103b00b3fdf 5 months ago 188.3 MB ubuntu trusty-20150228.11 2103b00b3fdf 5 months ago 188.3 MB ubuntu 14.04 2d24f826cb16 5 months ago 188.3 MB busybox buildroot-2014.02 4986bf8c1536 7 months ago 2.43 MB busybox latest 4986bf8c1536 7 months ago 2.43 MB 此外,通過--help參數還可以查詢docker images的詳細用法,如下: $ docker images --helpUsage: docker images [OPTIONS] [REPOSITORY]List images-a, --all=false Show all images (default hides intermediate images)--digests=false Show digests-f, --filter=[] Filter output based on conditions provided--help=false Print usage--no-trunc=false Don't truncate output-q, --quiet=false Only show numeric IDs

其中,--filter用于過濾docker images的結果,過濾器采用key=value的這種形式。目前支持的過濾器為dangling和label。 --filter "dangling=true"會顯示所有“懸掛”鏡像?!皯覓臁辩R像沒有對應的名稱和tag,并且其最上層不會被任何鏡像所依賴。docker commit在一些情況下會產生這種“懸掛”鏡像。下面第一條命令產生了一個“懸掛”鏡像,第二條命令則根據其特點過濾出該鏡像了。圖3-2中的d08407d841f3就是這種鏡像。

$ docker commit 0d6cbf57f660 $ docker images --filter "dangling=true" REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE <none> <none> d08407d841f3 3 hours ago 2.43 MB

在上面的命令中,--no-trunc參數可以列出完整長度的Image ID。若添加參數-q則會只輸出Image ID,該參數在管道命令中很有用處。一般來說懸掛鏡像并不總是我們所需要的,并且會浪費磁盤空間??梢允褂萌缦鹿艿烂顒h除所有的“懸掛”鏡像。

$ docker images --filter "dangling=true" -q | xargs docker rmi Deleted: 8a39aa048fe3f2e319651b206073b2a2e437dcf85c15fedb6f437cfe86105145

這里的--digests比較特別,這個參數是伴隨著新版本的Docker Registry V2(即Distribution)產生的,在本書接下來的第4章會詳細說明。
按照Docker官方路標和最近的動作,Docker只會保留最核心的image相關命令和功能,因此那些非核心功能就會被刪除。比如--tree和--dot已經從Docker 1.7中刪掉。官方推薦使用dockerviz工具分析Docker image。執行以下命令,可以圖形化地展示Docker image的層次關系。

dockviz images -d | dot -Tpng -o images.png

執行結果如圖3-2所示,可以看到,同一個倉庫中的鏡像并不一定要有特別的關系,比如ubuntu: 14.04和ubuntu:14.04.2之間就沒有共享任何層。



3.2.2 Build:創建一個鏡像
創建鏡像是一個很常用的功能,既可以從無到有地創建鏡像,也可以以現有的鏡像為基礎進行增量開發,還可以把容器保存為鏡像。下面就詳細介紹這些方法。
1.直接下載鏡像
我們可以從鏡像倉庫下載一個鏡像,比如,以下為下載busybox鏡像的示例。

$ docker pull busybox Using default tag: latest Pulling repository docker.io/library/busybox 8c2e06607696: Download complete cf2616975b4a: Download complete 6ce2e90b0bc7: Download complete Status: Downloaded newer image for busybox:latest

具體使用鏡像倉庫的方法,本書會在后續章節詳細描述,這里暫不做說明。
2.導入鏡像
還可以導入一個鏡像,對此,Docker提供了兩個可用的命令docker import和docker load。docker load一般只用于導入由docker save導出的鏡像,導入后的鏡像跟原鏡像完全一樣,包括擁有相同的鏡像ID和分層等內容。下面的第一行命令可以導出busybox為busybox.tar,第二條命令則是導入該鏡像:

$ docker save -o busybox.tar busybox $ docker load -i busybox.tar

不同于docker load,docker import不能用于導入標準的Docker鏡像,而是用于導入包含根文件系統的歸檔,并將之變成Docker鏡像。
3.制作新的鏡像
前面說過,docker import用于導入包含根文件系統的歸檔,并將之變成Docker鏡像。因此,docker import常用來制作Docker基礎鏡像,如Ubuntu等鏡像。與此相對,docker export則是把一個鏡像導出為根文件系統的歸檔。 

示 讀者可以使用Debian提供的Debootstrap制作Debian或Ubuntu的Base image,可以在Docker官網找到教程。

Docker提供的docker commit命令可以增量地生成一個鏡像,該命令可把容器保存為一個鏡像,還能注明作者信息和鏡像名稱,這與git commit類似。當鏡像名稱為空時,就會形成“懸掛”鏡像。當然,使用這種方式每新增加一層都需要數個步驟(比如,啟動容器、修改、保存修改等),所以效率是比較低的,因此這種方式適合正式制作鏡像前的嘗試。當最終確定制作的步驟后,可以使用docker build 命令,通過Dockerfile文件生成鏡像。

3.2.3 Ship:傳輸一個鏡像
鏡像傳輸是連接開發和部署的橋梁。可以使用Docker鏡像倉庫做中轉傳輸,還可以使用docker export/docker save生成的tar包來實現,或者使用Docker鏡像的模板文件Dockerfile做間接傳輸。目前托管在Github等網站上的項目,已經越來越多地包含有Dockerfile文件;同時Docker官方鏡像倉庫使用了github.com的webhook功能,若代碼被修改就會觸發流程自動重新制作鏡像。

3.2.4 Run:以image為模板啟動一個容器
啟動容器時,可以使用docker run命令,該命令在相關章節會詳細描述,本節不做深入說明。
圖3-3總結了上文提到的Docker鏡像生命周期管理的相關命令。現階段Docker鏡像相關的命令存在一些問題,包括:
命令間邏輯不一致,比如列出容器使用的是docker ps,列出鏡像使用的是docker images。
混用命令導致命令語義不清晰,比如查看容器和鏡像詳細信息的命令都是 docker inspect。
所以基于這些考慮,Docker項目的路標中提到會把相關命令歸類,并使用二級命令來管理。因此讀者可以著重學習命令的用法和其實現的功能,不用過分關心命令的形式。



總結

以上是生活随笔為你收集整理的《Docker进阶与实战》——3.2节使用Docker image的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。