Docker鏡像指南之從核心命令到離線遷移實戰(zhàn)
Docker鏡像是什么?
Docker鏡像本質(zhì)是一個只讀文件。它包含了創(chuàng)建Docker容器所需的全部文件和配置信息,除應用程序本身(例如一個編譯好的Jar包),還包含了應用程序運行所需的所有依賴項(如操作系統(tǒng)、運行時環(huán)境、系統(tǒng)工具、庫文件等)。
核心特性與詳細解釋
分層結(jié)構(gòu)
- 鏡像是由一系列只讀層(Layers) 堆疊而成的。
- 每一層代表鏡像Dockerfile中的一條指令(例如:RUN apt-get update, COPY . /app)。
- 這種結(jié)構(gòu)帶來了巨大的好處:
- 共享和復用:如果兩個鏡像基于同一個基礎(chǔ)層(如Ubuntu),那么它們可以共享這一層,節(jié)省磁盤空間和下載時間。
- 高效構(gòu)建:當你修改Dockerfile并重新構(gòu)建鏡像時,Docker只會重新構(gòu)建那些發(fā)生改變的層及其之后的層,大大加快了構(gòu)建速度。
只讀性(Read-Only)
- 鏡像本身是只讀的。當你從一個鏡像啟動一個容器時,Docker會在鏡像的所有層之上添加一個可寫的容器層(Container Layer)。
- 所有對運行中容器的修改(如創(chuàng)建新文件、修改文件、安裝軟件)都發(fā)生在這個可寫層上。這使得容器可以隨意更改,而不會影響到底層的基礎(chǔ)鏡像。
- 當某個容器需要修改這個共享層里的文件時,寫時復制機制會觸發(fā),為該容器單獨復制一份文件到其可寫層進行修改,而其他容器仍然讀取原始文件。
內(nèi)容可尋址(Content-Addressable)
- 每個鏡像都有一個唯一的標識符,稱為鏡像ID(一個SHA256哈希值)。這個ID是根據(jù)鏡像每一層的內(nèi)容計算出來的。
- 這意味著只要鏡像的內(nèi)容完全相同,它們的ID就一定會相同。這保證了鏡像的唯一性和完整性。
基于聯(lián)合文件系統(tǒng)(Union File Systems)
- 分層和只讀的特性是通過聯(lián)合文件系統(tǒng)(如Overlay2、AUFS) 來實現(xiàn)的。這種文件系統(tǒng)能夠?qū)⒍鄠€不同的目錄(層)透明地疊加在一起,形成一個統(tǒng)一的視圖,呈現(xiàn)給容器。
為什么要使用鏡像?
最核心的理由是:鏡像提供了一種標準化的、輕量級的、不可變的交付物,它保證了應用在任何環(huán)境中都能以完全一致的方式運行,從而實現(xiàn)了“構(gòu)建一次,隨處運行”。
下面我們從幾個關(guān)鍵角度來詳細拆解為什么要使用鏡像:
- 解決環(huán)境一致性難題(“在我這兒是好的!”)
這是使用鏡像最首要、最直接的原因。
傳統(tǒng)痛點:
- 開發(fā)環(huán)境:代碼跑通了。
- 測試環(huán)境:測試說有問題,依賴的庫版本不對。
- 生產(chǎn)環(huán)境:運維部署失敗,系統(tǒng)配置有差異。
這就是經(jīng)典的“ works on my machine ”問題。
鏡像的解決方案:
- 鏡像將應用代碼、運行時環(huán)境、系統(tǒng)工具、系統(tǒng)庫、配置全部打包在一起,形成一個完整的、獨立的軟件包。
- 這個包在開發(fā)、測試、生產(chǎn)任何環(huán)節(jié)都完全一致。
- 結(jié)果:只要在開發(fā)機能運行成功,那么在任何裝有Docker的機器上(測試、預生產(chǎn)、生產(chǎn)),它都能以完全相同的方式運行,徹底消除了環(huán)境差異帶來的問題。
- 實現(xiàn)極致的標準化和交付簡化
鏡像成為一種通用的、標準的軟件交付物。
- 傳統(tǒng)方式:交付物可能是一份代碼、一個War/Jar包,再加上一長串的、復雜的、可能還不全的“環(huán)境配置說明文檔”。
- 鏡像方式:交付物就是一個鏡像文件(或一個鏡像名稱和標簽)。部署命令簡單到極致:docker run our-app:latest。
這個命令包含了下載、解壓、配置、運行所有步驟。它極大地簡化了部署流程,降低了運維成本和對運維人員技能的要求。
鏡像相關(guān)的命令
關(guān)于login,pull,push等命令的解析請參考:Docker核心概念與鏡像倉庫操作指南
docker rmi
功能:刪除鏡像。
語法:
docker rmi [OPTIONS] IMAGE [IMAGE...]
別名:docker image rm,docker image remove
關(guān)鍵參數(shù):
-f:強制刪除;--no-prune:不移除該鏡像的過程鏡像,默認移除。
示例:
- 準備鏡像:
docker pull busybox:1.36.0docker pull busybox:1.35.0
- 查看鏡像:
docker images busybox - 刪除鏡像
- 方法一:通過ID刪除
- 方法二:通過tag刪除

注意:被引用的鏡像無法被刪除,需要先關(guān)閉相應的容器。
示例:
- 重新拉取鏡像:
docker pull busybox:1.36.0 busybox:1.36.0 - 啟動容器:
docker run -it --name mybox busybox:1.36.0 sh - 刪除鏡像:
docker rmi busybox:1.36.0 - 刪除容器:
docker rm mybox - 再次刪除鏡像:
docker rmi busybox:1.36.0 - 查看鏡像信息:
docker images busybox

注意:鏡像有多個標簽時,指定鏡像標簽所刪除的只是標簽,鏡像并沒刪除,在使用該鏡像的容器在運行,只是不能再用標簽管理,只能使用ID
docker save
功能:將指定鏡像保存成 tar 歸檔文件。
語法:
docker save [OPTIONS] IMAGE [IMAGE...]
別名:docker image save
關(guān)鍵參數(shù):
-o:輸出到的文件。
示例:

docker load
功能:導入使用 docker save 命令導出的鏡像。
語法:
docker load [OPTIONS]
別名:docker image load
關(guān)鍵參數(shù):
--input, -i:指定導入的文件,代替 STDIN。--quiet, -q:精簡輸出信息。
示例:
- 刪除原有鏡像
- 導入鏡像

docker history
功能:展示的是鏡像的構(gòu)建歷史記錄
語法:
docker history [OPTIONS] IMAGE
別名:docker image history
關(guān)鍵參數(shù):
-H, --human:大小和日期采用人容易讀的格式展現(xiàn)--no-trunc:顯示全部信息,不要隔斷-q, --quiet:只顯示鏡像 ID 信息
示例:

docker image prune
功能:刪除不使用的鏡像。
語法:docker image prune [OPTIONS]
關(guān)鍵參數(shù):
-a, --all:刪除全部不使用的鏡像;--filter filter:指定過濾條件;-f, --force:不提示是否刪除。
離線遷移鏡像
離線遷移鏡像指的是在沒有網(wǎng)絡(luò)連接或無法直接訪問鏡像倉庫(如Docker Hub、Harbor)的環(huán)境下,將Docker鏡像從一臺機器轉(zhuǎn)移到另一臺機器的過程。
它不通過網(wǎng)絡(luò)拉取(docker pull),而是先將鏡像打包成一個離線文件(如.tar歸檔文件),然后通過物理媒介(如U盤、移動硬盤)或內(nèi)部文件傳輸方式,將這個文件復制到目標機器上,最后再加載到目標機器的Docker環(huán)境中。
這里使用scp把鏡像從一個服務(wù)器拷貝到另一個服務(wù)器,這個過程的鏡像數(shù)據(jù)流是在兩個服務(wù)器之間直接通過SSH協(xié)議傳輸?shù)?,完全走的是?nèi)部的網(wǎng)絡(luò)通道,與外部互聯(lián)網(wǎng)隔離。
- 導出鏡像:
docker save -o mybox2.0 busybox:1.35.0 - 拷貝到另一臺服務(wù)器:
scp docker mybox2.0 root@服務(wù)器IP:要拷貝到的目錄 - 另一臺服務(wù)器把鏡像導出:
docker load -i mybox2.0
到此這篇關(guān)于Docker鏡像指南之從核心命令到離線遷移實戰(zhàn)的文章就介紹到這了,更多相關(guān)Docker鏡像離線遷移內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker Gitlab+Jenkins+Harbor構(gòu)建持久化平臺操作
這篇文章主要介紹了Docker Gitlab+Jenkins+Harbor構(gòu)建持久化平臺操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Docker數(shù)據(jù)存儲之tmpfs mounts詳解
今天小編就為大家分享一篇關(guān)于Docker數(shù)據(jù)存儲之tmpfs mounts詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02

