Docker系列八: 数据卷
什么是数据卷
生成环境中使用docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这个就涉及到了容器数据管理
容器中管理数据主要有两种方式:
- 数据卷:容器内数据之间映射到本地主机环境
- 数据卷容器:使用特定的容器来维护数据卷
数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似Linux 的mount挂载
数据卷的特性
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效方便
- 对数据卷内数据的修改立马生效,无论是容器内还是本地操作
- 对数据卷的更新不会影响镜像,解耦了应用和数据
- 卷会一直存在,直到没有容器使用,可以安全的卸载它
创建数据卷
在用docker run 命令的时候,使用 -v 标记可以在容器内创建一个数据卷。多次重复使用 -v 标记可以创建多个数据卷
[root@rsync131 ~]# docker run -it -P -d --name web -v /opt/web/ centos
b0772ffc49ea226536a23ca5d73f1a69c4212407ad54ab406b1b098138e64a65
也可以挂载主机目录做我数据卷(经常使用的方式)
[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 目录,三个容器任何一方在该目录下进行操作,其他的容器都能看见
--volumes-from 参数所挂载数据卷的容器自身并不需要保持正在运行
如果删除了挂载的容器(包括dbdata、db1和db2),数据卷并不会被自动的删除,如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v命令来指定同时删除关联的容器
利用数据卷容器来迁移数据
备份
[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
总用量
-rw-------. root root 8月 : anaconda-ks.cfg
-rw-r--r-- root root 9月 : backup.tar.gz # 具体的意思是:利用centos镜像创建一个容器,使用--volumes-from dbdata参数来让容器挂载dbdata容器的数据卷,
# 使用-v 参数来挂载本地当前目录到容器的/backup目录,容器启动后使用tar打包备份到本地目录
恢复
[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学习5--docker数据卷(volume)
https://blog.csdn.net/dream_broken/article/details/52314993 1.什么是数据卷volume 为了了解什么是Docker Volume,首先我们 ...
- Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原。
Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原. 数据卷就是数据(一个文件或者文件夹). Docker的理念之一是将应用与其运行的环境打包,docker容器的生命周 ...
- Docker提交镜像-数据卷-可视化
在熟悉完Docker的安装及基本命令使用之后,我们开始学习下Docker的进阶操作:包括但不限于新建Docker镜像,数据卷的挂载,以及Docker的可视化等. Docker提交镜像 启动镜像 我们先 ...
- Docker系列(八)Kubernetes介绍
Kubernetes组件功能图 各组件说明: 节点 节点在Kubernetes由虚拟机或者实体机表示,常称为Minion,即从属主机.当一个节点加入到Kubernetes系统中时,它将会创建一个数 ...
- 使用docker inspect获取数据卷信息时返回地址为空
使用 docker inspect 命令查看容器挂载的volume的目录 $ sudo docker inspect --format "{{.Volumes}}" redis-m ...
- 【Docker】利用数据卷容器来备份、恢复、迁移数据卷
利用数据卷容器来备份.恢复.迁移数据卷 可以利用数据卷对其中的数据进行进行备份.恢复和迁移. 备份 首先使用 --volumes-from 标记来创建一个加载 dbdata 容器卷的容器,并从主机挂载 ...
- docker仓库及数据卷
docker help rmi, 删除本地镜像 docker run -it --name=centos centos:latest /bin/sh --name的选项可以方便我们以后引用此imag ...
- Docker 容器的数据卷
数据卷的特点: 1. 数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中 2. 数据卷可以在容器之间共享和重用 3. 可以对数据卷里的内容直接进行修改 ...
- window7下docker toolbox 启用数据卷报错: Error response from daemon: invalid mode:
场景:希望把d:\dockerShare文件夹作为数据卷 ,和docker中的centos镜像生成的容器关联. 原来的命令: docker run -d -it --name=edc-centos7 ...
随机推荐
- 题目(或游戏)流程控制器上传到GitHub
题目控制系统 1 支持 题目按相同的个数分组 2 支持 pause resume 3 支持 每题限定时间 4 支持 支持对计时器进行回调 5 支持 在全流程开始,全流程结束,每组开始,每组结束,每题开 ...
- xv6 makefile
1. xv6.img的构建 在makefile中 bootblock: bootasm.S bootmain.c $(CC) $(CFLAGS) -fno-pic -O -nostdinc -I. - ...
- python进阶(三)~~~装饰器和闭包
一.闭包 满足条件: 1. 函数内嵌套一个函数: 2.外层函数的返回值是内层函数的函数名: 3.内层嵌套函数对外部作用域有一个非全局变量的引用: def func(): print("=== ...
- java课程之团队开发冲刺阶段1.9
一.总结昨天进度 1.学习了简单的消息推送方法,并且能够使用进行每日定时推送 二.遇到的困难 1.在每日推送的过程中,程序必须被正常关闭,如果程序是被切到后天然后直接结束进程的话,每日推送的线程服务也 ...
- Linux高性能服务器编程:高性能服务器程序框架
服务器有三个主要模块: (1)I/O处理单元 (2)逻辑单元 (3)存储单元 1.服务器模型 C/S模型 逻辑:服务器启动后,首先创建一个或多个监听socket,并调用bind函数将其绑定到服务器感兴 ...
- Cobub无码埋点关键技术的实现
随着大数据时代的到来,数据采集也已经变的越来越重要.前端埋点作为一个比较成熟的数据接入手段被广泛应用着.目前埋点分为两种方式,有码与无码埋点.有码埋点比较容易理解,即调用SDK的API,在代码中插入埋 ...
- ssh首次链接出现yes/no提示和ansible提示
修改文件: /etc/ssh/ssh_config 在文件中添加如下信息:StrictHostKeyChecking no 改本机的/etc/ssh/ssh_config文件中的"# Str ...
- 京东云数据库RDS SQL Server高可用概述
数据库的高可用是指在硬件.软件故障发生时,可以将业务从发生故障的数据库节点迁移至备用节点.本文主要讲述SQL Server高可用方案,以及京东云RDS数据库的高可用实现. 一.高可用解决方案总览 1. ...
- Centos8无法安装screen的解决方法:使用epel安装screen
选择了一个基础款的vps安装的镜像选了熟悉的centos的最新版centos8,但是在安装screen的时候,却安装不了,提示: No match for argument: screen 本来以为是 ...
- ssh登录脚本
#!/usr/bin/expect set timeout 100 set passwd "your password" spawn shell expect "key& ...