重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
首發:arppinging.com
Docker 入門之存儲卷一、Docker中的文件二、存在的問題和解決方案1)存在的問題2)解決方案三、什么是docker存儲卷?1)概述2)卷(volume)的特點3)卷的類型(volume types)四、使用docker存儲卷(volume)1)docker-managed volume2)bind mount volume3)復制使用其他容器的卷
首先我們需要回顧一下之前的內容:
1、docker鏡像由多個層疊加而成,啟動容器時,docker會加載只讀鏡像層,并在鏡像棧頂部添加一個讀寫層。
2、如果運行中的容器修改了現有的一個已經存在的文件,那該文件會從只讀層復制到讀寫層,該文件的只讀版本仍然存在,只是已經被讀寫層中該文件的副本所隱藏,此即“寫時復制(COW)”機制。
通俗來講:容器是分層的,最上面一層是可讀寫層,對所有數據的修改,都是保存在最上層的;在運行容器之后,所有的操作都不會影響到鏡像本身,如果是編輯操作,那么docker只會從只讀層將文件復制(非移動)到讀寫層給用戶進行編輯。
1、當用戶關閉和重啟容器時,容器中的數據不受影響,但刪除容器,則其數據會全部丟失。
2、數據存儲在聯合文件系統中,不易于宿主機訪問。
3、容器間數據共享不便
4、容器寫入和更改數據效率低,部分文件需要從底層復制,不適合IO較高的應用。
“卷”是容器一個或多個“目錄”,此次類目錄可繞過聯合文件系統,于宿主機上的目錄“綁定(關聯)”
將宿主機的目錄直接于容器中的目錄進行綁定,容器向目錄寫入數據時,可以直接寫入宿主機的目錄中。這樣容器內的數據保存時就能繞過容器內部文件系統的限制,與宿主機的文件系統建立關聯關系,實現數據共享,容器被停止或者刪除時,數據不會丟失。
1、volume于容器初始化之時即會創建,由base image提供的卷中的數據會在此期間完成復制。(例:將宿主機上/data/docker/b1 和 容器b1中的/etc/綁定,那么會將容器中/etc/的內容復制到宿主機/dta/docker/b1/目錄中)
2、volume的初衷是獨立于容器的生命周期實現數據持久化,因此刪除容器之時即不會刪除卷,也不會對哪怕未被引用的卷做垃圾回收操作。
3、volume為docker提供了獨立于容器的數據管理機制
(可以把”鏡像“想象為靜態文件,例如”程序“,把”卷“類比為動態內容,例如”數據“;于是,鏡像可以被重用,而卷可以被共享;卷實現了”程序(鏡像)“和”數據(卷)“的分離,用戶制作鏡像時無需再考慮鏡像運行的容器所在的環境)
docker 有兩種類型的卷,每種類型都在容器中存在一個掛載點,但其在宿主機上的位置有所不同
3.1 bind mount volume(綁定掛載卷)
a volume that points to a user-specified location on the host file system
3.2 docker-manged volume(docker 管理卷)
the docker daemon creates managed volumes in a portion of the host's file system that's system that's owned by docker
bind mount volume:指定綁定的路徑
docker-managed volume:宿主機的路徑由docker daemon定義
無論是哪種類型的卷,都使用docker run的-v參數。
1.1 創建容器b1,指定b1的/data/目錄使用存儲卷
[root@localhost ~]# docker run --name b1 -it -v /data busybox
/ # cd /data/
/data # ls
/data #
1.2 查看關聯的宿主機目錄
[root@localhost b1]# docker inspect -f {{.Mounts}} b1
[{volume 4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177 /var/lib/docker/volumes/4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177/_data /data local true }]
[root@localhost b1]#
1.3 在宿主機目錄中寫入文件
[root@localhost b1]# cd /var/lib/docker/volumes/4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177/_data/
[root@localhost _data]# echo 'welcome to arppinging.com' >> test.txt
[root@localhost _data]# cat test.txt
welcome to arppinging.com
[root@localhost _data]#
1.4 在容器b1中查看是否有test.txt文件
/data # cat /data/test.txt
welcome to arppinging.com
/data #
使用綁定掛載卷的時候,如果宿主機的目錄不存在,那么會自動創建該目錄。
1.1 創建容器b2,配置宿主機的/data/docker/b2/與容器b2的/data/關聯
[root@localhost ~]# docker run --name b2 -it -v /data/docker/b2:/data busybox
/ # ls /data/
/ #
1.2 查看b2的關聯目錄
[root@localhost _data]# docker inspect -f {{.Mounts}} b2
[{bind /data/docker/b2 /data true rprivate}]
[root@localhost _data]#
1.3 在b2的/data/中創建一個文件,
/ # cd /data/
/data # echo 'welcome to b2.arppinging.com' > b2.html
/data #
1.4 在宿主機的/data/docker/b2中是否能看到b2創建的文件?
[root@localhost /]# cd /data/docker/b2/
[root@localhost b2]# ls
b2.html
[root@localhost b2]# cat b2.html
welcome to b2.arppinging.com
[root@localhost b2]#
1.5 刪除容器b2,查看宿主機的目錄文件是否還存在
[root@localhost ~]# docker rm b2
b2
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec2ff6aeb48a busybox "sh" 10 minutes ago Exited (0) 4 minutes ago b1
[root@localhost ~]#
[root@localhost ~]# cd /data/docker/b2/
[root@localhost b2]# cat b2.html
welcome to b2.arppinging.com
[root@localhost b2]#
復制和使用其他容器的卷,使用的是--volumes-from選項
創建一個容器b3,使用b1的存儲卷
[root@localhost b2]# docker run --name b3 -it --volumes-from b1 busybox
/ # cat /data/test.txt
welcome to arppinging.com
/ #
查看映射卷
[root@localhost b2]# docker inspect -f {{.Mounts}} b1
[{volume 4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177 /var/lib/docker/volumes/4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177/_data /data local true }]
[root@localhost b2]# docker inspect -f {{.Mounts}} b3
[{volume 4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177 /var/lib/docker/volumes/4e1f3596768357e009da8df6d38c4339df04b64dee2d80e262609f83b87d4177/_data /data local true }]
[root@localhost b2]#
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。