Docker Volume數據共享

為什麼要數據共享

數據共享分為兩種,容器與主機之間的數據共享,容器與容器之間的數據共享。容器與主機之間共享數據可以理解為容器使用主機的volume,並且多個容器可以同時使用一個主機的volume。容器與容器之間共享數據可以理解為容器A使用容器B掛載的數據卷volume,

容器與主機之間的數據共享

掛載主機目錄做為數據卷

-v [主機目錄]:[容器目錄]

docker run -itd --privileged --name container_name -v /data:/data centos /usr/sbin/init

這個時候我們將主機的/data目錄掛載到容器的/data目錄;這個時候我們在主機目錄中寫文件容器目錄中會同步;容器目錄中寫文件主機目錄也會同步。

大家都很熟悉這裡如果主機上不存在/data目錄,我們容器創建的時候會在主機上創建/data目錄。

-v [容器目錄]

docker run -itd --privileged --name container_name -v /data centos /usr/sbin/init
docker inspect container_name | grep Source | awk '{print $2}'
docker cp 1.txt container_name:/data/

這次我們掛載主機目錄到容器中時,沒有指定主機目錄,我們可以通過dokcer inspect來查看此時掛載的主機目錄,docker cp命令可以將主機的文件拷貝到容器中。

容器與容器之間的數據共享

掛載主機目錄到多個容器中

docker run -itd --privileged --name container_name1 -v /data:/data centos /usr/sbin/init
docker run -itd --privileged --name container_name2 -v /data:/data centos /usr/sbin/init
docker run -itd --privileged --name container_name3 -v /data:/data centos /usr/sbin/init

我們將主機目錄/data掛載到container_name1,container_name2,container_name3中,此時三個容器使用/data目錄是共享的。

使用數據卷容器

docker create --name data -v /data:/data centos
docker run -itd --privileged --name container_name1 --volumes-form data centos /usr/sbin/init
docker run -itd --privileged --name container_name2 --volumes-form data centos /usr/sbin/init
docker run -itd --privileged --name container_name3 --volumes-form data centos /usr/sbin/init

我們這裡不運行數據卷容器data,因為這樣可以保持數據卷容器數據安全性,黑客入侵不了沒有運行的容器!然後創建三個容器都通過--volumes-form來使用數據卷容器data,實現數據共享。

靜態數據實現數據共享方式

靜態數據一般不進行改變很穩定,對於這種數據有一些思路可以實現跨主機共享,我們把靜態數據製作成一個鏡像,傳到鏡像倉庫,其他主機上容器需要使用這靜態數據時,下載相應的靜態數據後提取數據使用。

動態數據實現數據共享方式

最好的方式是使用共享數據卷,我在另一篇文章中詳細介紹了共享數據卷,大家可以參考。

Docker Volume數據共享


分享到:


相關文章: