1 Docker 数据持久化简介

  • Docker 持久化存储的原因
  • Docker 持久化的两种方式(volume和volume container)
  • Docker 持久化存储的运维

2 Docker 持久化存储的原因

Docker 持久化主要由于docker容器的union filesystem的机制导致, union filesystem 将docker 容器数据按照一层一层只读层的方式堆叠而成,然后在最上层增加一层读写层。当容器运行需要写入数据时,将下层的只读层copy出来,然后写入到最上层的读写层,这就是著名的copy-on-write,简称cow。但是union fs只是临时存储,如果容器关闭之后,所有的数据都会消失,这时就应该有个概念专门用于满足存储需要保存起来的数据。

3 持久化的两种方式(volume和volume container)

Docker 持久化数据包含两个方式,一个是直接在运行的容器中直接创建volume,另一个是创建一个存储内外部映射关系的路径,然后其它容器使用-volumes-from进行引用,这种情况主要用于多个容器共享一组数据的情况。

3.1 volume

可以直接创建一个匿名volume,如下:

docker run -d -P -name test-container
-v /webapp training/webapp pthon app.py

此时将创建一个将容器/webapp路径映射到外部某个随机路径(由docker运行时指定)的data volume,当运行中的容器向/webapp路径下写入文件时,将会持久化到“母机”的路径下,这个“母机”的路径将可以使用docker inspect test-container查出来,形如

/var/lib/docker/volumes/78f5a620e6ac9e7
17fc2ba5cb26391318316c5b1bb4cba39fb6a60
118f8a4f5b/_data

第二种创建方式为创建一个指定路径的volume,将“母机”路径指定到具体的路径,创建语句如下。

docker run -d -P -name test-container -v
/src/webapp:/opt/webapp training/webapp
python app.py

3.2 volume container

第二种创建持久化数据的方式为创建一个专门用于存储数据的容器,该容器管理持久化存储。其它容器对该容器进行引用,实现对于持久化数据的共享。

创建一个/mnt为持久化路径的数据卷容器

docker create -v /mnt
data_volume_container ubuntu

创建一个容器,引用该数据卷容器

docker run -t -i --volumes-from
data_volume_container ubuntu /bin/bash

此时,第二个容器如果写入到/mnt,实际上写入的是第一个容器的/mnt下,也就是第一个容器/mnt映射的“母机”的路径下。

4 持久化存储的日常维护

4.1 备份

docker run -rm -volumes-from data-container
-v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data-store

该条语句主要是创建一个用后即废的容器(-rm选项表示容器exit即删),然后引用data-container的volume,然后创建一个data-volume,运行tar将/data-store打包后,放入到容器的/backup下。

4.2 恢复

1. docker run -v /data-store -name
data-container-2 ubuntu /bin/bash
2. docker run -rm -volumes-from
data-container-2 -v $(pwd):/backup
ubuntu bash -c "cd /data-store &&
tar -xvf /backup/backup.tar"

该语句的作用是创建一个具有匿名路径的容器,然后再创建一个用后即废的容器执行解压命令。

4.3 删除

删除容器时,同时删除volume

docker rm -v container-name

由于删除容器时如果不使用-v参数,往往容器会保留volume,此时如果这些volume没有任何引用的容器,就处于一个dangling的状态,下面的指令就用于删除这些卷。

1.docker volume ls -f dangling=true
2.docker volume rm <volume name>

docker $PWD路径_Docker 数据持久化相关推荐

  1. docker $PWD路径_Docker 技术系列之安装Redis单机版和集群版

    欢迎关注刘哥讲技术.上一节我们讲到通过docker安装了多台的mysql,很简单,那么我们这一节,利用 Docker 在一台机器上部署多个 Redis 实例. 那么redis是什么呢?Redis 是一 ...

  2. docker $PWD路径_Docker安装Jenkins+Shell脚本自动化部署项目

    本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料 Sentinel+Nacos 是 ...

  3. docker容器运行mysql持久化_docker容器实现数据持久化的两种方式及其区别

    前言 这篇博文是我对docker实现数据持久化几种方式的特征进行一个总结. 在docker中,它的存储文件系统是在dockerhost上原有的xfs或ext4架设了一层文件系统:overlay2(将此 ...

  4. docker 保存 环境持久化_Docker深入浅出系列 | 容器数据持久化

    Docker深入浅出系列 | 容器数据持久化 Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会 ...

  5. 关于数据持久化的一个简介

    今天给大家介绍一个OC中的数据持久化,今天介绍其中的三种,plist存储,偏好设置存储及归档存储!下面分别给大家上代码,并在代码中进行详细注释! 一 plist存储(只能存储OC中这些如字典,数组等常 ...

  6. Docker 的数据持久化项目实战

    文章目录 官网 概述 初探Mysql镜像容器的数据存储 镜像准备:拉取mysql镜像 docker pull mysql 启动Mysql镜像 登录Mysql镜像容器 登录mysql 容器数据存储路径查 ...

  7. @kubernetes(k8s)数据持久化Volume存储卷(emptyDir、hostPath、NFS、StorageClass)

    文章目录 kubernetes(k8s)数据持久化Volume 一.数据持久化 1.Vlolume概述 2.数据卷的分类 3.常用的四种数据卷 4.Pod使用Volume步骤: 5. volume基本 ...

  8. Linux——K8s存储(数据持久化)

    K8s存储 1.K8s存储主要分为? 临时存储.半持久化存储.持久化存储 2.emptyDir 一般来说emptydir的用途都是用来充当临时存储空间,例如一些不需要数据持久化的微服务,我们都可以用e ...

  9. 爬虫数据持久化存储——写入文件

    这里写目录标题 爬虫数据持久化存储--写入文件 open方法 文件的读取及写入 爬虫数据持久化存储--csv文件 爬虫数据处理:操作数据库模块--pymysql pymysql介绍: pymysql安 ...

最新文章

  1. Windows下Git库的创建
  2. php中$_REQUEST、$_POST、$_GET的区别
  3. java级联添加_JavaWeb学习记录(十三)——商城购物之添加订单的数据库级联操作...
  4. 黑马程序员_Java面向对象_包
  5. 角点检测——发现图像的特征
  6. php 查看方法来源,总结查看当前的方法分享
  7. 基于注解进行bean的装配
  8. 使用Office Word 2010/2013 发布文章到博客园
  9. mysql alter 唯一键_MySQL列属性 之 唯一键
  10. Spring Cloud Alibaba 深度解密!
  11. 一个渣渣的随页面滚动改变定位的代码
  12. Angular.js示例应用程序
  13. Stm32 基于蓝牙的串口通信 详细篇
  14. Mac 配置maven
  15. GDK动态代理原理分析
  16. java打印输出羞漫画
  17. 逍遥模拟器使用指南(二、电脑浏览器直接和模拟器互传方法)
  18. 盘点:视频监控行业的潜在商机
  19. base64模块的b64encode函数
  20. lol手游服务器维护到什么时候,lol10.1版本维护到几点 lol维护公告最新2020

热门文章

  1. java中的继承(一)
  2. vue 父组件使用keep-alive和infinite-scroll导致在子组件触发父组件的infinite-scroll方法...
  3. chrome 浏览器的插件权限有多大?
  4. 学习笔记--Python多进程
  5. python 字符编码、格式化
  6. JS---Math.Random()*10--[0,10)随机变颜色
  7. MariaDB数据库介绍之一、备份(mysqldump、lvm2快照、xtrabackup)
  8. win8.1远程桌面连接2008显示正在加密远程连接
  9. AIX LV删除后,ORACLE数据库文件全部恢复成功
  10. 有没有能够很快上手的报表框架