场景一:现在用Docker创建了N个容器,但是这些容器之间需要数据共享,这个时候我们应该怎么办?[参考第四步]

场景二:docker创建了一个容器并进入容器,添加了一些定制功能,此时除了用docker commit去生成一个新的镜像,使数据作为镜像的一部分进行保存以外,我们还能通过什么方式去保持数据?[参考第三步]

一、数据卷

数据卷听起来很陌生,但是我们换种方式大家可能就觉得简单理解了。数据卷可以理解为容器中的一个目录。

容器数据卷:命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。简单点来说,就是活动硬盘对接活动硬盘。

所以为了保存数据,我们在docker中使用卷,即数据卷。

二、容器卷的作用

数据卷的作用:

  a.容器的持久化

  b.容器间继承+共享数据

目前我们也可以通过命令去做这个动作,从容器内拷贝文件到主机,命令如下:

docker cp 容器id:容器内路径 目录主机路径

//比如目录主机路径为根目录/,容器内路径为/volumecontainer

//命令可以写为:docker cp 容器id:/volumecontainner /

三、创建数据卷[数据卷容器的添加方式]

数据卷容器有2中添加方式,一种是直接命令添加,一种是dockerfile文件添加。

1、直接命令添加:

  1. docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名id
  2. 查看数据卷是否挂载成功
  3. 容器和宿主机之间数据共享
  4. docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

    //直接运行命令 docker run -it -v /:/volumeContainer [imageid]

    //在本机的根目录下,volumeContainer 指的是在容器内的目录

Ps:ro是只读,在容器内不能对容器卷进行编辑

在命令添加时可能会涉及到的一些命令:

docker ps:显示当前运行中的容器

docker ps -l:显示上一次运行的容器

docker start 容器id:启用容器

docker inspect 容器id:查看数据卷是否挂载成功

cat 文件名称:显示文件中的内容

2、Dockerfile添加

  dockerfile文件的使用,具体可以参考另外一篇博文:https://www.cnblogs.com/wendyw/p/9728381.html

 dockerfile文件添加数据卷容器大致步骤如下:

  2.1 根目录下新建mydocker文件夹并进入

  2.2 可在dockerfile中使用Volume指令来给镜像添加一个或多个数据卷

    //比如:VOLUME[“/dataVolumeContainer1”,”/dataVolumeContainer2”,xxx]

    //在dockerfie文件中添加如上命令就可以一次生成多个数据卷

  2.3 File构建

  2.4 Build后生成镜像-获得一个新镜像 xxx/centos

  2.5 run容器

在完成Dockefile文件的运行后,查看是否添加成功,可以执行如下命令:

  Docker inspect 容器id:查看本机默认路径下的容器卷

四、实战-不同容器之间共享容器卷

比如用centos镜像生成容器test1、test2、test3,已经是生成容器卷,/VolumeContainer是容器内数据卷

1、 打开虚拟机centos7终端,执行docker images出现错误:【Failed to restart dock.service: Unit not found.】,执行如下代码:

systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service

docker 服务开启

2、登录阿里云,把已经创建好数据卷的镜像pull下来

Ps:如果使用你本地的镜像,这一步就忽略

docker login --username=xxx registry.cn-hangzhou.aliyuncs.com

//xxx是阿里云账号登录名称[登录你自己的账号,去拉取你的镜像]

docker pull registry.cn-hangzhou.aliyuncs.com/abc/mycentos:1.4.1

//从阿里云上去下载mycentos

//abc是命名空间[需要自己去创建对应的命名空间,且已经创建好镜像],拉下来的代码中已经有数据卷

3、找到对应镜像的imageid,先启动一个父容器test001

docker images //找到mycentos对应的imageid

docker run -it [imageid] //进入容器,并且容器名字命令为test001

另外打开一个终端,查看正在运行中的代码:

docker ps  //查看正在运行中的代码

4、容器间传递共享,容器test002、test003继承与test001

//--name 给容器命名,B --volume-from A是指容器B继承与容器A

 docker run -it --name test002 --volumes-from test001 [imageid]

//test002容器继承与test001

docker run -it --name test003 --volumes-from test001 [imageid]

docker run -it --name test004 --volumes-from test003 [imageid]

 

5、分别删除、增加、修改test002、test003中的文件内容,都能进行同步更新。

总结:容器之间配置信息的传递,任何一个容器的删除,不影响其他容器的使用,数据卷的生命周期一直持续到没有容器使用它为止。

Docker-使用数据卷在宿主机和容器间的数据共享的更多相关文章

  1. Docker中数据卷(Volume)的使用

    数据卷有两种形式,一种是容器中的某个目录,它可以被别的容器引用,只要有一个容器引用了这个数据卷,数据就不会被删除:另一种数据卷是将容器中的数据卷和宿主机的目录进行挂载. 数据卷可以在多个容器之间共享, ...

  2. Docker学习笔记 - Docker的数据卷容器

    一.什么是数据卷容器 如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器. 数据卷容器:用于容器间的数据共享,主动挂载宿主机目录,用于其他容器挂载和共享. 二.数据卷容器的操作 1.创建 ...

  3. Docker创建数据卷

    当程序在容器中运行时,需要与其他容器中的程序或者容器外部的程序进行文件读写操作时,就需要进行数据的交换:容器内部的文件系统,是一个临时层,当容器停止运行并被删除时,这个临时层就会被一同丢弃:为了达到从 ...

  4. docker定义数据卷及数据卷的备份恢复

    前言:生产环境中使用docker时,往往需要对数据进行持久化(只有把容器导出为镜像,才能够保存写的数据,否则容器删除或者停止,所有数据都会没有),或者需要在多个容器之间进行数据共享,这必然涉及容器的数 ...

  5. Docker之数据卷(Data Volumes)操作

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

  6. docker.[6] 数据卷

    docker.[6] 数据卷 操作指令: # docker run -v /data1:/data2 -i -t centos /bin/bash 参数说明: data1 : 这里指的是宿主机的目录( ...

  7. docker挂载数据卷

    1.Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷,简单的理解就是将数据持久化的工具. 2.在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们 ...

  8. 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令

    目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...

  9. docker之数据卷管理

    转自:https://www.cnblogs.com/jsonhc/p/7777811.html docker之数据卷的备份和还原 1.现在利用镜像创建一个nginx的服务容器,并挂载一个数据卷 [r ...

随机推荐

  1. 1,github更新问题

    赶去吃饭,不排版了. 一:上传 1,新建仓库 通过下面代码克隆仓库到本地: git clone https://github.com/ndnmonkey/zhihu.git 把文件放到克隆到本地的文件 ...

  2. 手机运行Linux系统,可以办公,可以上网,太爽了!

    之前用 Termux 编程一直都是在黑乎乎的命令行敲代码,有多少人知道其实可以在手机上用 Termux 构建一个包含桌面环境的 Linux 系统呢. 这个构建出的 linux 系统,可以显示出桌面,可 ...

  3. File 方法

    File类说明 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永 久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动,传送,亦可以被其他程序使用 ...

  4. html的height:100%;高度是多少

    html的height:100%;高度是多少 html设置height:100%;表示一屏高度,类似于100vh.未设置则根据子元素的高度来自适应高.在实际应用中,设置页面高度为1屏幕高度通常设置: ...

  5. 《.NET 5.0 背锅案》第4集:一个.NET,两手准备,一个issue,加倍关注

    第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...

  6. 1. 线性DP 887. 鸡蛋掉落 (DP+二分)

    887. 鸡蛋掉落 (DP+二分) https://leetcode-cn.com/problems/super-egg-drop/ /*首先分析1个蛋,1个蛋的话,最坏情况需要N次,每次只能从0 1 ...

  7. Java的强引用、软引用、弱引用、虚引用

    背景 工程中用到guava的本地缓存.它底层实现和API接口上使用了强引用.软引用.弱引用.所以温故知新下,也夯实下基础. 预备知识 先来看下GC日志每个字段的含义 Young GC示例解释 [GC ...

  8. 2020年SpringCloud 必知的18道面试题

    今天跟大家分享下SpringCloud常见面试题的知识. 1.什么是Spring Cloud? Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外 ...

  9. Mesos Marathon能做什么?理念是什么?(转)

    Mesos功能和特点? Mesos是如何实现整个数据中心统一管理的呢?核心的概念就是资源两级供给和作业两级调度.先说说从下而上的资源两级供给吧. 在Mesos集群中,资源的供应方都来自Mesos Sl ...

  10. XSS(跨站脚本攻击) - 常用代码大全

    XSS(跨站脚本攻击) - 常用代码大全-版本一 1'"()&%<acx><ScRiPt >prompt(915149)</ScRiPt> < ...