zoukankan      html  css  js  c++  java
  • docker学习笔记-04:docker容器数据卷

    一、容器数据卷是什么

    1、为了保存docker容器运行时产生的数据,做数据的持久化,我们需要用到容器数据卷。因为如果不通过docker commit 生成新的镜像,那么当容器被删除时,数据自然就没有了。

    2、容器数据卷可以将容器中的数据持久化,并且实现容器之间的数据共享。

    二、容器数据卷可以干什么

    1、卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器中,但不属于联合文件系统,因此能够绕过联合文件系统,提供一些用于持续存储或共享数据的特性。

    2、卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷。

    3、特点:

    (1)数据卷可以在容器之间共享或重用数据。

    (2)卷中的更改可以直接生效。

    (3)数据卷中的更改不会包含在镜像的更新中。

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

    三、添加数据卷

    (一)直接命令添加

    1、将宿主机目录 /myDataVolumn 复制到容器的目录 /dataVolumnContainer  ,如果目录不存在则自动创建:docker run -it -v /myDataVolumn: /dataVolumnContainer centos

    2、无论在宿主机还是容器中修改文件,都会同步更新。当容器先停止退出,主机修改了文件,然后重新进入之前的容器,同样可以看到主机修改过的文件。即内容同步。

    3、命令带权限,比如容器中的目录只读:docker run -it -v /myDataVolumn:/dataVolumnContainer:ro centos

    4、如果docker挂载宿主机目录时访问出现问题:cannot open directory .:Permission denied,解决办法是:在挂载目录后多加一个 --privileged=true 参数即可。

     docker run -it -v /myDataVolumn: /dataVolumnContainer --privileged=true centos 

    (二)dockerFile 添加

    1、DockerFile是镜像模板的描述文件,在docker hub 官网上,查找镜像,然后点击进去,选择一个版本进去,就可以跳转到github,看到某软件镜像的DockerFile。

    2、具体步骤:

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

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

    • VOLUME ['/dataVolumeContainer1','dataVolumeContainer2']
    • 出于可移植和分享的考虑,用-v 主机目录:容器目录 这种方法不能够直接在DockerFile中实现
    • 由于宿主机目录是依赖于特定宿主机的,并不能保证所有的宿主机都存在这样的特定目录,所以只加入容器目录

    (3)编写DockerFile文件,案例:

    # volume test
     FROM centos
     VOLUME ['/dataVolumeContainer1','dataVolumeContainer2']
     CMD echo 'finished,------success1'
     CMD /bin/bash

    (4)build后生成新镜像,获得一个新镜像(以centos为例,一定要注意最后那个 “.”,即指定为当前的路径):

    docker build -f /mydocker/DockerFile -t dyy/centos .

     (5)查看docker给宿主机默认分配的容器卷目录:

         docker inspect 容器ID,然后查看“Volumes”后面的信息,前一半是容器中的容器卷目录,后一半是宿主机中的容器卷目录(可能为空{})。

    四、数据卷容器

    (一)数据卷容器是什么

      容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称为数据卷容器。类似于移动硬盘通过移动硬盘传递数据。

    (二)创建父容器,并挂载其他容器

      1、通过设定名称来指定父容器:docker run -it --name dc01 dyy/centos

      2、其他容器从父容器挂载,其他容器中新创建的资源,同时会在父容器、其他各容器之间共享:docker run -it --name dc02 --volumes-from dc01 dyy/centos

      3、把父容器 dc01 删除后,从父容器中继承以及新创建的文件,还会共享:docker rm -f dc01

       4、哪怕所有的容器都继承自dc01,把dc01删除后,各容器各自的修改,依然会共享。数据卷的生命周期会一直持续到没有容器使用它为止

  • 相关阅读:
    转:高并发高负载系统架构
    用java模拟银行柜台排队
    转:VS2010与SVN
    转:MySQL导入.sql文件及常用命令
    转:Mongodb中随机的查询文档记录
    转:Thumbs.db是什么文件?是病毒吗?怎么处理?
    转:OWASP发布Web应用程序的十大安全风险
    转:Top 10 Algorithms for Coding Interview
    编写C# Windows服务,用于杀死Zsd.exe进程
    转:eclipse载入extjs4出现内存溢出错误的解决方法
  • 原文地址:https://www.cnblogs.com/Luv-GEM/p/11492912.html
Copyright © 2011-2022 走看看