Docker基础教程——数据管理
来源:互联网 发布:凤凰直播软件下载 编辑:程序博客网 时间:2024/05/19 03:43
原文出自:http://blog.csdn.net/anxpp/article/details/52491131
我们在使用docker 的时候,会产生很多数据,比如web服务器啊,数据库之类的,有时我们还需要备份或复制这些数据,这就需要涉及到Docker的数据管理了。
docker容器中管理数据主要分两种:
- 数据卷
- 数据卷容器
1、数据卷
数据卷是一个可供容器使用的特殊目录,它会绕过文件系统,可以提供很多有用的特性:
- 数据卷可以在容器之间共享个重用
- 对数据卷的修改会立即生效
- 对数据卷的更新不会影响镜像
- 卷会一直存在直到没有容器使用
数据卷的使用类似于Linux下对目录或文件进行mount操作。
在容器内创建数据卷
在用docker run命令的时候,使用-v标记可以在容器中创建一个数据卷,多次使用该参数可以创建多个数据卷。
比如要使用training/webapp镜像创建一个web容器,并创建一个数据卷挂载到容器的/webapp目录:
docker run -d -P --name web -v /webapp training/webapp Python app.py
挂载一个主机目录作为数据卷
也可以直接指定挂载一个本地已有目录到容器中作为数据卷,同样使用-v参数,依然是刚才的例子:<span style="font-family: Arial, Helvetica, sans-serif;">docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp Python app.py</span>
此时加载主机的/src/webapp目录到容器的/opt/webapp目录下。
这个功能可以为我们提供很多便捷,比如我们可以放置一些程序或者数据到本地目录中,然后再容器中运行和使用。
这个本地目录的路径必须是绝对路径,如果目录不存在,会被自动创建。
Docker挂载数据卷的默认权限是读写(rw),我们也可以指定为只读(ro):
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp Python app.py加了只读后,容器内挂载的数据卷数据是无法修改的。
挂载一个本地主机文件作为数据卷
-v标记也可以从主机挂载单个文件到容器中作为数据卷。比如需要记录在容器中输入过的历史命令:
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
2、使用数据卷容器
Docker镜像是如此的方便,针对以上的数据管理,也提供了一个普通的容器:数据卷容器。他可以使容器间共享一些持续性的数据变得更加简单。
使用步骤:
- 创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata(使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态):
docker run -it -v /dbdata --name dbdata ubuntu
- 然后再其他容器中使用--volumes-from来挂载dbdata容器中的数据卷,比如有两个容器dbq和db2:
docker run -it --volumes-from dbdata --name db1 ubuntudocker run -it --volumes-from dbdata --name db2 ubuntu此时db1和db2都挂载同一个数据卷到相同的/dbdata目录下。三个容器任意一个在该目录的数据修改,其他容器都能看到。
可以多次使用--volumes-from参数来从多个容器挂载多个数据卷。也可以从其他已经挂载了容器卷的容器来挂载数据卷:
docker run -d --name db3 --volumes-from db1 training/postgres如果删除了挂载的容器(包括dbdata、db1、db2),数据卷并不会被自动删除。
如果需要删除一个数据卷,必须在删除最后一个还挂载它的容器时,显示使用docker rm -v 来指定同时删除关联的容器。
利用数据卷容器迁移数据
可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。备份
备份dbdata数据卷容器中数据卷命令如下:
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata解释:
- 首先利用ubuntu镜像创建一个容器worker
- 使用--volumes-from dbdata参数让worker容器挂载dbdata容器的数据卷
- 使用-v $(pwd):/backup参数挂载本地的当前目录到worker容器的/back目录下。
- worker容器启动后,使用tar cvf /backup/backup.tar /dbdata命令将/dbdata下内容备份为容器内的backup/backup.tar,即宿主主机当前目录下的backip.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基础教程——数据管理
- Docker基础教程——容器
- Docker基础教程——仓库
- Docker基础教程——Dockerfile
- Docker 数据管理
- docker 数据管理
- Docker数据管理
- Docker数据管理
- Docker数据管理
- Docker 数据管理
- Docker 数据管理
- docker-数据管理
- docker数据管理
- docker数据管理
- Docker 数据管理
- Docker基础教程——镜像
- Docker基础教程——网络基础配置
- Docker基础教程——介绍及核心概念
- 中兴2017面试总结
- PAT甲 1007. Maximum Subsequence Sum (25)
- 我的小一步,争取是人类的一大步
- jQuery基础
- sql 多表连接与子查询
- Docker基础教程——数据管理
- QT下udpsocket一段时间接收不到数据的问题
- 5年时间,研究177位百万富翁,发现这13条规律
- VS2010:出现devenv.sln解决方案保存对话框
- 为什么越没本事的人,?自尊心越强(深度好文) (1)
- PAT甲 1008. Elevator (20)
- MVC
- Java 反射 getClass()
- loadrunner的同步点/集合点