• 【Docker】Docker容器数据卷(Data Volume)


    docker容器数据卷简介

      docker在运行的时候我们可能会修改一些数据,比如在docker某个容器里修改了文件信息,或者新增了一些文件,如果不去docker commit去生成一个新的镜像,随着容器的关闭这些文件及修改的信息会消失。所以当我们希望在关闭容器的时候可以保留这些信息,以及容器之间可以共享数据 。为了数据能够保存,我们使用容器数据卷。

    数据卷特点

      1.数据卷持久化数据,数据卷可以在容器之间共享或者重用数据,容器和宿主机之间可以互相拷贝数据。

        2.数据卷中的内容更改后直接生效。宿主机和容器内数据修改依然会同步。

        3.数据卷中的更改不会包含在镜像的更新中,也就是不回影响镜像的本身。

          4.数据卷的生命周期一直会持续到没有容器使用它为止。

    数据卷的操作

      一.添加数据卷

        1.直接命令添加方式

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

         执行下面命令

           docker run -it -v /myDataVolume:/dockerDataVolume centos

         如果发现有下面错误,是因为mac系统内所指定的路径不对。

         

         根据docker官网提示,https://docs.docker.com/docker-for-mac/osxfs/#namespaces

           

         修改路径后,执行成功,新生成的docker容器中多了一个dockerDataVolume目录,而我mac系统桌面上也多了一个myDataVolume目录,因为我讲路径映射到mac桌面上。

         

        

        通过命令验证

    docker inspect 19bc98eca20d <--这个是刚刚生成容器的ID

        

         根据返回的json数据中看到上面信息,说明已经关联成功。

         

        上个命令后面添加ro参数表示是添加只读目录,只能同步,不能编辑,就是只允许主机单向传递数据,但是容器只能查看。

    docker run -it -v ~/Desktop/myDataVolume:/opt/dockerDataVolume:ro centos
    

           2.通过Dockerfile添加

          通过Dockerfile创建的带有volumes的镜像创建的容器会自动将volumes的目录挂载到宿主机的指定目录,可通过docker inspect查看volumes属性查看。

          在Dockerfile文件中使用VOLUME命令可以给镜像添加一个或者多个数据卷。

          命令:

          VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

         说明:

          出于可移植和分享的考虑,用 -v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现,是因为由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。

    songguojundeMBP:Desktop songguojun$ mkdir mydocker
    songguojundeMBP:Desktop songguojun$ cd my
    myDataVolume/ mydocker/     
    songguojundeMBP:Desktop songguojun$ cd mydocker/
    songguojundeMBP:mydocker songguojun$ pwd
    /Users/songguojun/Desktop/mydocker
    songguojundeMBP:mydocker songguojun$ vi Dockerfile
    songguojundeMBP:mydocker songguojun$ docker build -f /Users/songguojun/Desktop/mydocker/Dockerfile -t song/centos .
    Sending build context to Docker daemon  2.048kB
    Step 1/4 : FROM centos
     ---> 470671670cac
    Step 2/4 : VOLUME ["/opt/dataVolumeContainer1","/opt/dataVolumeContainer2"]
     ---> Running in 92429e5c0597
    Removing intermediate container 92429e5c0597
     ---> 8597e1c67270
    Step 3/4 : CMD echo "finished,--------success1"
     ---> Running in 210cd21ebd1b
    Removing intermediate container 210cd21ebd1b
     ---> c4fbf443e419
    Step 4/4 : CMD /bin/bash
     ---> Running in 1dc2c05e4437
    Removing intermediate container 1dc2c05e4437
     ---> 45bb13cd1ef1
    Successfully built 45bb13cd1ef1
    Successfully tagged song/centos:latest
    songguojundeMBP:mydocker songguojun$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    song/centos         latest              45bb13cd1ef1        About a minute ago   237MB
    centos              latest              470671670cac        8 weeks ago          237MB

    运行刚刚生成的新的容器

    songguojundeMBP:mydocker songguojun$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    song/centos         latest              45bb13cd1ef1        About a minute ago   237MB
    centos              latest              470671670cac        8 weeks ago          237MB
    songguojundeMBP:mydocker songguojun$ docker run -it song/centos
    [root@6b38aa0e0b7e /]# ls /opt/
    dataVolumeContainer1  dataVolumeContainer2

    数据卷容器

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

         

        下面一个案例

             操作流程

        1.先启动一个父容器dc1。

  • 相关阅读:
    重磅!容器集群监控利器 阿里云Prometheus 正式免费公测
    阿里开源 KT Connnect,轻量级云原生测试环境治理平台来啦!
    使用Velero Restic快速完成云原生应用迁移至ACK集群
    Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局
    北京DAY1下午
    洛谷 P3041 [USACO12JAN] Video Game Combos
    Tyvj 1729 文艺平衡树
    bzoj 3238: [AHOI2013]差异
    bzoj 2957: 楼房重建
    bzoj 2660: [Beijing wc2012]最多的方案
  • 原文地址:https://www.cnblogs.com/songgj/p/11135547.html
Copyright © 2020-2023  润新知