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. fastHttp服务端处理请求的过程

    Github 地址 https://github.com/valyala/fasthttp fastHttp 服务端的处理请求的过程 工作过程 主要代码 设置监听地址 server.go func ( ...

  2. tp6.0配置站点后无法访问

    1.安装composer中国镜像composer config -g repo.packagist composer https://packagist.phpcomposer.com2.执行comp ...

  3. Java 操作Oracle数据库

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  4. 码一次前后台post请求交互,以及接口的使用,json数据格式的传递

    近几天,公司疯狂加班,然后补做了很多功能,很多东西虽然是自己熟悉的,但是却不会上手,动手实践能力仍需加强,对此对一些代码记录,留待学习和总结. 简单描述功能 具体实现 前台JSP.JS.后台actio ...

  5. (3)UNIX/Linux系统结构

    UNIX/Linux 系统可以粗糙地抽象为 3 个层次,如图所示.底层是 UNIX/Linux 操作系统,即系统内核(Kernel):中间层是Shell层,即命令解释层:高层则是应用层. 1) 内核层 ...

  6. 回文树(回文自动机PAM)小结

    回文树学习博客:lwfcgz    poursoul 边写边更新,大概会把回文树总结在一个博客里吧... 回文树的功能 假设我们有一个串S,S下标从0开始,则回文树能做到如下几点: 1.求串S前缀0~ ...

  7. Luogu T14448 区间开方

    题面版权来自Shlw.题目链接 题目背景 无 题目描述 给定一个数列,元素均为正整数,对其以下两种操作: 1.将某区间每一个数变为其算术平方根(取整) 2.求出某区间内所有数的最大值 输入输出格式 输 ...

  8. Codeforces Round #648 (Div. 2) F. Swaps Again

    题目链接:F.Swaps Again 题意: 有两个长度为n的数组a和数组b,可以选择k(1<=k<=n/2)交换某一个数组的前缀k和后缀k,可以交换任意次数,看最后是否能使两个数组相等 ...

  9. hdu5433 Xiao Ming climbing

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission ...

  10. 002、Python中json字符串与字典转换

    1.测试用例文件TestCase.xlsx 2.编写Python文件进行读取 #!/usr/bin/env python # -*- coding:utf-8 -*- import time impo ...