Docker数据管理(五)
一、什么是数据卷
生成环境中使用docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这个就涉及到了容器数据管理
容器中管理数据主要有两种方式:
- 数据卷:容器内数据之间映射到本地主机环境
- 数据卷容器:使用特定的容器来维护数据卷
数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似Linux 的mount挂载
数据卷的特性
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便
- 对数据卷内数据的修改立马生效,无论是容器内还是本地操作
- 对数据卷的更新不会影响镜像,解耦了应用和数据
- 卷会一直存在,直到没有容器使用,可以安全的卸载它
二、创建数据卷
在用docker run 命令的时候,使用 -v 标记可以在容器内创建一个数据卷。多次重复使用 -v 标记可以创建多个数据卷
[root@rsync131 ~]# docker run -it -P -d --name web -v /opt/web/ centos
b0772ffc49ea226536a23ca5d73f1a69c4212407ad54ab406b1b098138e64a65
PS:-P参数是将容器服务暴露的端口,是自动映射到本地主机的临时端口
也可以挂载主机目录做我数据卷(经常使用的方式)
[root@rsync131 ~]# docker run -it -P -d --name web1 -v /opt/web:/opt/ centos
acb1b0f0c804ca2b9bbe8c1fe0373c6025c51342e138204e40e74ac9123c8854
上面的命令是将主机的/opt/web 目录挂载到容器的/opt/下,这样是很方便的在你进行数据修改的是,直接修改本地文件就行了,容器直接就会同步了
docker 挂载数据卷的默认权限是读写(rw) ,我们也可以改权限
[root@rsync131 ~]# docker run -it -P -d --name web2 -v /opt/web:/opt/:ro centos
8400a6999dbafe14dd6cb28796dc84595282361e619a8d183db405106e07d85d
加了:ro 容器内对所挂载的数据卷内的数据就不能修改了
也可以只挂载本地主机的单个文件到容器中作为数据卷(强烈不推荐,生产也很少用,可忽略)
[root@rsync131 ~]# docker run -it -P -d --name web4 -v /root/.bash_history:/.bash_history centos
b5a45865eca2ad16cde207c9a35702667f3bd9b947383a33451b67098548331e
三、数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器,数据卷容器也是个容器,但是它的目的是专门用来提供数据卷供其他容器挂载的
首先创建一个数据卷容器
[root@rsync131 /]# docker run -it -d -v /dbdata --name dbdata centos
ea8c0b5014166f57afc5d7cf52b1ca532e0e0a259f414d2891d0ebf9dc397624
[root@rsync131 /]# docker exec -it ea8c0b5014166f57afc5d7cf52b1ca532e0e0a259f414d2891d0ebf9dc397624 bash
[root@ea8c0b501416 /]# ls
anaconda-post.log bin dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
挂载
[root@rsync131 /]# docker run -it -d --volumes-from dbdata --name db1 centos
ad8b9458a39c85516f2dc88645af8f3725418d5f4bf058566b0cbc977352490c
[root@rsync131 /]# docker run -it -d --volumes-from dbdata --name db2 centos
b07899fb1a46aa5538fc82dceebc4e53d7abf74ab870e14f916a59a03d1fab45
此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata 目录,三个容器任何一方在该目录下进行操作,其他的容器都能看见
测试
# db1 容器
[root@rsync131 /]# docker exec -it db1 bash
[root@ad8b9458a39c /]# cd /
[root@ad8b9458a39c /]# ls
anaconda-post.log bin dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@ad8b9458a39c /]# cd dbdata/
[root@ad8b9458a39c dbdata]# ls
[root@ad8b9458a39c dbdata]# touch a.txt
[root@ad8b9458a39c dbdata]# ls
a.txt
[root@ad8b9458a39c dbdata]# exit
exit # db2 容器
[root@rsync131 /]# docker exec -it db2 bash
[root@b07899fb1a46 /]# cd /d
dbdata/ dev/
[root@b07899fb1a46 /]# cd /dbdata/
[root@b07899fb1a46 dbdata]# ls
a.txt
其实在有容器也可以对db1或者db2进行挂载
[root@rsync131 /]# docker run -it -d --volumes-from db1 --name db3 centos
95547b8422226a2f18dd71db4e8c551fd8df72771cf6001cfdfb963899b71477
[root@rsync131 /]# docker exec -it db3 bash
[root@95547b842222 /]# ls /dbdata/
a.txt
--volumes-from 参数所挂载数据卷的容器自身并不需要保持正在运行
如果删除了挂载的容器(包括dbdata、db1和db2),数据卷并不会被自动的删除,如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v命令来指定同时删除关联的容器
四、利用数据卷容器来迁移数据
4.1. 备份
使用下面的命令来备份dbdata数据卷容器内的数据卷
[root@rsync131 ~]# docker run --volumes-from dbdata -v $(pwd):/backup --name backup1 centos tar zcvf /backup/backup.tar.gz /dbdata
/dbdata/
/dbdata/a.txt
[root@rsync131 ~]# ll
总用量 273540
-rw-------. 1 root root 1513 8月 20 20:25 anaconda-ks.cfg
-rw-r--r-- 1 root root 142 9月 23 14:13 backup.tar.gz # 具体的意思是:利用centos镜像创建一个容器,使用--volumes-from dbdata参数来让容器挂载dbdata容器的数据卷,使用-v 参数来挂载本地当前目录到容器的/backup目录,容器启动后使用tar打包备份到本地目录
4.2. 恢复
为了恢复我们创建一个容器
[root@rsync131 ~]# docker run -it -d -v /dbdata --name db8 centos
042d3c9567154d047977e8097939215bef441d3206c81c6bca99b6d227501169
[root@rsync131 ~]# docker run --volumes-from db8 -v $(pwd):/backup centos tar zxvf /backup/backup.tar.gz
dbdata/
dbdata/a.txt
[root@rsync131 ~]# docker exec -it db8 bash
[root@042d3c956715 /]# ls
anaconda-post.log bin dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@042d3c956715 /]# cd dbdata/
[root@042d3c956715 dbdata]# ls
a.txt
Docker数据管理(五)的更多相关文章
- Docker数据管理(四)
Docker数据管理 Docker数据分为两种: 数据卷 -v /data -v src:dst 数据卷容器 --volumes-from 数据卷 案例1:我们创建一个容器,起名叫nginx-volu ...
- 用前端姿势玩docker【五】快速构建中类Unix系统与Windows系统的差异化处理
目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...
- 【Docker】第五篇 Docker 数据管理
一.基本介绍 数据管理的原因:Docker中的容器一旦删除,容器本身的rootfs文件系统就会被删除,容器中的所有数据就会被删除.为了对一些需要持久化的数据,不随容器删除而删除,所以我们可以通过多个容 ...
- Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs)
Docker提供了三种不同的方式用于将宿主的数据挂载到容器中:volumes,bind mounts,tmpfs volumes.当你不知道该选择哪种方式时,记住,volumes总是正确的选择. vo ...
- Docker数据管理
用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及到Docker的数据管理. 容器中管理数据主要有两种方式: ...
- Docker系统七:Docker数据管理
Docker的数据管理 I. 基本概念 Docker容器一旦删除,其相关的rootf文件系统就会被删除,其容器内的数据将一并删除,为了保存相关数据,Docker提出了数据卷的概念. II. 数据卷 D ...
- Docker数据管理(数据卷&数据卷容器)
生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷(Data Volumes):容 ...
- Docker实战(四)之Docker数据管理
在生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及到容器的数据管理操作. 容器中管理数据主要有两种形式: 数据卷:容器内数据直接映射到本地主 ...
- 深入浅出Docker(五):基于Fig搭建开发环境
概述 在搭建开发环境时,我们都希望搭建过程能够简单,并且一劳永逸,其他的同事可以复用已经搭建好的开发环境以节省开发时间.而在搭建开发环境时,我们经常会被复杂的配置以及重复的下载安装所困扰.在Docke ...
随机推荐
- 2018.11.02 洛谷P2661 信息传递(拓扑排序+搜索)
传送门 按照题意模拟就行了. 先拓扑排序去掉不在环上面的点. 剩下的都是简单环了. 于是都dfsdfsdfs一遍求出最短的环就行. 代码: #include<bits/stdc++.h> ...
- boost-数据类型之auto、any、tuple、variant
1.auto.decltype auto是C++11中的关键字,它可以通过类型推导自动得到变量或对象的类型,需要注意的是auto会忽略引用,因为引用其实就代表原对象: #include <v ...
- CString成员函数详解[转]
1.构造函数(常用) CString( const unsigned char* psz ); 例:char s[]="abcdef"; cha ...
- maven学习之一:maven安装
1.下载maven: 地址:https://maven.apache.org/ 点击download后; 解压: 解压后放在d:\develop目录下 下面我们去配置环境变量,找到计算机,右键,找到属 ...
- i2c_client的生成
网上很多文档都是介绍源码,包括i2c_client结构体的源码都有贴出,看上去似乎需要手动写该结构体,但实际上,i2c_client的生成是用如下方法. \arch\arm\mach-omap2/bo ...
- OpenCV人脸特效制作
https://blog.csdn.net/zxc024000/article/details/50456917 https://blog.csdn.net/huanghuangjin/article ...
- The Seven Percent Solution
Problem Description Uniform Resource Identifiers (or URIs) are strings like http://icpc.baylor.edu/i ...
- mysql_变量
set names gbk; 变量 变量分为两种:系统变量,自定义变量 系统变量:系统定义好的,大部分情况用户不需要使用系统变量,如autocommit,auto_increment_incremen ...
- PAT甲级 1130. Infix Expression (25)
1130. Infix Expression (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Give ...
- Excel函数vlookup
最近整理业务文档,需要用到excel,按照教程,操作了20来分钟,却得不到结果. 看了视频,才知道,vlookup仅限关联选中区域的第一列关联,把要关联的行拷贝到第一列,解决. https://www ...