docker 实践四:数据管理
这篇是关于 docker 的数据管理。
注:环境为 CentOS7,docker 19.03。
一般容器中管理数据主要有两种方式:
- 数据卷(Data Volumes):容器内数据直接映射到本地主机环境。
- 数据卷容器(Data Volume Containers):使用特定容器维护数据卷。
主要来介绍如何创建数据卷,并且把本地的目录挂载到容器内,使用数据卷容器在容器和主机之间共享数据,并实现数据的备份和恢复。
数据卷
首先我们先来介绍下什么是数据卷:数据卷(Data Volume)是一个可供容器使用的特殊目录,是将主机操作系统目录直接映射进容器,类似于Linux的mount命令。
数据卷可以提供很多很用的特性:
- 数据卷可以在容器之间共享和重⽤, 容器间传递数据将变得⾼效与⽅便;
- 对数据卷内数据的修改会⽴马⽣效, ⽆论是容器内操作还是本地操作;
- 对数据卷的更新不会影响镜像, 解耦开应⽤和数据;
- 卷会⼀直存在, 直到没有容器使⽤, 可以安全地卸载它。
创建数据卷
创建数据卷使用命令 docker volume create:
# docker volume create -d local test
test
# docker volume list
DRIVER VOLUME NAME
local 9145a9036e96655189d81bd59c16181b1287de6c324cae08d4b5df32778926ff
local ac107675a30b3be115772d545130ddf1ba5fd27bfcb62f93a2a533ad4403b616
local d2760077757c8b9ef48f37a94032ed0f68a847e1fe0a6c84c16bcaba146fe25f
local test
默认 volumes 的存放目录为 /var/lib/docker/volumes。
docker volume 支持以下的子命令:
- create :创建数据卷
- inspect :查看数据卷的详细信息,输出格式为 JSON
- ls :列出所有数据卷
- prune :删除无用的数据卷
- rm :删除指定数据卷
绑定数据卷
除了使用 volume 子命令来创建管理数据卷外,还可以正在创建容器是指定本地的任意目录挂载到容器作为数据卷,这也称为绑定数据卷。
在使用 docker [container] run 命令的时候,可以使用选项 --mount 来使用数据卷,它支持三种形式的数据卷:
- volume: 普通数据卷, 映射到主机/var/lib/docker/volumes路径下,格式
type=bind,source=/path/on/host,destination=/path/in/container - bind: 绑定数据卷, 映射到主机指定路径下,格式
type=volume,source=my-volume,destination=/path/in/container,volume-label="color=red",volume-label="shape=round" - tmpfs: 临时数据卷, 只存在于内存中,格式
type=tmpfs,tmpfs-size=512M,destination=/path/in/container
它们通用的选项有:
- src, source:源路径
- dst, destination, target:目标路径
- ro, readonly:true or false (default),是否只读
# mkdir /webapp
# docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp ubuntu
242a073a4f65aa3814c68147b7e3c5706834ac5a13b19d98d0b5c6ff5afa9c70
该命令等同于 -v 格式的命令,所以上述的命令等价于:
# docker run -d -P --name web -v /webapp:/opt/webapp ubuntu
如果要只读挂载就成这样:
# docker run -d -P --name web -v /webapp:/opt/webapp:ro ubuntu
注:本地⽬录的路径必须是绝对路径, 容器内路径可以为相对路径。 如果⽬录不存在, Docker会⾃动创建。
数据卷容器
数据卷容器本身也是一个容器,它能为不同的容器提供数据卷,关键命令在于 docker run 的 --volumes-from 选项。
首先创建一个数据卷容器 dbdata,并创建一个数据卷挂载到 /dbdata:
# docker run -itd -v /dbdata --name dbdata ubuntu
然后其他容器使用 --volumes-from 来挂载 dbdata 容器中的数据卷:
# docker run -itd --volumes-from dbdata --name db1 ubuntu
# docker run -itd --volumes-from dbdata --name db2 ubuntu
此时,容器 db1 和 容器 db2 都挂载同一个数据卷
选项 --volumes-from 也支持从多个容器挂载多个数据卷:
# docker run -itd --name db3 --volumes-from db1 --volumes-from 8b41042720 ubuntu
使⽤--volumes-from参数所挂载数据卷的容器⾃⾝并不需要保持在运⾏状态。如果删除了挂载的容器(包括dbdata、 db1和db2) , 数据卷并不会被⾃动删除。 如果要删除⼀个数据卷, 必须在删除最后⼀个还挂载着它的容器时显式使⽤docker rm-v命令来指定同时删除关联的容器。
利用数据卷容器来迁移数据
可以利用数据卷对其中的数据卷进行备份和恢复,从而实现数据迁移。
备份
使用以下的命令来备份dbdata数据卷容器内的数据卷:
# docker run --volumes-from dbdata -v $(pwd):/backup --name worker --rm ubuntu tar -cvf /backup/backup.tar.gz /dbdata
相对复杂点,具体的步骤就是先创建一个 worker 容器,将本地目录挂载进去,使用 --volumes-from 挂载 dbdata 容器的数据卷。容器启动后使用 命令 tar -cvf /backup/backup.tar /dbdata 备份数据到挂载的目录下。选项 --rm 能保证容器执行完命令后自动删除。
恢复
如果要恢复到容器,下面的命令:
# docker run -it --volumes-from dbdata -v $(pwd):/backup --name recover --rm ubuntu tar -xvf /backup/backup.tar -C /dbdata
docker 实践四:数据管理的更多相关文章
- docker 实践四:仓库管理
本篇我们来了解 docker 仓库的内容. 注:环境为 CentOS7,docker 19.03 仓库(Responsitory)是集中存放镜像的地方,又分公共仓库和私有仓库. 注:有时候容易把仓库与 ...
- Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享
架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 第一期主题:容器实践.Docker 作为当前最具颠覆性的开源技术之一,其轻量虚拟化.可移植性是CI/CD,DevOps,微服务的重要 ...
- Docker容器的数据管理
Docker容器的数据管理 Docker容器的数据管理 什么是数据卷(Data Volume)? 数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或者多个容器提供访问 数据卷设计的目 ...
- WebSocket原理与实践(四)--生成数据帧
WebSocket原理与实践(四)--生成数据帧 从服务器发往客户端的数据也是同样的数据帧,但是从服务器发送到客户端的数据帧不需要掩码的.我们自己需要去生成数据帧,解析数据帧的时候我们需要分片. 消息 ...
- 【实践报告】Linux实践四
Linux内核分析 实践四——ELF文件格式分析 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文 ...
- Linux及安全实践四——ELF文件格式分析
Linux及安全实践四——ELF文件格式分析 一.ELF文件格式概述 1. ELF:是一种对象文件的格式,用于定义不同类型的对象文件中都放了什么东西.以及都以什么样的格式去放这些东西. 二.分析一个E ...
- nodejs 实践:express 最佳实践(四) express-session 解析
nodejs 实践:express 最佳实践(四) express-session 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs ...
- AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署
一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...
- docker实践之docker-compose部署mysql
文章目录 docker实践之docker-compose部署mysql 1.安装部署docker 2.编写docker-compose文件 3.编写配置文件和初始化文件 4.启动数据库 5.检查初始化 ...
随机推荐
- 小福bbs-冲刺日志(第五天)
[小福bbs-冲刺日志(第五天)] 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 UI改进,前端页面改进,后端部分功能测试交予UI 作业的正 ...
- [转]MATLAB 2018b 中文版下载与安装教程
MATLAB R2018b_win64.iso 压缩包一个 MATLAB R2018b Win64 Crack 压缩包一个 一.下载与安装 1 下载中文原程序安装包和破解文件,链接: https: ...
- 【django学习】request.POST与request.POST.get两者主要区别
本文链接:https://blog.csdn.net/xun527/article/details/87777576request.POST是用来接收前端传过来的数据 一.request.POST.g ...
- colock
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- ISO/IEC 9899:2011 条款6.5.3——单目操作符
6.5.3 单目操作符 语法 1.unary-expression: postfix-expression ++ unary-expression -- unary-expression unar ...
- SeetaFaceDetection识别人脸
SeetaFaceDetection识别人脸 #pragma warning(disable: 4819) #include <seeta/FaceEngine.h> #include & ...
- springboot启动提示连接mysql报错:java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required
如题,启动springboot报错: -- :: --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized wi ...
- Spring cloud微服务安全实战-6-3JWT改造之网关和服务改造
网关上认证去做哪些改造 在网关上用jwt去解析用户信息,而不再发送校验令牌的请求了. 之前的时候网关上实际上写了很多的代码 包括认证,发check_token去把token请求,换成用户信息. 这俩是 ...
- 提供对字符串的全角->半角,半角->全角转换
package com.opslab.util.algorithmImpl; import com.opslab.util.StringUtil; /** * 提供对字符串的全角->半角,半角- ...
- oracle归档空间
select GROUP_NUMBER, NAME, STATE, TOTAL_MB-FREE_MB as USED_MB, FREE_MB, USABLE_FILE_MB from v$asm_di ...