Docker 管理數據的方式有兩種:
數據卷
數據卷容器html
一、數據卷web
數據卷是一個或多個容器專門指定繞過 Union File System 的目錄,爲持續性或共享數據提供一些有用的功能:
數據卷能夠在容器間共享和重用
數據卷數據改變是直接修改的
數據卷數據改變不會被包括在容器中
數據卷是持續性的,直到沒有容器使用它們docker
數據卷的生存週期獨立於容器,容器消亡,數據卷不會消亡。所以,使用數據卷後,容器能夠隨意刪除、從新運行,數據卻不會丟失。
添加一個數據卷
你可使用 -v 選項添加一個數據卷,或者可使用屢次 -v 選項爲一個 docker 容器運行掛載多個數據卷。
-v 選項除了能夠建立卷,也能夠掛載當前主機的一個目錄到容器中。centos
docker run -d --name test -v /app/docker/webapps:/app/tomcat/webapps -p 8090:8080 tomcat:test #一個 docker run -d --name tomcat-8090 -v /app/docker/webapps:/app/tomcat/webapps -v /app/docker/logs:/app/tomcat/logs -p 8090:8080 tomcat:test #多個
若是掛載的目錄不存在,就會建立。
默認掛載卷是可讀寫的,能夠在掛載時指定只讀:tomcat
docker run -d --name test -v /app/docker/webapps:/app/tomcat/webapps:ro -p 8090:8080 tomcat:test
建立的數據卷能夠經過 docker inspect 獲取宿主機對應路徑bash
docker inspect tomcat-8090 |sed -n '/"Volumes": {/{:a;n;/}/!p;/}/!ba}'
或者app
docker inspect --format="{{.Volumes}}" tomcat-8090
二、數據卷容器
數據卷容器,其實就是一個正常的容器,專門用來提供數據卷供其它容器掛載的。
若是你有一些持久性的數據而且想在容器間共享,或者想用在非持久性的容器上,最好的方法是建立一個數據卷容器,而後今後容器上掛載數據。
啓動一個容器:webapp
docker run -d --name tomcat-8090 -v /app/docker/webapps:/app/tomcat/webapps -v /app/docker/logs:/app/tomcat/logs -p 8090:8080 tomcat:test [root@localhost docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a6906e205ae8 tomcat:test "/bin/sh -c '/etc/in 26 minutes ago Up 26 minutes 0.0.0.0:8090->8080/tcp tomcat-8090
在其餘容器中使用 --volumes-from 來掛載 tomcat-8090 容器中的數據卷。tcp
docker run -d --name tomcat-8080 --volumes-from tomcat-8090 -p 8080:8080 tomcat:test
注意:使用 --volumes-from 參數所掛載數據卷的容器本身並不須要保持在運行狀態。orm
驗證:
容器tomcat-8090:
容器tomcat-8080:
若是刪除了掛載的容器(包括 tomcat-8090、tomcat-8080),數據卷並不會被自動刪除。若是要刪除一個數據卷,必須在刪除最後一個還掛載着它的容器時使用 docker rm -v 命令來指定同時刪除關聯的容器。
三、備份、恢復或遷移數據卷
備份:
docker run --rm --volumes-from tomcat-8090 -v /opt/backup:/backup centos tar cvf /backup/tomcat-webapps.tar /app/tomcat/webapps
啓動一個新的容器而且從 tomcat-8090 容器中掛載卷,而後掛載/opt/backup 目錄到容器中爲 /backup,並備份tomcat-8090 卷中的webapps目錄的數據爲 tomcat-webapps.tar ,備份目錄在/opt/backup目錄下,--rm 選項表示執行完成以後刪除容器 。
echo 'ok' > /app/docker/webapps/ROOT/test/test.html
恢復:
docker run --rm --volumes-from tomcat-8080 -v /opt/backup:/backup centos tar xvf /backup/tomcat-webapps.tar
刪除 VolumesVolume 只有在下列狀況下才能被刪除:docker rm -v 刪除容器時添加了 -v 選項docker run --rm 運行容器時添加了 --rm 選項