docker(四)使用篇二:docker 鏡像

?在上一章中,我們介紹了 docker 鏡像倉庫,本文就來介紹 docker 鏡像。

一、什么是鏡像

docker 鏡像本質上是一個 read-only 只讀文件, 這個文件包含了文件系統、源碼、庫文件、依賴、工具等一些運行 application 所必須的文件。

我們可以把 Docker 鏡像?理解成一個模板,通過這個模板,可以實例化出來很多容器

docker 鏡像里面由一層層?Union FS(聯合文件系統)組成

鏡像生活案例

鏡像相當于我們 java 或者 C++中的類,相當于一個模板,可以很方便的構建出來不同的對象。

docker 鏡像的組合層核心:聯合文件系統(Union FS)

聯合文件系統可以將幾層文件目錄掛載到一起,形成一個虛擬文件系統。

每一層文件系統我們叫做一層 layer,聯合文件系統可以對每一層文件系統設置三種權限,只讀(readonly)、讀寫(readwrite)和寫出(whiteout-able),但是 docker 鏡像中每一層文件系統都是只讀的。(PS:聯合文件系統的讀寫速度都比較慢)

構建鏡像的時候,會從一個最基本的操作系統開始構建;每個構建的操作都相當于做一層文件目錄的修改,即增加了一層文件系統。

一層層往上疊加,上層的修改會覆蓋底層該位置的可見性。這也很容易理解,就像上層把底層遮住了一樣。當使用的時候,只會看到一個完全的整體,不知道里面有幾層,也不清楚每一層所做的修改是什么。

聯合文件系統使得容器可以擁有自己的文件視圖(即容器層),同時共享宿主機或者其他容器的基礎鏡像層(只讀層)。這種方式不僅減少了存儲空間的使用,而且提高了容器啟動速度,因為只需要復制必要的鏡像即可創建新的容器

聯合文件系統鏡像分層生活案例

我們以日常的地板為例,開發商的房子提供給用戶的時候一般是做好了地暖,而這些地暖其實是一層一層添加的,最底層的鋼筋水泥層,然后添加保溫層,采暖管,再鋪設水泥層,到最后交付的時候家家戶戶都是水泥面,這些層一般是不可修改的。

最上層用戶一般會再鋪設商木地板或者地板磚每家每戶的選擇不一樣,相當于我們鏡像的容器層。

二、為什么需要鏡像

1、通過打包,解決環境不一致問題

在部署應用時,原先是通過手工 / 寫一些腳本的方式進行部署。這樣部署面臨的最大問題就是云端和本地環境可能不一致。用戶為每個應用打包過程比較繁瑣,需要配置和修改等操作,非常費勁。 Docker 鏡像就是為了解決這個小小的打包功能,突然一夜之間成名。

那么,讀者可能會猜測?Docker 鏡像就是個壓縮包,是的,猜對了,它就像一個壓縮包文件。那么它是如何解決 Paas 時代所面臨的云端和本地一致性問題?

很簡單,它是把一個鏡像制作成一個完整的操作系統,有所有文件和對應的目錄結構,這樣的壓縮包跟你本地和測試環境用的操作系統一摸一樣。

2、減少空間占用,加速軟件開發

docker 最大的貢獻就是定義了容器鏡像的分層的存儲格式docker 鏡像技術的基礎是聯合文件系統(UnionFS),其文件系統是分層的。這樣既可以充分利用共享層,又可以減少存儲空間占用。

docker 鏡像提供了一種打包應用程序和預配置服務器環境的便捷方式,也可以很方便的將其用于個人用途或與其他 Docker 用戶公開共享。

三、核心:鏡像相關命令

命令清單

命令別名功能備注
docker pulldocker image pull從鏡像倉庫中拉取鏡像和鏡像倉庫命令相同,亦可以歸類為鏡像命令
docker pushdocker image push推送鏡像到倉庫和鏡像倉庫命令相同,亦可以歸類為鏡像命令
docker images
docker image
ls / docker
image list
列出本地鏡像必須掌握
docker tagdocker image tag給本地某個鏡像打標簽(標記版本),在推送鏡像到倉庫時比較有用必須掌握
docker rmi
docker image
rm / docker
image remove
刪除本地某個鏡像必須掌握
docker builddocker image build通過 dockerfile 制作鏡像必須掌握
docker savedocker image save把制定鏡像保存成 tar 格式的歸檔文件必須掌握
docker loaddocker image load導入使用 docker save 保存的 tar 格式的鏡像文件必須掌握
docker image inspect查看鏡像的詳細信息必須掌握
docker history
docker image
history
查看鏡像歷史
docker import
docker image
import
從歸檔文件 docker export 中創建鏡像。 (與容器 docker export 對應,在下一章容器章節講解)
docker prune
刪除不使用的鏡像

?1、docker images

# RESPOSITORY 指的是鏡像所在倉庫名
docker images [關鍵參數] [RESPOSITORY[:TAG]]

關鍵參數

無參情況:列出本地所有鏡像

-a:列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);

--digests:顯示鏡像的摘要信息;

-f:顯示滿足條件的鏡像;

--format:指定返回值的模板文件;

--no-trunc:顯示完整的鏡像信息;

-q :只顯示鏡像 ID

功能:?列出本地鏡像

# 列出本地全部鏡像
docker images
# 列出本地鏡像中 REPOSITORY 為 ubuntu 的鏡像列表。
docker images ubuntu

2、docker tag

# SOURCE_IMAGE:原鏡像名
# TARGET_IMAGE:目標鏡像名(可以加上倉庫地址,就可以歸入某一倉庫)
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

功能: 給本地鏡像打標簽,并歸入某一倉庫(目的通常為推送做準備)

可以看見,給 nginx 鏡像打了個標簽,倉庫中會多出一個相同鏡像ID不同 REPOSITORY 的鏡像,這個鏡像就可以作為推送到倉庫的一個版本

?3、docker rmi

# 可以同時刪除多個鏡像
docker rim [關鍵參數] 鏡像名....

關鍵參數

-f:強制刪除;

--no-prune:不移除該鏡像的過程鏡像,默認移除;

?功能:刪除指定鏡像

(PS:刪除前需要把引用了該鏡像的容器刪掉之后才能刪除鏡像;由于是比較暴力的刪除鏡像,用的較少,一般使用 docker rm 刪除容器)

成功刪除

4、docker save

# 可以同時把多個鏡像歸檔到一個文件
docker save [關鍵參數] 鏡像名...

?功能:把指定的鏡像保存成 tar 歸檔文件,便于在各個服務器上分發

關鍵參數

-o:把鏡像保存到哪一個文件中,(可以同時寫上路徑,就保存在那個路徑中;只寫文件名則是默認保存在當前文件夾中)?

成功歸檔

?5、docker load

docker load [關鍵參數]

功能:把 tar 文件再加載成鏡像

關鍵參數

--input , -i : 導入的文件的文件名,代替 STDIN

--quiet , -q : 精簡輸出信息。(默認是一層層導入的,會全部展示)

?

可以發現精簡了很多

6、docker image inspect

# 可以同時查看多個鏡像
docker image inspect [關鍵參數] 鏡像名...

?功能:查看鏡像的詳細信息

(PS:如果是 docker inspect 的話,docker 會自動判斷是鏡像還是容器,然后顯示信息)

查看詳細信息

7、docker history

docker history [關鍵參數] 鏡像名

功能:顯示鏡像的歷史?

關鍵參數:

-H , --human:大小和日期采用人容易讀的格式展現

--no-trunc:顯示全部信息,不要隔斷(不截斷的話像 ID 等都會很長)

-q, --quiet:只顯示鏡像 id 信息

從左往右每一列的意義依次是:鏡像名、鏡像創建時間、通過什么命令創建(dockerfile 命令,后文會說)、鏡像大小、注釋

8、docker import

其與容器 docker export 對應,二者搭配使用,因此將在下一章容器進行講解

9、docker image prune

docker image prune [關鍵參數]

功能:刪除當前未使用的鏡像

(PS:無參的話,會刪除虛懸鏡像,即那些既沒有標簽又被沒有任何容器引用的鏡像)

關鍵參數:

-a , --all:刪除全部不使用的鏡像(只要沒有容器使用,就被視作未使用鏡像,比較危險,慎用)?

--filter filter:指定過濾條件;

-f, --force:不提示是否刪除;

無參情況,刪除虛懸鏡像;加上 -a ,會把所有未被容器使用的鏡像刪除,比較危險!

?

10、docker build

docker build [關鍵參數] PATH | URL | -

功能:用于使用 dockfile 創建鏡像(會在 dockerfile 制作鏡像章節詳細講解)

關鍵參數:

--build-arg=[] :設置鏡像創建時的變量;

-f :指定要使用的 Dockerfile 路徑;

--label=[] :設置鏡像使用的元數據;

--no-cache :創建鏡像的過程不使用緩存;

--pull :嘗試去更新鏡像的新版本;

--quiet, -q :安靜模式,成功后只輸出鏡像 ID

--tag, -t: 鏡像的名字及標簽,通常 name:tag 或者 name 格式;可以在一次構

建中為一個鏡像設置多個標簽。

--network: 默認 default。在構建期間設置 RUN 指令的網絡模式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905844.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905844.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905844.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

k8s 1.10.26 一次containerd失敗引發kubectl不可用問題

k8s 1.10.26 一次containerd失敗引發kubectl不可用問題 開機k8s 1.10.26時,報以下錯誤 [rootmaster ~]# kubectl get no E0515 08:03:00.914894 7993 memcache.go:265] couldnt get current server API group list: Get "https://192.168.80.50:6443/api?…

今日積累:若依框架配置QQ郵箱,來發郵件,注冊賬號使用

QQ郵箱SMTP服務器設置 首先,我們需要了解QQ郵箱的SMTP服務器地址。對于QQ郵箱,SMTP服務器地址通常是smtp.qq.com。這個地址適用于所有使用QQ郵箱發送郵件的客戶端。 QQ郵箱SMTP端口設置 QQ郵箱提供了兩種加密方式:SSL和STARTTLS。根據您選…

無縫部署您的應用程序:將 Jenkins Pipelines 與 ArgoCD 集成

在 DevOps 領域,自動化是主要目標之一。這包括自動化軟件部署方式。與其依賴某人在部署軟件的機器上進行 rsync/FTP/編寫軟件,不如使用 CI/CD 的概念。 CI,即持續集成,是通過代碼提交創建工件的步驟。這可以是 Docker 鏡像&#…

4.2.3 Thymeleaf標準表達式 - 5. 片段表達式

在本次實戰中,我們通過 Thymeleaf 的片段表達式實現了模板的模塊化和復用。首先,我們定義了一個導航欄片段 navbar,并通過參數 activeTab 動態高亮當前激活的標簽。然后,我們在多個頁面(如主頁、關于頁和聯系頁&#x…

網安面試經(1)

1.說說IPsec VPN 答:IPsec VPN是利用IPsec協議構建的安全虛擬網絡。它通過加密技術,在公共網絡中創建加密隧道,確保數據傳輸的保密性、完整性和真實性。常用于企業分支互聯和遠程辦公,能有效防范數據泄露與篡改,但部署…

【C++/Qt shared_ptr 與 線程池】合作使用案例

以下是一個結合 std::shared_ptr 和 Qt 線程池(QThreadPool)的完整案例,展示了如何在多線程任務中安全管理資源,避免內存泄漏。 案例場景 任務目標:在后臺線程中處理一個耗時的圖像檢測任務,任務對象通過 …

【Unity】 HTFramework框架(六十五)ScrollList滾動數據列表

更新日期:2025年5月16日。 Github 倉庫:https://github.com/SaiTingHu/HTFramework Gitee 倉庫:https://gitee.com/SaiTingHu/HTFramework 索引 一、ScrollList滾動數據列表二、使用ScrollList1.快捷創建ScrollList2.ScrollList的屬性3.自定義…

經典案例 | 筑基與躍升:解碼制造企業產供銷協同難題

引言 制造企業如何在投產初期突破管理瓶頸,實現高效運營?G公司作為某大型集團的新建子公司,面對產供銷流程缺失、跨部門協同低效等難題,選擇與AMT企源合作開展流程優化。 項目通過端到端流程體系搭建、標準化操作規范制定及長效管…

【Python 操作 MySQL 數據庫】

在 Python 中操作 MySQL 數據庫主要通過 pymysql 或 mysql-connector-python 庫實現。以下是完整的技術指南,包含連接管理、CRUD 操作和最佳實踐: 一、環境準備 1. 安裝驅動庫 pip install pymysql # 推薦(純Python實現&#xff0…

記錄vsCode連接gitee并實現項目拉取和上傳

標題 在 VSCode 中上傳代碼到 Gitee 倉庫 要在 VSCode 中將代碼上傳到 Gitee (碼云) 倉庫,你可以按照以下步驟操作: 準備工作 確保已安裝 Git確保已安裝 VSCode擁有 Gitee 賬號并創建了倉庫 可以參考該文章的部分:idea實現與gitee連接 操…

【信息系統項目管理師】第6章:項目管理概論 - 31個經典題目及詳解

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 第一節 PMBOK的發展【第1題】【第2題】【第3題】【第4題】【第5題】【第6題】第二節 項目基本要素【第1題】【第2題】【第3題】【第4題】【第5題】【第6題】【第7題】【第8題】【第9題】【第10題】第三節 項目經…

簡單介紹C++中線性代數運算庫Eigen

Eigen 是一個高性能的 C 模板庫,專注于線性代數、矩陣和向量運算,廣泛應用于科學計算、機器學習和計算機視覺等領域。以下是對 Eigen 庫的詳細介紹: 1. 概述 核心功能:支持矩陣、向量運算,包括基本算術、矩陣分解&…

生產級編排AI工作流套件:Flyte全面使用指南 — Core concepts Launch plans

生產級編排AI工作流套件:Flyte全面使用指南 — Core concepts Launch plans Flyte 是一個開源編排器,用于構建生產級數據和機器學習流水線。它以 Kubernetes 作為底層平臺,注重可擴展性和可重復性。借助 Flyte,用戶團隊可以使用 P…

Python 之類型注解

類型注解允許開發者顯式地聲明變量、函數參數和返回值的類型。但是加不加注解對于程序的運行沒任何影響(是非強制的,且類型注解不影響運行時行為),屬于 有了挺好,沒有也行。但是大型項目按照規范添加注解的話&#xff…

rocketmq并發消費

netty的handler 在netty的網絡模型中,在想bootstrap設置handler時, 都是在等待 事件 的到來,才會被調用的方法,都是被動的, 服務端等待 request 的到來,進行read, 然后主動調用writeAndFlush寫出去。 客戶…

React 播客專欄 Vol.9|React + TypeScript 項目該怎么起步?從 CRA 到配置全流程

👋 歡迎回到《前端達人 React 播客書單》第 9 期(正文內容為學習筆記摘要,音頻內容是詳細的解讀,方便你理解),請點擊下方收聽 你是不是常在網上看到 .tsx 項目、Babel、Webpack、tsconfig、Vite、CRA、ESL…

【PmHub后端篇】PmHub中基于自定義注解和AOP的服務接口鑒權與內部認證實現

1 引言 在現代軟件開發中,尤其是在微服務架構下,服務接口的鑒權和內部認證是保障系統安全的重要環節。本文將詳細介紹PmHub中如何利用自定義注解和AOP(面向切面編程)實現服務接口的鑒權和內部認證,所涉及的技術知識點…

芯片測試之X-ray測試

原理: X-ray是利用陰極射線管產生高能量電子與金屬靶撞擊,在撞擊過程中,因電子突然減速,其損失的動能會以X-Ray形式放出。而對于樣品無法以外觀方式觀測的位置,利用X-Ray穿透不同密度物質后其光強度的變化,…

QBasic 一款古老的編程語言在現代學習中的價值(附程序)

QBasic(Quick Beginner’s All-purpose Symbolic Instruction Code)是微軟公司于 1991 年推出的一款簡單易學的編程語言,作為BASIC語言的變種,它曾廣泛應用于教育領域和初學者編程入門。盡管在當今Python、Java等現代編程語言主導…

【八股戰神篇】Java高頻基礎面試題

1 面向對象編程有哪些特性? 面向對象編程(Object-Oriented Programming,簡稱 OOP)是一種以對象為核心的編程范式,它通過模擬現實世界中的事物及其關系來組織代碼。OOP 具有三大核心特性:封裝、繼承、多態。…