生成環境中使用docker的過程當中,每每須要對數據進行持久化,或者須要多個容器之間進行數據共享,這個就涉及到了容器數據管理web
容器中管理數據主要有兩種方式:docker
數據卷是一個可供容器使用的特殊目錄,它將主機操做系統目錄直接映射進容器,相似Linux 的mount掛載centos
數據卷的特性安全
在用docker run 命令的時候,使用 -v 標記能夠在容器內建立一個數據卷。屢次重複使用 -v 標記能夠建立多個數據卷bash
[root@rsync131 ~]# docker run -it -P -d --name web -v /opt/web/ centos b0772ffc49ea226536a23ca5d73f1a69c4212407ad54ab406b1b098138e64a65
也能夠掛載主機目錄作我數據卷(常常使用的方式)post
[root@rsync131 ~]# docker run -it -P -d --name web1 -v /opt/web:/opt/ centos
acb1b0f0c804ca2b9bbe8c1fe0373c6025c51342e138204e40e74ac9123c8854
上面的命令是將主機的/opt/web 目錄掛載到容器的/opt/下,這樣是很方便的在你進行數據修改的是,直接修改本地文件就好了,容器直接就會同步了spa
docker 掛載數據卷的默認權限是讀寫(rw) ,咱們也能夠改權限操作系統
[root@rsync131 ~]# docker run -it -P -d --name web2 -v /opt/web:/opt/:ro centos
8400a6999dbafe14dd6cb28796dc84595282361e619a8d183db405106e07d85d
加了:ro 容器內對所掛載的數據卷內的數據就不能修改了3d
也能夠只掛載本地主機的單個文件到容器中做爲數據卷(強烈不推薦,生產也不多用,可忽略)code
[root@rsync131 ~]# docker run -it -P -d --name web4 -v /root/.bash_history:/.bash_history centos
b5a45865eca2ad16cde207c9a35702667f3bd9b947383a33451b67098548331e
若是用戶須要在多個容器之間共享一些持續更新的數據,最簡單的方式是使用數據卷容器,數據卷容器也是個容器,可是它的目的是專門用來提供數據卷供其餘容器掛載的
首先建立一個數據卷容器
[root@rsync131 /]# docker run -it -d -v /dbdata --name dbdata centos ea8c0b5014166f57afc5d7cf52b1ca532e0e0a259f414d2891d0ebf9dc397624 [root@rsync131 /]# docker exec -it ea8c0b5014166f57afc5d7cf52b1ca532e0e0a259f414d2891d0ebf9dc397624 bash [root@ea8c0b501416 /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
掛載
[root@rsync131 /]# docker run -it -d --volumes-from dbdata --name db1 centos ad8b9458a39c85516f2dc88645af8f3725418d5f4bf058566b0cbc977352490c [root@rsync131 /]# docker run -it -d --volumes-from dbdata --name db2 centos b07899fb1a46aa5538fc82dceebc4e53d7abf74ab870e14f916a59a03d1fab45
此時,容器db1和db2都掛載同一個數據捲到相同的/dbdata 目錄,三個容器任何一方在該目錄下進行操做,其餘的容器都能看見
--volumes-from 參數所掛載數據卷的容器自身並不須要保持正在運行
若是刪除了掛載的容器(包括dbdata、db1和db2),數據卷並不會被自動的刪除,若是要刪除一個數據卷,必須在刪除最後一個還掛載着它的容器時使用docker rm -v命令來指定同時刪除關聯的容器
[root@rsync131 ~]# docker run --volumes-from dbdata -v $(pwd):/backup --name backup1 centos tar zcvf /backup/backup.tar.gz /dbdata /dbdata/ /dbdata/a.txt [root@rsync131 ~]# ll 總用量 273540 -rw-------. 1 root root 1513 8月 20 20:25 anaconda-ks.cfg -rw-r--r-- 1 root root 142 9月 23 14:13 backup.tar.gz # 具體的意思是:利用centos鏡像建立一個容器,使用--volumes-from dbdata參數來讓容器掛載dbdata容器的數據卷,
# 使用-v 參數來掛載本地當前目錄到容器的/backup目錄,容器啓動後使用tar打包備份到本地目錄
[root@rsync131 ~]# docker run -it -d -v /dbdata --name db8 centos 042d3c9567154d047977e8097939215bef441d3206c81c6bca99b6d227501169 [root@rsync131 ~]# docker run --volumes-from db8 -v $(pwd):/backup centos tar zxvf /backup/backup.tar.gz dbdata/ dbdata/a.txt [root@rsync131 ~]# docker exec -it db8 bash [root@042d3c956715 /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@042d3c956715 /]# cd dbdata/ [root@042d3c956715 dbdata]# ls a.txt