Docker 0x06: Docker Volume卷

Docker Volume卷

在容器技術介紹篇,咱們提到過容器的難點在構建網絡和文件存儲。容器的文件系統雖然能夠保存數據,可是容器中的,容器自己是不可遷移的,只能導出其中的文件系統,可是導出文件系統不是遷移容器的最佳實踐,最佳實踐是鏡像。可是鏡像是靜態數據。改變容器文件系統的東西是不會影響到鏡像的。因此就有了掛在volume實踐。在build應用鏡像的時候,就經過VOLUME給容器建立掛載點,能夠掛在宿主機的卷或者其它容器的卷。至此,咱們知道了爲何要有volume,由於要持久化容器產生的數據。那本文將說明docker volume是什麼,怎麼使用掛載,容器間共享同步,遷移備份還原數據。ubuntu

一句話什麼是docker volume?

docker volume是docker容器對應使用的外界存儲。bash

docker volume特性

  1. 若是鏡像的掛載點有數據,那麼會經過COPY ON WRITE技術寫道數據卷裏。也就是被掛在後數據將顯示被掛載的卷的數據,取消掛在後,原掛載點的數據會出現。
  2. 容器讀取volume中的數據和宿主機操做數據是同步的,立馬生效。
  3. 數據券是能夠共享和重用的,多個容器可使用同一個數據券。相似多主機間NFS共享。
  4. 從以上能夠獲得另外一個特性,容器,數據券,鏡像能相互獨立存在。
  5. 容器刪除,對應的掛在券數據不會丟失。
  6. 容器操做數據券的IO性能,就是具體數據券所在硬件設備的IO性能。

docker 掛載卷

  1. 數據券是外界的,通常就是宿主機文件系統中的一個目錄。
  2. 能夠在docker 層面建立一個券引用名,經過該引用名能夠掛在到容器的掛在點上。固然也能夠直接使用文件系統存在目錄做爲數據券來掛載。
  3. 掛在點也是能夠預先在dockerfile中經過VOLUME建立。在啓動時會自動在/var/lib/docker/volumes/下隨機建立一個券目錄,做爲掛載點對應的數據券。
  4. 固然,也能夠docker volume create v_name 或者dockerfile中 VOLUME 掛載點都沒有操做。直接在docker run -v 券:掛載點 ,在從鏡像啓動容器時,直接設置容器外和容器內目錄的掛載。

docker 多容器間共享數據券

要實現這個,不是經過每一個容器都掛載相同的物理數據券來實現,而是經過第一個容器掛載數據券後。後面的容器在docker run時,指定一個--volumes-from 第一個dockerid,這樣新建的容器就會同第一個容器同樣,有相同掛載點對應數據卷。咱們一般稱第一個容器是「數據卷容器」網絡

刪除,查看數據卷

  1. 常看:docker volume ls 列出全部經過docker volume create的卷;docker volume inspect vol_id 常看券詳情。
  2. 刪除:docker volume rm vol_id

備份還原數據卷

應用產生的數據是很是重要的,數據持久化到數據卷後,持久化數據的備份和遷移還原也是數據卷使用的重要操做。性能

  1. 備份volume
    備份一個容器的volume,經過啓動一個新容器,共享要備份的目標容器,在新容器新掛在備份的目錄在新容器的另外一個掛載點;因爲新容器同時共享了目標容器的volume,因此在新容器中執行tar 共享掛載點數據 放到新掛載點,同時啓動新容器時指定--rm,這樣就能夠在新容器的新掛載點對應的數據卷中找到備份的數據了。
    命令以下:已經知道存在docker容器docker1 其有一個數據卷要備份時/data
    docker run -it --volumes-from docker1 -v /tmp/backup/:/backup --name docker_bk --rm ubuntu tar cvf /backup/docker1.tar /data
    執行成功的話,會炸/tmp/backup/下看到docker1.tar
    這種方式是最專業和正確的操做。ui

  2. 還原volume
    恢復基本原理同樣,也是將新容器啓動後,做爲數據卷容器,而後再啓動第二個容器,掛載備份數目錄,並--volumes-from 第一個容器,執行tar xvf 數據到第一個容器的卷中。同步

    docker run -it --name docker_recover -v test_vol:/data ubuntu /bin/bash
    docker run --rm --volumes-from docker_recover -v /tmp/backup/:/backup ubuntu tar xvf /backup/docker1.tar -C /datadockerfile

小結

  1. 數據卷的掛載
  2. 容器間共享數據卷和數據卷容器
  3. 利用數據卷容器思想,備份和恢復目標容器的目標數據卷
相關文章
相關標籤/搜索