zoukankan      html  css  js  c++  java
  • Docker存储卷(转载)

    Docker存储卷

    什么是数据挂载

    Docker 镜像由多个只读层叠加而成,启动容器时, Docker会加载只读镜像层并在镜像栈顶部添加一个读写层会加载只读镜像层并在镜像栈顶部添加一个读写层
    
    如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即“ 写时复制 (COW)”
    

    关闭并重启容器,其数据不受影响;但删除Docker容器,则其更改将会全部丢失
    
    存在的问题
        存储于联合文件系统中,不易于宿主机访问;
        容器间数据共享不便
        删除容器其数据会丢失
    解决方案:“ 卷 (volume)”
        “ 卷” 是容器上的一个或多个“目录”,此类目录可绕过联合文件系统,与宿主机上的某目录“ 绑定( ( 关联) )”
    

    Data volume 存储卷

    ## 实现数据持久华,外挂日志等
    /data/web -> /containers/data/web
    
    Data volumes provide several useful features for persistent or shared
        Volume 于容器初始化之时即会创建,由 base image提供的卷中的数据会于此期间完成复制提供的卷中的数据会于此期间完成复制
        ## 数据量可以在容器之间共享和重用
        Data volumes can be shared and reused among containers
        ## 直接更改数据量
        Changes to a data volume are made directly
        ## 更新映像时将不包括对数据量的更改
        Changes to a data volume will not be included when you update an image
        ## 即使删除容器本身,数据卷仍然存在
        Data volumes persist even if the container itself is deleted
    Volume的初衷是独立于容器的生命周期实现数据持久化,因此删除容器之时既不会删除卷,也不会对哪怕未被引用的卷做垃圾回收操作;
    
    卷为 docker 提供了独立于容器的数据管理机制
        可以把“ 镜像” 想像成静态文件,例如“ 程序”,把卷类比为动态内容,例如“ 数据” ;于是,镜像可以重用,而卷可以共享;
        卷实现了“ 程序( ( 镜像) )” 和“ 数据( ( 卷) )” 分离,以及“ 程序( ( 镜像) )” 和“制作镜像的主机”分离,用户制作镜像时无须再考虑镜像运行的容器所在的主机的环境;
    

    Docker types

    Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同;
        ## 绑定挂载卷
        Bind mount volume
    	    a volume that points to a user-specified location on the host file system
        ## 容器管理卷
        Docker-managed volume
        the Docker daemon creates managed volumes in a portion of the host's file system that's owned by Docker
    

    在容器中使用 Volumes

    为 docker run 命令使用 -v 选项即可使用 Volume
        Docker-managed volume
            # docker run -it -name bbox1  – v /data busybox
            # docker inspect -f {{.Config.Volumes}}{{.Mounts}} bbox1
                查看 bbox1 容器的卷、卷标识符及挂载的主机目录
        Bind-mount Volume
            # docker run -it -v HOSTDIR:VOLUMEDIR --name bbox2 busybox
            # docker inspect -f {{.Mounts}} bbox2
    
    ## 使用go模板过滤inspect消息
    docker inspect -f {{.Mounts}} myredis
    docker inspect -f {{.NetworkSettings.IPAddress}} myredis
    

    Sharing volumes 复制其他容器的挂载路径

    There are two ways to share volumes between containers
        多个容器的卷使用同一个主机目录,例如
            # docker run  – it --name c1 -v /docker/volumes/v1:/data busybox
            # docker run  – it --name c2 -v /docker/volumes/v1:/data busybox
        复制使用其它容器的卷,为 docker run 命令使用 --volumes-from选项
            # docker run -it --name bbox1 -v /docker/volumes/v1:/data busybox
            # docker run -it --name bbox2 --volumes-from bbox1 busybox
    

    删除卷

    删除容器之时删除相关的卷
        为 docker rm 命令使用 -v 选项
    删除指定的卷
        docker volume rm
    
  • 相关阅读:
    大家一起写mvc(二)
    大家一起写mvc(一)
    jquery读取XML 生成页面文件
    jquery点击区域显示或隐藏DIV,点击非该DIV的地方隐藏该DIV
    struts2 iterator排序
    解决JS传参中文乱码
    关于解决 请求被中止:无法建立SSL / TLS安全通道
    查看sqlserver被锁的表以及如何解锁
    查询sqlserver数据库视图、存储过程等包含特定的字符串
    C#中查询字符串中是否包含指定字符/串,使用IndexOf还是Contains?
  • 原文地址:https://www.cnblogs.com/evescn/p/12795750.html
Copyright © 2011-2022 走看看