做外包任务网站,泉州网站建设,北京市中小企业公共服务平台,怎么做王者荣耀网站Docker数据管理
生产环境中#xff0c;对数据进行持久化#xff0c;或者需要在多个容器直接进行数据共享#xff0c;这必然涉及到容器的一些数据管理的操作。容器中数据管理主要有两种方式#xff1a; 数据卷#xff08;Data Volumes#xff09;#xff1a;容器内数据直…Docker数据管理
生产环境中对数据进行持久化或者需要在多个容器直接进行数据共享这必然涉及到容器的一些数据管理的操作。容器中数据管理主要有两种方式 数据卷Data Volumes容器内数据直接映射到本地的主机环境数据卷容器Data Volume Containers使用特定的容器维护数据卷
数据卷
数据集是一个可停过容器使用的特殊的文件目录他将主机操作系统目录直接映射进容器类似Linux中的mount操作。数据卷提供很多有用的特性如下 数据集可以在容器之间共享和重用容器间传递数据将变得高效方便对数据卷内数据的修改会立刻生效无论是容器内部的操作还是本地文件之间修改对书籍的更新不会影响镜像解耦了应用和数据数据卷会一直存在直到没有容器使用可以安全的卸载它 如下使用案例
在容器中创建一个数据卷
在Docker run命令中使用 -v参数标记可以在容器内创建一个数据卷。多次重复使用-v 标记可以创建多个数据卷。现在使用training/webapp 镜像创建一个web容器并创建一个数据卷挂载到容器的/webapp目录
docker run -p 80:80 --name web -d -v /webapp training/webapp python app.py如上命令在本地镜像仓库中没有对应镜像时候会先自动下载-p 指定将容器服务暴露的端口是自动映射到本地主叫的临时端口80-d 指定在后台运行–name 指定容器启动后的别名
挂载一个主机目录作为数据卷
使用-v标记也可以指定挂载一个本地以已经有的目录到容器中去作为数据卷如下命令推荐此种方式
docker run -d -p 81:81 --name web -v /src/webapp:/opt/webapp training/webapp python app.py以上命令中加载主机的/src/webapp目录到容器的/opt/webapp目录这个功能在进行测试的时候比较方便比如我们可以将一些程序或者数据预先放到本地的目录中然后在容器中运行和使用。另外本地目录的路径必须是绝对路径如果目录不存在Docker会自动创建。Docker挂载数据卷的默认权限是读写RW我们可以通过ro指定位只读
docker run -d -p 80:80 -name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py如上命令添加ro后容器内部对所挂载的数据卷内的数据就无法修改了。
挂载一个本地直接文件作为数据卷
-v 标记也可以从主机挂载单个文件到容器中作为数据卷不推荐方式。
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash如上就可以距离在容器输入过的命令历史问题如果直接挂载一个文件到容器使用文件编辑工具例如vi或者sed–in-place的时候可能造成文件inode的改变从Docker1.1.0开始这回导致报错。所以推荐的方式是直接挂载文件所在目录。
数据卷容器
现在我们需要在多个容器之间共享同一个持续更新的数据最简单的方式是使用数据卷容器。数据卷容器也是一个容器他的功能是用来提供数据卷供其他容器挂载。首先创建一个数据卷容器dbdata并在其中创建一个数据卷挂载到/dbdata:
docker run -it -v /dbdata --name dbdata ubuntu查看/dbdata目录 如上已经有dbdata目录我们可以在其他容器中使用–volumes-form来挂载dbdata容器中的数据卷例如创建db1db2两个容器并从dbdata容器挂载数据卷
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu此时容器db1和db2 都挂载同一个数据卷到相同的/dbdata目录。三个容器任何一方在该目录下的写入其他容器都可以看到。示例在dbdata容器中创建test文件 在db1 容器中查看其目录下的dbdata文件中内容 我们也可以多次使用–volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷。问题 使用–volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态如果删除了挂载的容器包括上面的dbdata db1 db2数据卷并不会被自动删除。如果要删除一个数据卷必须在删除最后一个还挂载着他的容器时显示的使用docker rm -v 命令指定同时删除关联的容器使用数据卷容器可以让用户在容器之间自由的升级和移动数据卷。
利用数据卷来迁移数据
可以利用数据卷容器对启动的数据卷进行备份恢复这样实现数据的迁移
备份
使用以下买那个了备份dbdata数据卷容器内的数据卷
docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar dbdata如上命令 利用ubuntu镜像创建一个容器worker。使用–volumes-from dbdata参数来容worker容器挂载dbdata容器的数据卷即dbdata数据卷使用 -v ${pwd}:/backup参数来挂载本地的当前目录到worker容器的/backup目录。worker容器启动后使用tar cvf /backuo.backuo.tar/dbdata命令来将/dbdata下内容备份为容器内的/backup/backup.tar即宿主机当前目录下的backup.tar执行后可以看到宿主机/backup目录下出现backup.tar
恢复
如果需要将数据恢复到一个容器可以按一下步骤创建一个带有数据卷的容器dbdata2
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash然后创建另外一个新的容器挂载dbdata2 的容器并使用untar解压备份文件到所挂载的容器卷中
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar总结
Docker在设计上就考虑过数据问题为数据管理提供了充分操作支持以上通过备份恢复共享机制即使容器在运行中出现故障用户也不必担心数据发生丢失只要快速重新创建容器即可。生产环境中推荐使用数据卷汇总数据卷容器以外我们还需要定期将主机的本地数据进行备份或者使用支持容错的存储系统包括RAID或者分布式文件系统HDFS等。
上一篇SpringCloud Docker 下一篇使用Dockerfile创建镜像