1. 程式人生 > >Docker儲存驅動之OverlayFS簡介

Docker儲存驅動之OverlayFS簡介

簡介

  OverlayFS是一種和AUFS很類似的檔案系統,與AUFS相比,OverlayFS有以下特性:
   1) 更簡單地設計;
   2) 從3.18開始,就進入了Linux核心主線;
   3) 可能更快一些。
  因此,OverlayFS在Docker社群關注度提高很快,被很多人認為是AUFS的繼承者。就像宣稱的一樣,OverlayFS還很年輕。所以,在生成環境使用它時,還是需要更加當心。
  Docker的overlay儲存驅動利用了很多OverlayFS特性來構建和管理映象與容器的磁碟結構。
  自從Docker1.12起,Docker也支援overlay2儲存驅動,相比於overlay來說,overlay2在inode優化上更加高效。但overlay2驅動只相容Linux kernel4.0以上的版本。
  注意

:自從OverlayFS加入kernel主線後,它在kernel模組中的名稱就被從overlayfs改為overlay了。但是為了在本文中區別,我們使用OverlayFS代表整個檔案系統,而overlay/overlay2表示Docker的儲存驅動。

overlay和overlay2

OverlayFS(overlay)的映象分層與共享

  OverlayFS使用兩個目錄,把一個目錄置放於另一個之上,並且對外提供單個統一的視角。這兩個目錄通常被稱作層,這個分層的技術被稱作union mount。術語上,下層的目錄叫做lowerdir,上層的叫做upperdir。對外展示的統一檢視稱作merged。
  下圖展示了Docker映象和Docker容器是如何分層的。映象層就是lowerdir,容器層是upperdir。暴露在外的統一檢視就是所謂的merged。
  OverlayFS and Docker


  注意映象層和容器層是如何處理相同的檔案的:容器層(upperdir)的檔案是顯性的,會隱藏映象層(lowerdir)相同檔案的存在。容器對映(merged)顯示出統一的檢視。
  overlay驅動只能工作在兩層之上。也就是說多層映象不能用多層OverlayFS實現。替代的,每個映象層在/var/lib/docker/overlay中用自己的目錄來實現,使用硬連結這種有效利用空間的方法,來引用底層分享的資料。注意:Docker1.10之後,映象層ID和/var/lib/docker中的目錄名不再一一對應。
  建立一個容器,overlay驅動聯合映象層和一個新目錄給容器。映象頂層是overlay中的只讀lowerdir,容器的新目錄是可寫的upperdir。

overlay中映象和容器的磁碟結構

  下面的docker pull命令展示了Docker host下載一個由5層組成的映象。

$ sudo docker pull ubuntu

Using default tag: latest
latest: Pulling from library/ubuntu

5ba4f30e5bea: Pull complete
9d7d19c9dc56: Pull complete
ac6ad7efd0f9: Pull complete
e7491a747824: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:46fb5d001b88ad904c5c732b086b596b92cfb4a4840a3abd0e35dbb6870585e4
Status: Downloaded newer image for ubuntu:latest

  上圖的輸出結果顯示pull了5個目錄包含了5個映象層,每一層在/var/lib/docker/overlay/下都有自己的目錄。還是再次提醒下,如你所見,Docker1.10之後,映象層和目錄名不再對應。

$ ls -l /var/lib/docker/overlay/

total 20
drwx------ 3 root root 4096 Jun 20 16:11 38f3ed2eac129654acef11c32670b534670c3a06e483fce313d72e3e0a15baa8
drwx------ 3 root root 4096 Jun 20 16:11 55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358
drwx------ 3 root root 4096 Jun 20 16:11 824c8a961a4f5e8fe4f4243dab57c5be798e7fd195f6d88ab06aea92ba931654
drwx------ 3 root root 4096 Jun 20 16:11 ad0fe55125ebf599da124da175174a4b8c1878afe6907bf7c78570341f308461
drwx------ 3 root root 4096 Jun 20 16:11 edab9b5e5bf73f2997524eebeac1de4cf9c8b904fa8ad3ec43b3504196aa3801

  映象層目錄中,共享的資料使用的是硬連結,他們的inode號相同。這樣做有效地利用了磁碟。

$ ls -i /var/lib/docker/overlay/38f3ed2eac129654acef11c32670b534670c3a06e483fce313d72e3e0a15baa8/root/bin/ls

19793696 /var/lib/docker/overlay/38f3ed2eac129654acef11c32670b534670c3a06e483fce313d72e3e0a15baa8/root/bin/ls

$ ls -i /var/lib/docker/overlay/55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358/root/bin/ls

19793696 /var/lib/docker/overlay/55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358/root/bin/ls

  容器也在/var/lib/docker/overlay/下。使用ls -l命令檢視容器目錄,會發現以下檔案和目錄。

$ ls -l /var/lib/docker/overlay/<directory-of-running-container>

total 16
-rw-r--r-- 1 root root   64 Jun 20 16:39 lower-id
drwxr-xr-x 1 root root 4096 Jun 20 16:39 merged
drwxr-xr-x 4 root root 4096 Jun 20 16:39 upper
drwx------ 3 root root 4096 Jun 20 16:39 work

  這四個檔案系統物件都是OverlayFS的元件。lower-id檔案包含了容器的映象層最頂層的ID。

$ cat /var/lib/docker/overlay/ec444863a55a9f1ca2df72223d459c5d940a721b2288ff86a3f27be28b53be6c/lower-id

55f1e14c361b90570df46371b20ce6d480c434981cbda5fd68c6ff61aa0a5358

  upper目錄是容器的可讀寫層。任何對容器的改變都寫在這個目錄中。
  merged目錄就是容器的mount point,這就是暴露的映象(lowerdir)和容器(upperdir)的統一檢視。任何對容器的改變也影響這個目錄。
  work目錄是OverlayFS功能需要的,會被如copy_up之類的操作使用。
  可以通過mount命令來核實上面的描述是否正確。

$ mount | grep overlay

overlay on /var/lib/docker/overlay/ec444863a55a.../merged
type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay/55f1e14c361b.../root,
upperdir=/var/lib/docker/overlay/ec444863a55a.../upper,
workdir=/var/lib/docker/overlay/ec444863a55a.../work)

OverlayFS(overlay2)的映象分層與共享

  overlay驅動只工作在一個lower OverlayFS層之上,因此需要硬連結來實現多層映象,但overlay2驅動原生地支援多層lower OverlayFS映象(最多128層)。
  因此overlay2驅動在合層相關的命令(如build和commit)中提供了更好的效能,與overlay驅動對比,消耗了更少的inode。

overlay2中映象和容器的磁碟結構

  docker pull ubuntu下載了包含5層的映象,可以看到在/var/lib/docker/overlay2中,有6個目錄。

$ ls -l /var/lib/docker/overlay2

total 24
drwx------ 5 root root 4096 Jun 20 07:36 223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7
drwx------ 3 root root 4096 Jun 20 07:36 3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b
drwx------ 5 root root 4096 Jun 20 07:36 4e9fa83caff3e8f4cc83693fa407a4a9fac9573deaf481506c102d484dd1e6a1
drwx------ 5 root root 4096 Jun 20 07:36 e8876a226237217ec61c4baf238a32992291d059fdac95ed6303bdff3f59cff5
drwx------ 5 root root 4096 Jun 20 07:36 eca1e4e1694283e001f200a667bb3cb40853cf2d1b12c29feda7422fed78afed
drwx------ 2 root root 4096 Jun 20 07:36 l

  l目錄包含了很多軟連線,使用短名稱指向了其他層。短名稱用於避免mount引數時達到頁面大小的限制。

$ ls -l /var/lib/docker/overlay2/l

total 20
lrwxrwxrwx 1 root root 72 Jun 20 07:36 6Y5IM2XC7TSNIJZZFLJCS6I4I4 -> ../3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 B3WWEFKBG3PLLV737KZFIASSW7 -> ../4e9fa83caff3e8f4cc83693fa407a4a9fac9573deaf481506c102d484dd1e6a1/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 JEYMODZYFCZFYSDABYXD5MF6YO -> ../eca1e4e1694283e001f200a667bb3cb40853cf2d1b12c29feda7422fed78afed/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 NFYKDW6APBCCUCTOUSYDH4DXAT -> ../223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 UL2MW33MSE3Q5VYIKBRN4ZAGQP -> ../e8876a226237217ec61c4baf238a32992291d059fdac95ed6303bdff3f59cff5/diff

  在最低層中,有個link檔案,包含了前面提到的這個層對應的短名稱;還有個diff目錄,包含了這個映象的內容。

$ ls /var/lib/docker/overlay2/3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/

diff  link

$ cat /var/lib/docker/overlay2/3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/link

6Y5IM2XC7TSNIJZZFLJCS6I4I4

$ ls  /var/lib/docker/overlay2/3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/diff

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

  第二底層中,lower檔案指出了該層的組成。該目錄還有diff、merged和work目錄。

$ ls /var/lib/docker/overlay2/223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7

diff  link  lower  merged  work

$ cat /var/lib/docker/overlay2/223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7/lower

l/6Y5IM2XC7TSNIJZZFLJCS6I4I4

$ ls /var/lib/docker/overlay2/223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7/diff/

etc  sbin  usr  var

  執行容器包含的目錄同樣有著類似的檔案和目錄。注意在lower檔案中,使用:符號來分割不同的底層,並且順序是從高層到底層。

$ ls -l /var/lib/docker/overlay/<directory-of-running-container>

$ cat /var/lib/docker/overlay/<directory-of-running-container>/lower

l/DJA75GUWHWG7EWICFYX54FIOVT:l/B3WWEFKBG3PLLV737KZFIASSW7:l/JEYMODZYFCZFYSDABYXD5MF6YO:l/UL2MW33MSE3Q5VYIKBRN4ZAGQP:l/NFYKDW6APBCCUCTOUSYDH4DXAT:l/6Y5IM2XC7TSNIJZZFLJCS6I4I4

  mount的結果如下:

$ mount | grep overlay

overlay on /var/lib/docker/overlay2/9186877cdf386d0a3b016149cf30c208f326dca307529e646afce5b3f83f5304/merged
type overlay (rw,relatime,
lowerdir=l/DJA75GUWHWG7EWICFYX54FIOVT:l/B3WWEFKBG3PLLV737KZFIASSW7:l/JEYMODZYFCZFYSDABYXD5MF6YO:l/UL2MW33MSE3Q5VYIKBRN4ZAGQP:l/NFYKDW6APBCCUCTOUSYDH4DXAT:l/6Y5IM2XC7TSNIJZZFLJCS6I4I4,
upperdir=9186877cdf386d0a3b016149cf30c208f326dca307529e646afce5b3f83f5304/diff,
workdir=9186877cdf386d0a3b016149cf30c208f326dca307529e646afce5b3f83f5304/work)

容器使用overlay讀寫

  有三種場景,容器會通過overlay只讀訪問檔案。
    容器層不存在的檔案。如果容器只讀開啟一個檔案,但該容器不在容器層(upperdir),就要從映象層(lowerdir)中讀取。這會引起很小的效能損耗。
    只存在於容器層的檔案。如果容器只讀許可權開啟一個檔案,並且容器只存在於容器層(upperdir)而不是映象層(lowerdir),那麼直接從映象層讀取檔案,無額外效能損耗。
    檔案同時存在於容器層和映象層。那麼會讀取容器層的檔案,因為容器層(upperdir)隱藏了映象層(lowerdir)的同名檔案。因此,也沒有額外的效能損耗。
  有以下場景容器修改檔案。
    第一次寫一個檔案。容器第一次寫一個已經存在的檔案,容器層不存在這個檔案。overlay/overlay2驅動執行copy-up操作,將檔案從映象層拷貝到容器層。然後容器修改容器層新拷貝的檔案。
    然而,OverlayFS工作在檔案級別而不是塊級別。也就是說所有的OverlayFS的copy-up操作都會拷貝整個檔案,即使檔案非常大但卻只修改了一小部分,這在容器寫效能上有著顯著的影響。不過,有兩個方面值得注意:
     ▷ copy-up操作只發生在第一次寫檔案時。後續的對同一個檔案的寫操作都是直接針對拷貝到容器層的那個新檔案。
     ▷ OverlayFS只工作在兩層中。這比AUFS要在多層映象中查詢時效能要好。
    刪除檔案和目錄。刪除檔案時,容器會在映象層建立一個whiteout檔案,而映象層的檔案並沒有刪除。但是,whiteout檔案會隱藏它。
    容器中刪除一個目錄,容器層會建立一個不透明目錄。這和whiteout檔案隱藏映象層的檔案類似。
    重新命名目錄。只有在源路徑和目的路徑都在頂層容器層時,才允許執行rename操作。否則,會返回EXDEV。
    因此,你的應用需要能夠處理EXDEV,並且回滾操作,執行替代的“拷貝和刪除”策略。

在Docker中配置overlay/overlay2儲存驅動

  為了給Docker配置overlay儲存驅動,你的Docker host必須執行在Linux kernel3.18版本之上,而且載入了overlay核心驅動。對於overlay2驅動,kernel版本必須在4.0或以上。OverlayFS可以執行在大多數Linux檔案系統之上。不過,現在最建議在生產環境中使用ext4。
  下面的步驟講述瞭如何在Docker host中配置使用OverlayFS。
  注意:在開始配置之前,如果你已經在使用Docker daemon,並且有一些想保留的映象,簡易你push它們到Docker hub中。
    1) 如果Docker daemon正在執行,需要先停止其執行。

$ systemctl stop docker.service

    2) 檢查kernel版本,確認overlay的核心模組是否載入。

$ uname -r

4.4.0-64-generic

$ lsmod | grep overlay

overlay

# 如果上面命令沒有輸出,說明驅動沒有載入,可以如下操作
$ modprobe overlay

    3) 使用overlay/overlay2儲存驅動來啟動Docker daemon。

$ dockerd --storage-driver=overlay2 &

[1] 29403
[email protected]:/home/ubuntu# INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)
INFO[0000] Option DefaultDriver: bridge
INFO[0000] Option DefaultNetwork: bridge
<output truncated>

    此外,你還可以在Docker的配置檔案中新增--storage-driver=overlay的標誌到DOCKER_OPTS中,這樣就可以持久化配置,不再需要啟動daemon時手動指定--storage-driver標誌了。比如,可以將配置持久化到配置檔案/etc/default/docker中,將下面內容加入該檔案中。

DOCKER_OPTS="--storage-driver=overlay2"

    4) 檢查daemon是否已經使用了overlay/overlay2儲存驅動。

$ docker info

Containers: 0
Images: 0
Storage Driver: overlay2
Backing Filesystem: extfs
<output truncated>

    注意輸出結果顯示後端檔案系統使用的是extfs。雖然支援多種檔案系統,但是生產環境中還是建議使用extfs(尤其ext4)。

OverlayFS和Docker效能

  一般來說,overlay/overlay2驅動更快一些,幾乎肯定比aufs和devicemapper更快,在某些情況下,可能比btrfs也更快。即便如此,在使用overlay/overlay2儲存驅動時,還是需要注意以下一些方面:

  •   Page Caching,頁快取。OverlayFS支援頁快取共享,也就是說如果多個容器訪問同一個檔案,可以共享一個或多個頁快取選項。這使得overlay/overlay2驅動高效地利用了記憶體,是PaaS平臺或者其他高密度場景的一個很好地選項。
  •   copy_up。和AuFS一樣,在容器第一次修改檔案時,OverlayFS都需要執行copy-up操作,這會給寫操作帶來一些延遲——尤其這個要拷貝的檔案很大時。不過,一旦檔案已經執行了這個向上拷貝的操作後,所有後續對這個檔案的操作都只針對這份容器層的新拷貝而已。
    OverlayFS的copy_up操作比AuFS的copy_up操作要快。因為AUFS支援比OverlayFS支援更多的層數,如果需要在多層查詢檔案時,就可能導致比較大的延遲。
  •   Inode limits。使用overlay儲存驅動可能導致過多的inode消耗,尤其是Docker host上映象和容器的數目增長時。大量的映象,或者很多容器啟停,,會迅速消耗掉該Docker host上的inode。overlay2儲存驅動不存在這個問題。
      不幸的是,只能在檔案系統建立時指定inode的個數。因此,可以考慮將/var/lib/docker放在一個單獨的裝置檔案系統中,或者在建立檔案系統時指定inode個數。
      以下一些方法可以提供OverlayFS的效能。
  •   使用Solid State Devices(SSD)。
  •   使用資料卷。資料卷能提高更好的效能,因為其繞過儲存驅動,不會引起超配、copy-on-write可能會導致的隱患。

    OverlayFS相容性

      有以下兩點OverlayFS和其他檔案系統不太相容:
  • open(2)。OverlayFS支援吃POSIX標準的一個子集。以copy-up操作為例,加入你的應用呼叫了fd1=open("foo", O_RDONLY) 和 fd2=open("foo", O_RDWR),你的應用期望fd1和fd2指向同一個檔案,然而,因為copy-up操作,會導致指向不同的檔案。
  • rename(2),這個和前面提到AuFS一致。

    小結

      overlay/overlay2儲存驅動已經成為了Docker儲存驅動的首選,並且效能優於AuFS和devicemapper。不過,他們也帶來了一些與其他檔案系統的不相容性,如對open和rename操作的支援。另外,overlay與overlay2相比,overlay2支援了多層映象,優化了inode使用。然而,使用這兩種驅動時,需要注意你的Docker host的kernel版本。

相關推薦

Docker儲存驅動OverlayFS簡介

簡介   OverlayFS是一種和AUFS很類似的檔案系統,與AUFS相比,OverlayFS有以下特性:    1) 更簡單地設計;    2) 從3.18開始,就進入了Linux核心主線;    3) 可能更快一些。   因此,OverlayFS在Docker社群關注

Docker儲存驅動AUFS簡介

簡介   AUFS曾是Docker預設的首選儲存驅動。它非常穩定、有很多真實場景的部署、很強的社群支援。它有以下主要優點:   極短的容器啟動時間。   有效的儲存利用率。   有效的記憶體利用率。   雖然如此,但由於它沒有包含在Linux核心主線中

docker 儲存驅動overlay2

overlay2 overlay2原生支援128層,這提供docker build和docker commit更好的效能支援 在執行完docker pull ubuntu後,可以看到 $ ls -l /var/lib/docker/overlay2

有容雲-【原理】Docker儲存驅動AUFS

編者按:今天聊一聊Docker的Image(映象)與Container(容器)的儲存以及儲存驅動之AUFS。 Docker儲存驅動簡介 Docker內建多種儲存驅動,每種儲存驅動都是基於Li

docker 儲存驅動overlay

overlay OverlayFS是一個類似於AUFS 的現代聯合檔案系統,但更快,實現更簡單。Docker為OverlayFS提供了一個儲存驅動程式。 * 注:OverlayFS是核心提供的檔案系統,overlay和overlay2是docker提供的儲存

Docker儲存驅動overlay新映象儲存的實現和inode耗盡問題

映象是按層下載和管理的,新映象下載的檔案臨時存放在/var/lib/docker/tmp,檔案命名方式是GetImageBlobxxx(xxx是一串隨機數字),這些臨時檔案時按層打包為tar.gz等壓縮包。臨時檔案首先被解壓為tar包存在快取中,然後使用dock

修改docker儲存驅動

docker info systemctl stop docker dd if=/dev/zero of=/virtual_disk.img bs=1M count=2048 losetup /dev/

【探索docker儲存路】三、docker中的映象儲存Overlayfs

docker中的映象儲存 docker中映象的概念其實就是一組只讀目錄。每一個目錄是一個layer,多個layer按照一定的順序組成一個stack。在容器建立時,docker增加在stack之上一個thin和writable layer,如下圖 基

Docker功能簡介

docker 功能簡介 摘要: Docker 企業版 (EE)版本在三個主要方面提供了新的功能和能力:多架構編排、安全的多租戶、基於策略的自動化。 通過最新發布的 Docker 企業版 (EE),Docker 提供了業界首屈一指的“容器即服務”(CaaS) 平臺,組織能夠在不中斷 IT 環境

Docker旅-簡介-01

毫秒 apache 自己的 esp blog 進行 googl 時間 很多 什麽是 Docker? Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並

Docker 網絡理解 bridge 驅動

In tcp 方式 name mas 概念 幫助 res 滿足 筆者在前文《Docker 網絡之進階篇》中介紹了 CNM(Container Network Model),並演示了 bridge 驅動下的 CNM 使用方式。為了深入理解 CNM 及最常用的 bridge 驅

docker容器技術儲存卷(五)

上一篇文章連結:docker容器技術之虛擬化網路概述(四) 目錄   一、Docker底層儲存機制介紹 二、儲存卷介紹 2.1、容器內的檔案系統存在的問題 2.2、volume的好處 2.3、volume的種類 三、Docker容器使用volume

理解Docker(8):Docker 儲存卷(Volume) (轉)

1. Docker volume 的幾種形態     有狀態容器都有資料持久化需求。前一篇文章中提到過,Docker 採用 AFUS 分層檔案系統時,檔案系統的改動都是發生在最上面的容器層。在容器的生命週期內,它是持續的,包括容器在被

docker基礎:Aufs儲存驅動設定

本文用於記錄ubuntu 17.10下docker 17.12.1-ce版本下overlay2的設定到aufs的方法。在Ubuntu 16.04以及更新的版本中,Linux核心引入了OverlayFS的支援,而且Docker CE也開始使用overlay2作為預設的儲存驅動,

Docker入門-1簡介與安裝

一、簡介 a、為什麼出現docker?       一款產品從開發到上線,從作業系統,到執行環境,再到應用配置。作為開發+運維之間的協作我們需要關心很多東西,這也是很多網際網路公司都不得不面對的問題,特別是各種版本的迭代之後,不同版本環境的相容,對運維人員都是考驗 Doc

理解docker映象,容器和儲存驅動

理解docker映象,容器和儲存驅動 2016年9月5日 14:40 一. 映象 映象作為docker中最基本的概念,有以下幾個特性: 分層,每個映象都由一個或多個映象層組成可通過在某個映象加上一定的映象層得到新映象(此過程可通過編寫dockerfile或在容器中com

docker學習——1,基於overlay2儲存驅動的理解

首先我一直誤解一個東西(很蠢),就是我在讀《docker容器實戰》這本書的時候,看見書上說“容器在退出後並不會更改映象,如果要持久化資料,就要通過commit儲存映象”,我最開始還以為如果對容器進行操作,退出時做的修改就沒有了。後來發現退出容器後在進入停止的容器,做的修改任然存在,只不過是

【探索docker儲存路】一、窺探docker中的volume plugin內幕

重構前言 本來想後續一篇文章專門寫docker volume plugin。這篇可以簡單粗暴的拉通docker的程式碼。之前看《Docker容器和容器雲》感覺原理解析部分沒有進一步深入到volume plugin的層次。本想以此作為第3篇的主要內容。最近看了一下新出

Docker 儲存資料卷(Volume)

Volume提供了獨立於容器之外的持久化儲存,以及容器與容器之間的共享資料。 建立資料卷 在docker run 命令中加-v選項可以建立資料卷。下面執行一個ngnix容器,通過-v掛載一個卷。 當我們建立一個容器的時候,docker會自動對它進行

docker 替換儲存驅動

需要對比不同儲存驅動對docker的執行的影響:修改或新增如下檔案。/etc/docker/daemon.json編輯內容如:{"storage-driver":"overlay2"}注意:    不同的驅動對核心版本及檔案系統版本不同,以及docker的CE或EE版本是不一