• Docker(5)---数据卷


    在这里插入图片描述

    上一篇:Docker(4)—镜像

    1. 如何保证数据持久化?

      到这里我们应该知道,docker技术就是使用下载好的镜像文件生成运行实例—容器,也就是说镜像文件相当于是一个模板,比如mysql的镜像文件,无论在docker上面运行多少次mysql,使用的始终是下载好的同一个mysql镜像文件。那我运行期间产生的数据怎么保存?第二次运行的时候想使用第一次运行期间产生的数据怎么办?

      在Docker中,数据卷提供数据持久化功能。数据卷呈现为一种目录或者文件的形式存在于一个或者多个容器中,由docker挂载到容器,但是不属于联合文件系统的一部分,所以当docker关闭或者删除容器的时候,不会影响到数据卷中的数据。数据卷可以用于存储数据,也可以用来在容器间进行数据共享。

    2. Dockerfile保留字指令

    指令 描述
    FROM 基础镜像,当前新镜像是基于哪个镜像的
    MAINTAINER 镜像维护者的姓名和邮箱地址
    RUN 容器构建时需要运行的命令
    EXPOSE 当前容器对外暴露出的端口
    WORKDIR 指定在创建容器后,终端默认登录进来工作的目录,一个落脚点
    ENV 用来在构建镜像过程中设置环境变量
    ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
    COPY 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 {COPY src dest}
    VOLUME 容器数据卷,用于数据保存和持久化工作
    CMD 指定一个容器启动时要运行的命令。Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换。
    ENTRYPOINT 指定一个容器启动时要运行的命令。ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。
    ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发。

    3. 数据卷特点?

    • 数据卷可以在容器间共享或者重用数据
    • 数据卷中的更改不会包含在容器的更新中
    • 数据卷中的更改可以直接生效
    • 数据卷的生命周期一直持续到没有容器使用它为止

    3. 实现宿主机与容器之间的数据共享?

      在这里需要明确两个概念:
    1. 宿主机:
      宿主机指的就是我们通过VMWare-----》CentOs的方式进入的Linux系统就是我们的宿主机。
    2. 容器
      就是宿主机上拉取的镜像文件生成的运行实例~

    需求:
      现在我有一个centos镜像,希望centos镜像运行起来的时候其containerdata目录与宿主机的mydata两个目录之间能够进行数据共享;

    命令:
      docker run -it -v 宿主机中的共享目录(mydata)路径:容器中的共享目录(containerdata)的路径 容器名

    示例:
      比如mydata在宿主机的根目录下(/mydata),containerdata在容器的根目录下(/containerdata

    下图是宿主机的根目录,现在没有mydata文件夹
    在这里插入图片描述
    下图是容器centos的根目录,现在也没有containerdata文件夹
    在这里插入图片描述
    1.首先进行目录绑定:

    docker run -it -v /mydata:/containerdata centos
    

    2.查看宿主机和容器的绑定关系

    docker inspect 容器ID
    

    在这里插入图片描述
    3.查看宿主机和容器中是否分别有mydatacontainerdata文件夹

    宿主机:
    在这里插入图片描述
    容器:
    在这里插入图片描述
    现在在mydata目录中创建一个文档:

    [root@bogon mydata]# touch file.txt
    [root@bogon mydata]# ll
    总用量 0
    -rw-r--r--. 1 root root 0 3月  22 14:57 file.txt
    [root@bogon mydata]# 
    

    既然mydata目录和centos的容器中的containerdata目录进行了数据共享,那么现在containerdata目录下应该也有一个file.txt文档。查看containerdata目录:

    [root@7453e78d6615 /]# cd containerdata/
    [root@7453e78d6615 containerdata]# ls -l
    total 0
    -rw-r--r--. 1 root root 0 Mar 22 06:57 file.txt
    [root@7453e78d6615 containerdata]# 
    
    

    发现containerdata目录下确实有file.txt文档,现在通过容器编辑该文档:
    在这里插入图片描述
    在该文档中输入一段话,按照数据共享的原理,在宿主机的mydata目录下的file.txt文档中应该也会有这样一句话:
    在这里插入图片描述
    此时再次查看宿主机的containerdata下的file.txt
    在这里插入图片描述
    到这里就实现了宿主机与容器之间的数据共享~

    注意:

      通过上面的绑定操作之后,即使我们的容器关闭运行了,但是如果我们在宿主机的mydata目录下进行的操作依然会被同步到与其绑定的centos镜像中的containerdata目录下:

    示例:

      关闭centos的运行并退出:`

    在这里插入图片描述
    查看此时运行的镜像文件:
    在这里插入图片描述
    确认上面的centos镜像文件已经退出运行了~
    此时在宿主机的mydata目录下创建一个file001.txt文件,并添加内容:this content is edited in the host
    在这里插入图片描述
    此时再运行centos镜像文件,到containerdata目录下查看:
    查看上次关闭的centos镜像ID:docker ps -l
    在这里插入图片描述
    重新启动上次关闭的centos镜像文件:docker start 镜像ID

    在这里插入图片描述

    进入处于运行状态的centos容器:docker attach 镜像ID
    在这里插入图片描述
    查看containerdata目录下是否有新增的file001.txt文档:

    [root@e2fde7599c8b /]# cd containerdata/
    [root@e2fde7599c8b containerdata]# ls -l
    total 8
    -rw-r--r--. 1 root root 38 Mar 22 07:22 file.txt
    -rw-r--r--. 1 root root 35 Mar 22 07:13 file001.txt
    [root@e2fde7599c8b containerdata]# cat file001.txt 
    
    this content is edited in the host
    
    [root@e2fde7599c8b containerdata]# 
    
    

    发现我们在宿主机上新建的file001.txt文档以及里面的数据同步到了centos容器相应的绑定位置;

    4. 宿主机与容器数据共享的时候添加权限

    宿主机与容器进行数据共享的目录绑定命令:

    docker run -it -v /宿主机共享文件的绝对路径:/容器共享文件的绝对路径 :ro 镜像名
    

    注:ro就是read only(只读权限)

    通过以上命令进行共享数据目录绑定之后,我们可以从宿主机上写数据(增删改),而容器上只能读数据

  • 相关阅读:
    iNeuOS工业互联平台,WEB组态(iNeuView)集成rtmp和websocket视频元件,支持海康、大华等摄像头实时显示视频
    MyBatis之TypeHandler用法
    视频监控安防专网事件预警运维系统开发方案
    Qmgo 开源了! 更好用的 Go 语言 MongoDB driver
    前端使用axios传递数组后端使用List接收
    jdk1.6手册java8中英手册java9英文手册.chm(下载)
    自动化运维工具Ansible (一)
    初级模拟电路:4-11 混合π模型
    简单体验一个高性能,简单,轻量的ORM库- Dapper (无依赖其它库,非常方便高效)
    Python计算大文件行数方法及性能比较
  • 原文地址:https://www.cnblogs.com/wgty/p/12810399.html
Copyright © 2020-2023  润新知