• Docker容器数据卷入门教程(超详细)



    以下是Docker相关笔记总结,方便自己以后复习,同时也希望对大家有所帮助。


    概念

    什么是数据卷?

    docker的理念将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为容器的一部分保存下来,那么当容器被删除之后,数据也就没了。为了能够保存数据,在docker容器中使用卷。
    卷就是目录或者文件,存在于一个或者多个容器中,但是不属于联合文件系统,因此能够绕过Union File System提供一些用于持久化数据或共享数据的特点。

    功能及特点

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

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

    使用数据卷

    注意:所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data

    方法一 直接使用命令挂载

    命令:docker run -it -v 主机目录:容器内目录

    启动容器

    ubuntu@VM-4-3-ubuntu:~$ sudo docker run -it --name="centos01" -v /home/docker-centos:/home centos
    
    • 1

    启动后通过命令 docker inspect 容器id查看具体信息
    在这里插入图片描述
    测试文件的同步
    在这里插入图片描述
    进一步测试,进行以下操作

    1. 停止正运行的docker容器
    2. 在宿主机上修改文件test.java,写入hello docker from docker-centos
    3. 启动刚刚停止的容器
    4. 查看容器内的数据是否会同步
      在这里插入图片描述
      总结:容器的持久化和同步操作,容器间也可共享

    方法二 匿名挂载

    命令:docker run -it -v 容器内路径

    以nginx为列,启动容器docker run -d -P --name nginx01 -v /etc/nginx nginx

    容器启动后,使用命令doocker inspect 容器id查看一下元数据,可以看到卷的位置如下图
    在这里插入图片描述

    方法三 具名挂载

    命令:docker run -it -v 卷名:容器内路径

    启动容器 docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
    使用命令doocker inspect 容器id查看一下元数据,可以看到卷的位置如下图
    在这里插入图片描述
    总结
    如何确定试具名挂载还是匿名挂载,还是指定路径挂载

    -v 容器内路径							#匿名挂载
    -v 卷名:容器内路径		   	   			#具名挂载
    -v /宿主机路径:容器内路径  	           #指定路径挂载
    
    • 1
    • 2
    • 3

    扩展(读写权限)

    通过 -v 容器内路径:ro rw改变读写权限

    ro  readonly   #只读
    rw  readwrite  #可读可写
    
    #一旦这个设置了容器权限,容器对挂载出来的内容就限定了
    $ sudo docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
    $ sudo docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    只要设置了ro说明这个路径只有通过宿主机来操作,容器内无法操作


    数据卷容器

    可实现多个容器的数据同步,比如多个mysql数据库同步数据

    准备

    1. 启动一个centos容器,命名为bbx-centos01,做为父容器
    2. 创建两个新文件夹volume01volume02
      这里的bbx-centos是在原有centos镜像制作的

    在这里插入图片描述
    启动子容器bbx-centos02继承 --volumes-from父容器bbx-centos01
    在这里插入图片描述

    测试
    1.在centos01中volume01创建一个docker的文件,看centos02是否同步
    2.在centos02中volume01创建一个docker2的文件,看centos01是否同步

    在这里插入图片描述

    容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用

  • 相关阅读:
    用HTTP proxy module配置一个简单反向代理服务器
    糖基化(glycosylation)
    大数据项目之电商数仓、电商业务简介、电商业务流程、电商常识、业务数据介绍、电商业务表、后台管理系统
    kubernetes pod podsecurityPolicies(PSP)
    【Spring】静态代理
    MySQL的索引问题
    杂想之一个C++内存泄露案例
    java虚拟机 JVM问题记录
    java计算机毕业设计web家教管理系统源码+mysql数据库+系统+lw文档+部署
    Vue 面试题复习
  • 原文地址:https://blog.csdn.net/BBQ__ZXB/article/details/127456290