docker是一個開源的容器技術,可以用來構建、發(fā)布和運行應用程序。通過使用docker鏡像,用戶可以簡單、快捷地下載和安裝預先構建好的應用程序或者容器環(huán)境。
Docker鏡像是由多個層(Layer)組成的,每一層都包含了一個文件系統(tǒng)的快照。當用戶pull下Docker鏡像時,實際上就是從Docker Registry中獲取鏡像的所有層,并將其組合起來構建成完整的Docker鏡像。
那么,Docker鏡像在本地存儲的位置是什么呢?本文將為您詳細介紹。
- 查看Docker鏡像列表
首先,我們需要查看當前本地的Docker鏡像列表。在終端輸入下面命令:
docker images
執(zhí)行后,將會列出本機上所有的Docker鏡像列表,包括鏡像ID、鏡像名稱、鏡像標簽、鏡像大小等信息。如下圖所示:
從上圖可以看出,每個鏡像都有一個唯一的ID、一個名稱和一些標簽(也稱為版本)。其中,REPOSITORY字段表示鏡像的名稱,TAG字段表示鏡像的標簽,IMAGE ID字段則是該鏡像的唯一標識符。
- 查看Docker鏡像存儲位置
在Docker中,每個鏡像都是由多個層(Layer)組成的。因此,當用戶下載或者構建一個Docker鏡像時,實際上是將鏡像的所有層下載到本地存儲中。
而在Linux系統(tǒng)中,Docker鏡像實際上是存儲在/var/lib/docker目錄下的。在終端輸入下面命令:
sudo ls -l /var/lib/docker/
執(zhí)行后,終端將會顯示出/var/lib/docker/目錄下所有的文件和文件夾列表。其中,/var/lib/docker/image文件夾是Docker儲存鏡像的主要位置。如下圖所示:
在/var/lib/docker/image/overlay2/imagedb/content/sha256目錄下,存儲了所有已下載的Docker鏡像(以鏡像ID命名),即所有層的存儲位置。在每個鏡像ID目錄下,都有一個名為“real”或者“diff”文件,代表該層的存儲位置。
- 確認鏡像層存儲位置
對于Docker鏡像的每一層,其存儲位置可以通過執(zhí)行下面的命令來確認:
docker history <image_name>:<tag></tag></image_name>
例如,對于nginx鏡像,執(zhí)行命令:
docker history nginx:latest
將會輸出以下結果:
IMAGE CREATED CREATED BY SIZE COMMENT 84cf8d0a2e04 3 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B <missing> 3 weeks ago /bin/sh -c #(nop) STOPSIGNAL SIGTERM 0B <missing> 3 weeks ago /bin/sh -c #(nop) EXPOSE 80 0B <missing> 3 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx… 22B <missing> 3 weeks ago /bin/sh -c set -x && apt-get update && ap… 68.2MB <missing> 3 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=2.1.0.6 0B <missing> 3 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.16.1 0B <missing> 4 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B <missing> 4 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B <missing> 4 weeks ago /bin/sh -c #(nop) ADD file:7fbfce9f6a99e63a5… 63.2MB</missing></missing></missing></missing></missing></missing></missing></missing></missing>
其中,每一層的SIZE字段表示該層的實際占用空間大小。該命令輸出結果的第一列就是Docker鏡像每一層的ID,從上到下依次代表鏡像的各個層。
我們可以根據這個命令的輸出結果,確認每一層具體的存儲位置。例如,在上述命令的輸出結果中,最后一列是該層的描述信息,其中包括了該層的原始命令和參數。
對于nginx鏡像的第一層(ID為“84cf8d0a2e04”),該層的CMD為“CMD [“nginx” “-g” “daemon…””,即啟動nginx服務;對于后面的各層,則是其它一些配置或命令。因此,我們可以大致猜測Docker鏡像每一層的存儲位置。
- 總結
通過上述命令,用戶可以在Linux系統(tǒng)下查看本地存儲的Docker鏡像。Docker鏡像的層以鏡像ID為文件夾名存放在/var/lib/docker/image/overlay2/imagedb/content/sha256目錄中。每一層分別存儲在“real”或者“diff”文件中。
對于每一層鏡像的存儲位置,可以通過執(zhí)行docker history命令查看,在輸出結果中尋找該層的描述信息,從而大致猜測該層的存儲位置。
在使用Docker鏡像和容器時,了解Docker鏡像的存儲位置,可以更好地管理本地存儲空間,以及對Docker鏡像和容器進行備份和恢復操作。