生产过程中使用docker往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,因此就需要数据卷来做数据持久化
*数据卷:容器内数据直接映射到本地主机环境
数据卷的特性:
1)可以在容器之间共享和重用,容器间传递数据变得高效方便
2)对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作
3)对数据卷的更新不会影响镜像,解耦了应用和数据
4)卷会一直存在,直到没有容器使用,可以安全地卸载它
创建数据卷
docker run -it --name web -v ~/webapp:/webapp ubuntu:latest /bin/bash
本地目录必须是绝对路径,如果目录不存在docker会自动创建
修改数据卷的权限,默认是rw(读写),ro(只读)
docker run -it --name web -v ~/webapp:/webapp:ro ubuntu:latest /bin/bash
*数据卷容器
创建数据卷容器:
docker run -it --volumes-from web --name web2 ubuntu
可以多次使用--volumes-from参数来从多个容器挂载多个数据卷。
还可以从其他已经挂载了容器卷的容器来挂载数据卷
如果删除了挂载数据卷的容器,数据卷并不会自动删除。
如果要删除一个数据卷,必须在最后一个还挂载着它的容器显式
使用docker rm -v命令指定同时删除关联的容器
*docker数据卷备份 mkdir backup &&cd backup #在物理机上创建backup目录 docker run --volumes-from webapp -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /webapp #这个命令的原理是:新创建一个容器worker,连接了数据卷容器webapp,并将物理机backup目录映射到worker的/backup, 然后tar命令就将数据卷webapp的/webapp目录打包到/backup-->物理机backup目录
*docker数据卷还原到其他容器 先建立一个新容器 docker run -it -v /webapp --name db1 ubuntu /bin/bash 相同的原理,新建一个容器worker1,连接了数据卷容器db1,映射了物理机backup目录到worker1的/backup目录,tar命令将 备份包还原到db1的/webapp下,完成还原 docker run --volumes-from db1 --name worker1 -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar
如果还原到原容器 docker run --volumes-from webapp -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar