Docker 檔案系統以及啟動容器的檔案系統變化

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

本文主要介紹一下 Docker 基礎的東西,先介紹一下我的實現環境:
1. windows 10 正式版
1. Docker Toolbox
1. Docker version 1.8.2
1. 官方鏡像 ubuntu:latest

這裡我們主要只說 aufs/containers/graph 這三個目錄。

1. 先進入 Docker 檔案系統目錄

ll /var/lib/docker #其中目錄是這樣的 /var/lib/docker -> /mnt/sda1/var/lib/docker/df -h # 查看掛載情況Filesystem                Size      Used Available Use% Mounted ontmpfs                   896.6M    115.3M    781.3M  13% /tmpfs                   498.1M         0    498.1M   0% /dev/shm/dev/sda1                18.2G    300.1M     16.9G   2% /mnt/sda1cgroup                  498.1M         0    498.1M   0% /sys/fs/cgroupnone                    100.0G     42.1G     57.9G  42% /c/Users/dev/sda1                18.2G    300.1M     16.9G   2% /mnt/sda1/var/lib/docker/aufsls -l /mnt/sda1/var/lib/docker/drwxr-xr-x    5 root     root          4096 Sep 28 01:59 aufs/          # 系統掛載目錄,系統使用的aufsdrwx------    2 root     root          4096 Oct  7 03:48 containers/    # 容器檔案系統drwx------    7 root     root         12288 Oct  7 03:48 graph/         # 本地鏡像-rw-r--r--    1 root     root         15360 Oct  7 03:48 linkgraph.db   -rw-------    1 root     root           105 Oct  7 03:48 repositories-aufs # 儲存與image有關的基本資料drwx------    2 root     root          4096 Oct  7 02:52 tmp/drwx------    2 root     root          4096 Sep 28 02:01 trust/drwx------    2 root     root          4096 Sep 28 01:59 volumes/

查看一下我本地的鏡像

docker images REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZEubuntu              latest              91e54dfb1179        6 weeks ago         188.4 MB

我本地有一個 ubuntu:latest 的 office image, Image 的短 ID 是 91e54dfb1179。這裡說明說一下 Docker 的鏡像是由鏡像層檔案內容 和 json檔案組成。
1. 鏡像層檔案儲存體在 /var/lib/docker/aufs/diff
1. 本地鏡像的 json 檔案存放在 /var/lib/docker/graph 檔案夾下。

 

如所示,其中鏡像的 json 檔案中儲存著鏡像的中繼資料,譬如父鏡像 id

/var/lib/docker/aufs/layers 存放著鏡像ID以及層級關係,如,我們知道最底層的 IMAGE ID 是 d3a1f33e8a5a513092f01bb7eb1c2abf4d711e5105390a3fe1ae2248cfde1391

我們查看容器層級內容

$ cd /var/lib/docker/aufs/diff/d3a1f33e8a5a513092f01bb7eb1c2abf4d711e5105390a3fe1ae2248cfde1391$ ls

 

我們就看到了如所示的 rootfs 檔案目錄,而這個鏡像就作為最根部的 Images ,我們使用的最終鏡像 ubuntu:latest 就是在這個鏡像的基礎上根據各層級的關係動態添加的。

 

如,/var/lib/docker/graph 下的鏡像 ID 以及鏡像 json,查看 json 檔案內容如:

 

如所示包含了,所有父鏡像id,和在父鏡像id 上執行的命令以及產生鏡像id 等等所有中繼資料。當我們啟動容器的時候,就會一步一步逐步的從 rootfs 上累加過來。

2. 啟動容器

docker run -i -t ubuntu bash 

當我們運行上邊的命令的時候,基礎過程如下:
1. 它會先檢查我們本地是否存在 ubuntu:latest 的鏡像,如果存在就載入鏡像,也就是我們之前提到的 91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c
2. 建立容器,程式的 CreateRootfs 會調用 Create 函數來在 mntdiff 檔案夾下建立 ID-init 檔案夾,然後通過程式的 GET 函數將依賴的 layers 層根據層級關係依次載入到 ID-init 檔案夾下。只有 ID-init是可寫,其它都是可讀。
3. 再次調用 Create 函數來建立 ID檔案夾,並在containers 檔案夾下建立 ID 檔案夾和所有設定檔 ,然後啟動容器,將依賴的容器的層依次掛載到 ID 檔案夾下。

當我們在容器內進行操作的時候,在 /var/lib/docker/containers/ID/ID-json.log 中就會進行日誌儲存,如

 

,從日誌中我們可以看出,我們對容器操作有兩部:

cd roottouch 1.txt

然後我們建立的 1.txt 檔案,記在 /var/lib/docker/diff/ID/root/ 下,如

 

這就能很簡單的看出 docker 的層級關係和資料關係。

今天就說到這裡,哪裡不懂的或者文章有錯誤的,請發送郵件到 admin#widuu.com(#換成@)

未經允許,不得轉載本站任何文章:微度網路 » Docker 檔案系統以及啟動容器的檔案系統變化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.