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. Django-初阶实例

    调用本地css文件的方法 setting.py里面的内容 import os # Build paths inside the project like this: os.path.join(BASE ...

  2. 导出exe的经验

    安装pyinstaller 首先要找到scripts的绝对路径(主要是找到scripts就行了 先是安装C:\Users\96290\AppData\Local\Programs\Python\Pyt ...

  3. 【2020CSP-S模拟赛day5】总结

    爆零自闭赛 写在前面 于2022.11.1 这一次题目质量很高(以至于什么都不会) 再一度体验了省选Orz.比赛大体情况,刨去std, wzc神仙230分,比剩下的加起来都高.zyz神仙60分. 其余 ...

  4. 导出带有图片的excel

    public static void main(String[] args) { try { FileOutputStream out = new FileOutputStream("d:\ ...

  5. Vue基础之生命周期函数[残缺版]!

    Vue基础之生命周期函数[残缺版]! 为什么说是残缺版呢?! 因为有一些周期函数我并没有学到!所以是残缺版! 01 beforeCreate //在实例初始化之后,数据观测 (data observe ...

  6. 。SLI,Service Level Indicator,服务等级指标,其实就是我们选择哪些指标来衡量我们的稳定性。而 SLO,Service Level Objective,服务等级目标,指的就是我们设定的稳定性目标,比如“几个 9”这样的目标。

    .SLI,Service Level Indicator,服务等级指标,其实就是我们选择哪些指标来衡量我们的稳定性.而 SLO,Service Level Objective,服务等级目标,指的就是我 ...

  7. git database 数据库 平面文件 Git 同其他系统的重要区别 Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异 Git 的设计哲学

    小结: 1.如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回来 2.注意 git clone  应指定版本,它复制的这个版本的全部历史信息: 各个分支  git init 数据库 ...

  8. P6739 [BalticOI 2014 Day1] Three Friends 题解

    目录 写在前面 Solution 何为字符串哈希(可跳过): Code 写在前面 P6739 [BalticOI 2014 Day1] Three Friends 听说这题可以用比较暴力的做法过,比如 ...

  9. Spring框架——JDBC与事务管理

    JDBC JDBCTemplate简介 XML配置JDBCTemplate 简化JDBC模板查询 事务管理 事务简介 Spring中的事务管理器 Spring中的事务管理器的不同实现 用事务通知声明式 ...

  10. python——模块、标准库、第三方模块安装

    模块(module)简介 模块化--指将一个完整的程序分解为一个一个小的模块,通过将模块组合,来搭建出一个完整的程序. 模块化的特点: ① 方便开发 ② 方便维护 ③ 模块可以复用! 在Python中 ...