zoukankan      html  css  js  c++  java
  • Docker数据卷

    1.容器数据卷简介 

      一句话:有点类似我们Redis里面的rdb和aof文件

    2.容器数据卷作用

     

      容器的持久化

      容器间继承+共享数据

    3.数据卷使用

    [1].使用命令方式添加

    (1).容器添加

    语法:docker run -it -v /宿主机绝对路径目录:/容器内目录      镜像名

    [root@pluto /]# docker run -it -v /myDataVolume:/dataVolumeContainer centos:6.8

     

    (2).查看数据卷是否挂载成功

    语法:docker inspect 容器ID

    [root@pluto /]# docker ps

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

    04bd9add86e3        centos:6.8          "/bin/bash"         4 minutes ago       Up 4 minutes                            angry_payne         

    [root@pluto /]# docker inspect 04bd9add86e3

     

    (3).容器和宿主机之间数据共享

     

    (4).容器停止退出后,主机修改后数据是否同步

     

    (5).仅读

    语法:docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

     

    [2].DockerFile添加

    (1).在主机创建目录

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

    [root@pluto /]# mkdir /mydocker

    [root@pluto /]# cd mydocker/

    (2).File构建

    语法:VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

    说明:

      出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。

      由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。

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

    [root@pluto mydocker]# pwd

    /mydocker

    [root@pluto mydocker]# vim Dockerfile

     

    # volume test

    FROM centos:centos6.8

    VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]

    CMD echo "finished,--------success1"

    CMD /bin/bash

      因为本机系统是centos6.8,所以如果不指定可能会出现"FATAL: kernel too old"的情况

    (3).build

      build后生成镜像,获得一个新镜像pluto/centos

    [root@pluto mydocker]# docker images

    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

    centos              6.8                 efa3cf7ee1f9        17 months ago       194.5 MB

    [root@pluto mydocker]# docker build -f /mydocker/Dockerfile -t pluto/centos .

     

    (4).run容器  

    [root@pluto mydocker]# docker run -it pluto/centos

     

    (5).容器卷目录

      找到容器内的卷目录地址对应的主机目录地址

    [root@pluto /]# docker ps

    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES

    a7e8f6f016b4        pluto/centos        "/bin/sh -c /bin/bas   46 minutes ago      Up 46 minutes                           modest_morse           

    [root@pluto /]# docker inspect pluto/centos

     

     

      如果出现"cannot open directory"的错误

    Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied

    解决办法:在挂载目录后多加一个--privileged=true参数即可

    4.数据卷容器

      命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

     

     

     Docker run -it --name mydocker1 pluto/cetos

  • 相关阅读:
    OJ:自己实现一个简单的 priority_queue
    OJ:访问 const 成员函数问题
    OJ:重载 << 运算符
    Qt 编程中 namespace Ui { class Widget; } 解析
    QT 实现图片旋转的两种方法
    QTimer 的使用
    QT 完美实现圆形按钮
    QT 设置有效绘图区域
    基于 LWIP 建立 TCP Server 与主机通信实验
    大整数相乘 分治法 和 循环暴力法
  • 原文地址:https://www.cnblogs.com/HOsystem/p/13850060.html
Copyright © 2011-2022 走看看