数据卷技术

  • 数据卷手动挂载

  • 数据卷容器

part1:数据卷挂载方式

数据卷手动挂载

  1. -v 主机目录:容器目录 #核心参数
  2. #示例
  3. docker run -it --name=centos_test -v /home/wangxun/centos_test:/home centos /bin/bash
  4. docker inspect 容器id #查看容器的挂载卷是否挂载成功

数据卷手动挂载练习:安装mysql

手动挂载数据卷:实现数据的持久化保存

  1. docker pull mysql:5.7
  2. docker run -d -p 3310:3306 -v /home/wangxun/mysql_5_7/conf:/etc/mysql/conf.d -v /home/wangxun/mysql_5_7/data:/var/lib/mysql
  3. -e MYSQL_ROOT_PASSWORD=123456 --name=mysql_5_7_test mysql:5.7 #挂载出配置文件,数据文件,并设置mysql的密码

数据卷挂载技术的核心思想

  1. 1. 哪怕容器退出了或者容器停止运行了,数据的双向同步仍然存在
  2. 2. 哪怕容器被删除了,已经同步到主机的数据仍然存在
  3. 3. 只要在本地修改,不必直接进入容器,本质上也实现了数据的备份

docker数据卷手动挂载的3种方式

  1. 匿名挂载
  1. #匿名挂载
  2. -v 容器内路径
  3. docker run -P --name=nginx_test -v /etc/nginx nginx
  4. docker volume ls #查看所有volume的情况
  5. 此时发现:
  6. local nvninfivnfinviofvofovojd03040r3249i-03g
  1. 具名挂载
  1. #具名挂载
  2. docker run -P --name=nginx_test2 -v juming-nginx:/etc/nginx nginx #这个juming-nginx不是一个路径,只是为挂载卷起了一个名字
  3. docker volume ls #查看所有volume情况
  4. 此时发现:
  5. local juming-nginx
  1. 写明对应路径的挂载方式
  1. -v 主机目录:容器目录 #核心参数

查找挂载卷的位置

  1. 1. docker volume inspect juming-nginx #查看该名字对应的卷的原生数据,其中包含挂载卷的位置信息
  2. 2. docker inspect 容器id #在容器的挂载信息里找到挂载卷的位置

注意:要区别三种卷的挂载方式

  1. 匿名挂载
  2. 具名挂载
  3. 写明对应路径的挂载方式

拓展

  1. ro readonly #只读
  2. rw readwrite #可读可写
  3. #一旦设置了容器的权限,容器对我们挂载出来的内容就有了权限限定
  4. docker run -d -P --name=nginx_test -v juming-nginx:/etc/nginx:ro nginx #只能通过宿主机操作,容器内部无法操作
  5. docker run -d -P --name=nginx_test -v juming-nginx:/etc/nginx:rw nginx

初识Dockerfile:脚本方式挂载

  1. dockerfile: 构建docker镜像的构建文件,是一个命令脚本

简单尝试写一个dockerfile文件

  1. cd /home/wangxun/docker_volume_test
  2. vim dockerfile01
  1. 脚本内容(按层创建自定义的镜像):
  2. FROM centos #创建的镜像的基础
  3. VOLUME ["volume01", "volume02"] #指定镜像的挂载卷
  4. CMD echo "---this is the end---" #输出指定的消息
  5. CMD /bin/bash #设置交互sehll类型
  1. 使用dockerfile文件脚本
  1. docker build -f /home/wangxun/docker_volume_test/dockerfile1 -t wangxun/centos:1.0 .
  2. #脚本路径 生成的镜像名+版本 最后的一个.不要漏掉
  1. 使用自己创建的镜像
  1. docker images
  2. docker run -it --name=my_centos wangxun/centos:1.0 /bin/bash #会看到自己挂载的卷
  3. docker inspect 容器id #找到卷挂载信息
  4. #根据卷挂载信息里的挂载卷信息找到挂载卷位置

part2数据卷容器:

数据卷容器

实现容器之间的数据共享:让某个容器(父容器)为其他容器(子容器)提供数据

  1. docker02 --volumes-from docker01 #--volumes-from 为核心参数

享受备份机制,不是随意的可以删除掉的

只要某个容器还在使用数据,哪怕父容器被删除了,子容器中的数据还在,表现为继承,实际上互为备份

与简单意义上的数据共享又有本质区别:

数据卷容器技术,本质是一种数据备份技术,必须该卷涉及到的所有容器都删除(如果挂载到了宿主机,宿主机内挂载

卷也要删除),该数据卷才真正意义上的被删除

数据卷容器的练习: 实现多个mysql共享一个数据库

  1. docker pull mysql:5.7
  2. docker run -d -p 3310:3306 -v /home/wangxun/mysql_5_7/conf:/etc/mysql/conf.d -v /home/wangxun/mysql_5_7/data:/var/lib/mysql
  3. -e MYSQL_ROOT_PASSWORD=123456 --name=mysql01 mysql:5.7 #挂载出配置文件,数据文件,并设置mysql的密码
  4. docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7 #正常启动一个容器,只不过该容器要继承于某个父容器(表面上的继承,实际上互为数据数据备份)

不是随意的可以享受到这种备份机制的

  1. 容器挂载到宿主机: -v

​ 容器之间相互挂载: --volumes-from

只有挂载的卷可以享受互为备份和数据共享的机制

  1. 其实:

​ 宿主机也是一个容器,只不过是一个最顶级的容器

换而言之: 容器间共享数据,删除父容器,子容器与最顶级的宿主机之间仍然遵循数据卷互为备份的机制

  1. 时刻牢记:

docker卷技术始终是围绕挂载卷来说的,非卷数据并不在研究范围

docker数据卷技术的更多相关文章

  1. docker 数据卷之进阶篇

    笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...

  2. docker 数据卷 ---- 进阶篇

    笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...

  3. 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作

    Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3 ...

  4. docker数据卷学习-利用数据卷实现mysql的快速恢复和迁移

    docker数据卷学习 一 新建带有数据卷的容器 1.从docker hub下载centos7镜像 # docker pull centos 2. 创建container # docker run - ...

  5. docker数据卷挂载

    docker数据卷挂载笔记 我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: ...

  6. Docker学习第三天(Docker数据卷管理)

    1.Docker数据卷管理 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中.目前Docker提供了三种 ...

  7. Docker学习笔记之使用Docker数据卷

    Docker数据卷将数据存储到主机而非容器,多个容器需要共享数据时,常常使用数据卷. 1. 为容器设置数据卷(不指定主机目录) 2. 容器与主机之间.容器与容器之间共享数据卷(指定主机目录) 3. 使 ...

  8. docker数据卷(Data Volumes)

    Docker宿主机和容器之间文件拷贝docker copy 前言: Docker 数据管理 在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享,这必然涉及 ...

  9. 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理

    目录 1.数据卷容器的说明 2.数据卷容器共享数据原理 3.总结 4.练习:MySQL实现数据共享 1.数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现 ...

随机推荐

  1. python使用虚拟环境venv

    venv模块支持使用自己的站点目录创建轻量级"虚拟环境",可选择与系统站点目录隔离.每个虚拟环境都有自己的Python二进制文件(与用于创建此环境的二进制文件的版本相匹配),并且可 ...

  2. AspNetCore7.0源码解读之UseMiddleware

    Use​Middleware​Extensions 前言 本文编写时源码参考github仓库主分支. aspnetcore提供了Use方法供开发者自定义中间件,该方法接收一个委托对象,该委托接收一个R ...

  3. 手脱PESpin壳【06.exe】

    1.查壳 2.LoradPE工具检查 一方面可以用LoradPE工具查看重定位,另一方面也可获取一些详细信息 3.查找OEP ①未发现pushad 开始未发现pushad,进行单步步入,很快就能找到p ...

  4. 云厂商 RDS MySQL 怎么选

    1. 摘要 为了让大家更好的了解各云厂商在RDS MySQL数据库功能上的差异,也为给准备上云的同学做个参考,本文将对阿里云.腾讯云.华为云和AWS 的 RDS MySQL数据库进行对比说明. 从一个 ...

  5. 那些年你啃过的ConcurrentHashMap

    前言 我是fancy,一个年纪轻轻bug量就累计到3200个的程序员,同事们都夸我一个人养活了整个测试组. 最近迷上了并发编程.并发这玩意怎么说呢,就是你平时工作用不到,一用就用在面试上.这不,又卷起 ...

  6. SpringBoot项目使用jasypt加解密

    Jasypt 是一个 Java 库,它允许开发者以最小的努力为他 / 她的项目添加基本的加密功能,而且不需要对密码学的工作原理有深刻的了解. 一.添加依赖 <dependency> < ...

  7. Git命令行提交代码步骤

    先进入对应的项目目录 1.拉取服务器代码,避免覆盖他人代码 git pull 2.查看当前项目中有哪些文件被修改过 git status 具体状态如下: 1:Untracked: 未跟踪,一般为新增文 ...

  8. Python <算法思想集结>之抽丝剥茧聊动态规划

    1. 概述 动态规划算法应用非常之广泛. 对于算法学习者而言,不跨过动态规划这道门,不算真正了解算法. 初接触动态规划者,理解其思想精髓会存在一定的难度,本文将通过一个案例,抽丝剥茧般和大家聊聊动态规 ...

  9. 看看CabloyJS工作流引擎是如何实现Activiti边界事件的

    CabloyJS内置工作流引擎的基本介绍 1. 由来 众所周知,NodeJS作为后端开发语言和运行环境,支持高并发.开发效率高,有口皆碑,但是大多用于数据CRUD管理.中间层聚合和中间层代理等工具场景 ...

  10. neo4j删除节点和关系

    两种方法: 一.用下列 Cypher 语句: match (n) detach delete n 原理:匹配所有的节点,然后进行删除. 二. 从文件系统上删除对应的数据库. 1.停掉服务: 2.删除 ...