使用 docker 部署程序,一旦 docker 容器关闭或重启,程序产生的数据也会销毁。因此在使用 docker 时,就需要对 docker 的数据进行持久化。方法主要有如下两种:
数据卷,是一个可供容器使用的特殊目录,他将主机目录直接挂载仅容器中,将容器中的数据存储到本地。
创建数据卷:docker volume create
例如:docker volume create mydata,此命令将在/var/lib/docker/volumes 目录中创建一个卷
查看数据卷信息:docker volume inspect
例如:docker volume inspect mydata 命令,查看数据卷详细信息,参见上图;
列出所有数据卷:docker volume ls
清理无用数据卷:docker volume prune
删除数据卷:docker volume rm
例如:docker volume rm mydata
绑定数据卷
除了使用 docker volume 命令创建和管理数据卷,还可以在使用 docker run 命令创建启动容器时,将本地主机的任意目录挂载到容器内作为数据卷。
方法一:mount(推荐)
例如:docker run -d --mount type=bind,src=$(pwd)/myjks,target=/var/jenkins_home jenkins/jenkins:2.366 ,src 指定本地主机目录,target 指定容器内目录,$(pwd) 指本地的当前目录。
方法二:-v(旧版)
docker run -d -v $(pwd)/myjksv:/var/jenkins_home jenkins/jenkins:2.366 ,-v 参数后面,冒号前是本地主机目录,冒号后是指定容器内目录。
如果需要在容器之间共享数据,那么最简单的方式就是数据卷容器,数据卷容器专门提供数据卷给其他容器挂载。
使用--volumes-from 命令,其他容器挂载数据卷
docker run -it --volumes-from dbdata --name db1 centos
docker run -it --volumes-from dbdata --name db2 centos
创建 db1、db2 两个容器,并将两个容器分别挂载 dbdata 容器中的数据卷
验证数据共享
在 db1 容器内的 dbdata 目录下,创建一个新的目录/文件,在 db2 和 dbdata 容器内的 dbdata 目录,查看是否有 db1 容器创建的目录/文件。
docker run --volumes-from dbdata -v $(pwd)/backup:/backup --name copydata centos tar cvf /backup/copydata.tar /dbdata
上面的命令创建了 copydata 的容器,并挂挂载 dbdata 的数据卷,这样就可以访问 dbdata 的数据;-v 参数,将本地主机的 backup 挂载到 copydata 容器的/backup 目录;接着,使用 tar 命令将/dbdata 目录打包;经过以上操作,本地主机就有了该备份数据。
docker run -v /dbdata --name newdbdata centos
docker run --volumes-from newdbdata -v $(pwd)/backup:/backup --name recovery centos tar xvf /backup/copydata.tar
创建 recovery 容器,并挂载 newdbdata 容器的数据卷 dbdata;-v 参数,将本地主机的备份目录挂载到 recovery 容器 back 目录;接着,使用 tar 命令,解压缩备份包,恢复数据。