docker數據卷應用場景

docker數據卷應用場景

  • 在多個容器之間共享數據,多個容器可以同時以只讀或者讀寫的方式掛載統一個數據卷,從而共享數據卷中的數據
  • 當宿主機不能保證一定存在某一個目錄或一些固定的文件路徑時,使用數據卷可以規避這種限制帶來的問題
  • 當想把容器中的數據存儲在宿主機之外的地方時,比如遠程主機上和雲存儲上
  • 當你需要把容器數據在不同宿主機之間備份、恢復或遷移時,數據卷是很好的選擇

數據覆蓋問題

  • 如果掛載一個空的數據捲到容器中的一個非空目錄中,那麼這個目錄下的文件會被複制到數據卷中
  • 如果掛載一個非空的數據捲到容器中的一個目錄中,那麼容器中的目錄會顯示數據卷中的數據。如果原來容器中的目錄有數據,那麼原始數據會被隱藏掉

這兩個規則都非常重要,靈活利用第一個規則可以幫助我們初始化數據卷中的內容。掌握第二個規則可以保證掛載數據卷後的數據總是你期望的結果。

創建一個數據卷,然後將其掛載

$ docker volume create my-vol
$ docker run -d  -p 80:80 -name webserver  \
    # -v my-vol:/webapp    
    --mount source=my-vol, target=/webapp \
    nginx:latest

使用mount掛載數據卷

除了使用--volume(-v)掛載數據卷,現在docker提供了更強大的--mount選項來管理數據卷。mount選項可以通過都好分隔的多個鍵值對一次提供多個配置項,因此mount選項可以提供比volume選項更詳細的配置:

  • type: 指定掛載方式,這裏我們用到是volume, 其實還可以是bind和tmpfs
  • volume-dirver 指定掛載數據卷的驅動程序,默認是local
  • source 指定掛載的源,對於一個命名的數據卷,治理應該指定這個數據卷的名稱,在使用時可以寫source, 也可以簡寫爲src
  • destination 指定掛載的數據在容器中的路徑。在使用時可以寫destination,也可以簡寫爲dst和target
  • readonly 指定掛載的數據爲只讀
  • volume-opt 可以指定多次,用來提高更多的mount相關的配置

使用 volume driver把數據存儲到其它地方

除了默認的把數據卷中的數據存儲在宿主機,docker還允許我們通過指定volume driver的方式把數據卷中的數據存儲在其它地方,比如Azru Storage 或 AWS 的S3。

簡單起見,我們接下來的demo演示如何通過演示如何通過vieux/sshfs驅動把數據卷的存儲在其它的主機上。

docker默認時不安裝vieux/sshfs插件的,我們可以通過下面的命令進行安裝

$ docker plugin install --grant-permissions vieux/sshfs

然後通過vieux/sshfs創建數據卷,並指定遠程主機的登陸用戶名,密碼和數據存放目錄

$ docker volume create --driver vieux/sshfs \
    -o [email protected]:/home/nick/sshvolume \
    -o password=yourpassword \
    mysshvolume

注意,請確保你指定的遠程主機上的掛載點目錄是存在的(demo中是/home/nik/sshvolume), 否則在容器啓動時會報錯。

最後,在啓動容器時指定掛載這個數據卷

$ docker run -d --name sshfs \
    --mount type=volume,volume-driver=vieux/sshfs, source=mysshvolume, targe=myworld \
    ubuntu /bin/bash

掛載主機目錄

$ docker run -d -p 80:80 --name webserver \
    --mount type=bind,src=/data/docker,dst=/usr/share/nginx/html \
    nginx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章