Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式:

            • 数据卷(Volumes)

            • 挂载主机目录 (Bind mounts)

              数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

              • 数据卷 可以在容器之间共享和重用

              • 数据卷 的修改会立马生效

              • 数据卷 的更新,不会影响镜像

              • 数据卷 默认会一直存在,即使容器被删除

              注意:数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。

              创建一个数据卷Volumes

              #创建
              [root@node1 ~]# docker volume create my-vol
              my-vol
              #查看
              [root@node1 ~]# docker volume ls
              DRIVER VOLUME NAME
              local my-vol
              #详细查看
              [root@node1 ~]# docker volume inspect my-vol
              [
              {
              "CreatedAt": "2021-02-17T10:54:32+08:00",
              "Driver": "local",
              "Labels": {},
              "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
              "Name": "my-vol",
              "Options": {},
              "Scope": "local"
              }
              ]

              启动一个挂载数据卷的容器  

              [root@node1 ~]# docker run -itd --name  web -v my-vol:/usr/share/nginx/html nginx:latest
              b87a20e4630fa1c1dda606a757ab27cd7d1708057610094a75ff4771dc8db6c0

              查看web容器的详细信息

              [root@node1 ~]# docker inspect web
              ......
              #找到mount字段
              "Mounts": [
              {
              "Type": "volume",
              "Name": "my-vol",
              "Source": "/var/lib/docker/volumes/my-vol/_data",
              "Destination": "/usr/share/nginx/html",
              "Driver": "local",
              "Mode": "z",
              "RW": true,
              "Propagation": ""
              }
              ],

              删除数据卷

              [root@node1 ~]#  docker volume rm my-vol
              

              数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

              无主的数据卷可能会占据很多空间,要清理请使用以下命令 

              $ docker volume prune
              

              挂载一个主机目录作为数据卷Bind mounts  

              使用 一个本地主机的目录挂载到容器中去。

              [root@node1 ~]# docker run -itd -P -v /html:/usr/share/nginx/html nginx:latest
              1e691d2c4a72ef328d134e3448a9f59f5abf9150dfc7c08d8c15423922e32aa0

              上面的命令加载主机的 /html 目录到容器的 /usr/share/nginx/html目录。这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,以前使用 -v 参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹,现在使用 --mount 参数时如果本地目录不存在,Docker 会报错。  

              Docker 挂载主机目录的默认权限是 读写,用户也可以通过增加 readonly 指定为 只读

              [root@node1 ~]# docker run -itd -P -v /html:/usr/share/nginx/html:ro nginx:latest
              d646bf5df9f33ca50c7ab5e36ae59ca9a84cc13980a60162184806adc255eec2
              #在宿主机目录创建文件没有问题
              [root@node1 ~]# touch /html/index.html
              [root@node1 ~]# docker exec -it d646bf sh
              # cd /usr/share/nginx/html
              # touch index.html
              touch: cannot touch 'index.html': Read-only file system
              触摸:不能触摸索引。只读文件系统

              查看数据卷的具体信息

              [root@node1 ~]# docker inspect  d646bf
              "Mounts": [
              {
              "Type": "bind",
              "Source": "/html",
              "Destination": "/usr/share/nginx/html",
              "Mode": "ro",
              "RW": false,
              "Propagation": "rprivate"
              }
              ]


              容器的跨主机网络共享  

              通过nfsserver实现,管理2台nginx容器

              IP       服务
              192.168.1.1

              nginx容器w1

              192.168.1.2 nginx容器w2
              192.168.1.4 nfs-server

              1、搭建nfs

              yum -y install nfs-utils
              mkdir /html
              vim /etc/exports
              cat /etc/exports
              #/html *(rw,sync,no_root_squash)
              systemctl start rpcbind
              systemctl enable rpcbind
              systemctl start nfs-server
              systemctl enable nfs-server

              echo hello > /html/index.html

              2、docker01

              [root@node1 ~]# mkdir  /www
              [root@node1 ~]# showmount -e 192.168.1.4
              Export list for 192.168.1.4:
              /html *
              [root@node1 ~]# mount -t nfs 192.168.1.4:/html /www

              root@node1 ~]# ls /www/

              index.html

              [root@node1 ~]# cat /www/index.html
                  hello

              [root@node1 ~]# docker run -itd --name w1 -p 666:80 -v /www:/usr/share/nginx/html nginx:latest
              1c247e5147486ecd6f25feb623de727fdc1c54ddcf452e1bdd99f772381546d5

              访问测试:

              [root@node1 ~]# curl 192.168.1.1:666
              hello

              3、docker02  

              [root@node2 ~]# mkdir  /www
              [root@node2 ~]# showmount -e 192.168.1.4
              Export list for 192.168.1.4:
              /html *
              [root@node2 ~]# mount -t nfs 192.168.1.4:/html /www
              [root@node2 ~]# cat /www/index.html
              hello
              [root@node2 ~]# docker run -itd --name w2 -p 666:80 -v /www:/usr/share/nginx/html nginx:latest
              88fcd09b2ce93ef9085466a0ffb3f69fac66272bc0b4b39dec6a7886aa033f83
              访问测试
              [root@node2 ~]# curl 192.168.1.2:666
              hello

              4、修改nfs挂载文件,实现nginx容器网页同步

              [root@nfs-server html]# cat index.html
              hello
              [root@nfs-server html]# echo 404 > index.html
              [root@nfs-server html]# cat index.html
              404
              ————————————————————————————————————-
              [root@node1 ~]# curl 192.168.1.1:666
              404
              [root@node2 ~]# curl 192.168.1.2:666
              404

                

                

                

docker07-数据存储的更多相关文章

  1. Kooboo CMS技术文档之三:切换数据存储方式

    切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...

  2. Android之数据存储的五种方法

    1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...

  3. Android之网络数据存储

    一.网络保存数据介绍 可以使用网络来保存数据,在需要的时候从网络上获取数据,进而显示在App中. 用网络保存数据的方法有很多种,对于不同的网络数据采用不同的上传与获取方法. 本文利用LeanCloud ...

  4. Android之文件数据存储

    一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图 ...

  5. Android之SharedPreferences数据存储

    一.SharedPreferences保存数据介绍 如果有想要保存的相对较小键值集合,应使用SharedPreferences API.SharedPreferences对象指向包含键值对的文件并提供 ...

  6. Atitit 数据存储视图的最佳实际best practice attilax总结

    Atitit 数据存储视图的最佳实际best practice attilax总结 1.1. 视图优点:可读性的提升1 1.2. 结论  本着可读性优先于性能的原则,面向人类编程优先于面向机器编程,应 ...

  7. Android数据存储之SQLCipher数据库加密

    前言: 最近研究了Android Sqlite数据库(文章地址:Android数据存储之Sqlite的介绍及使用)以及ContentProvider程序间数据共享(Android探索之ContentP ...

  8. Android数据存储之GreenDao 3.0 详解

    前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...

  9. Vertica增加一个数据存储的目录

    Vertica增加一个数据存储的目录 操作语法为: ADD_LOCATION ( 'path' , [ 'node' , 'usage', 'location_label' ] ) 各节点添加目录,并 ...

  10. 安卓android sharepreference数据存储,保存输入框里面的数据

    Fragment 里面 使用轻量级的数据存储sharepreference ,代码思路清晰.保存输入框里面的数据,实现按钮保存. 个人项目中简单清晰代码: 赵存档 编写 ,可以参考: 类继承Fragm ...

随机推荐

  1. 重磅:保姆级Java技术图谱发布!够学到元宵节了,赶紧收藏!

    最近因为参与社群交流的时间比较多,除了唠唠白酒的嗑之外,很大一部分时间都是看到群里问到一些关于Spring Boot和Spring Cloud应用过程中碰到的问题以及一些开发过程中的报错信息.在这些帮 ...

  2. 苹果 M1 芯片 OpenSSL 性能测试

    Apple M1(MacBook Air 2020) type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes md2 0.00 0.00 0.00 ...

  3. tcpdump 参数详解及使用案例

    参数 -A 以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据(nt: 即Handy for capturing web pages ...

  4. var、let、const之间的区别

    var声明变量可以重复声明,而let不可以重复声明var是不受限于块级的,而let是受限于块级var会与window相映射(会挂一个属性),而let不与window相映射var可以在声明的上面访问变量 ...

  5. 一文带你看遍 JDK9~14 的重要新特性!

    Java9 发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如 ...

  6. jasper使用table组件设计复杂的表头

    1.1 设计报表模板 1.1.1 新建模板DemoReport5.jrxml,去掉不需要的Band,保留Title,Page Header,Detail 1 , PageFooter.将组件Table ...

  7. idea一定要做的配置

    自动编译开关 忽略大小写开关 IDEA默认匹配大小写,如果你开了这个开关,你无论输入String或者string都会出现代码提示或者智能补充 智能导包开关 两个选项勾上:自动导入不明确的结构.智能优化 ...

  8. Centos7部署FytSoa项目至Docker——第三步:部署程序

    FytSoa项目地址:https://gitee.com/feiyit/FytSoaCms 部署完成地址:http://82.156.127.60:8000/ 我买的是一年99标准型SA2云服务器 购 ...

  9. Web漏洞扫描-AppScan

    Web漏洞扫描-AppScan 一.AppScan简述 二.功能及特点 一.AppScan简述 IBM Security AppScan是一个适合安全专家的Web应用程序和Web服务渗透测试解决方案. ...

  10. ACCESS手注

    ASP一般搭载ACCESS或者mssql 判断数据库类型 http://www.***.com?id=1 and (select count(*) from sysobjects)>0 http ...