zoukankan      html  css  js  c++  java
  • dDocker 数据持久化

    docker数据持久化

    持久化:数据不随着container(容器)的结束而销毁,也就是将数据存储在宿主机下

    • Volumes:Docker会管理宿主机的文件系统的一部分资源,默认位于/var/lib/docker/volumes 目录下;

      [root@localhost ~]# docker run -it -v /opt/ centos:7 /bin/bash
      #将容器文件映射在opt下随机生成一个volumes(可以指定文件)
      [root@d8f5e9ab7160 /]# touch /opt/test.txt
      #在容器中创建一个文件
      #退出后 ls /var/lib/docker/volumes/有volumes
      此时可以用时间查看 ls -ltr /var/lib/docker/volumes
      [root@localhost ~]# ls /var/lib/docker/volumes/4ee786001a8145d84d5ffb5fef0dbbf6e5afb63cda329dd8b5a339792bec9a4c/_data/
      test.txt
      
    • bind mounts:可以指定存储宿主机系统的任意位置,但是在不同的文件系统下是可以移植的。

      [root@localhost ~]# docker run -it -v /opt:/opt centos:7 /bin/bash
      #将容器下的opt挂载到宿主机下的opt
      
    • tmpfs:这种只是挂载在宿主系统的内存中,不会写入宿主机的文件系统

    Volume的基本使用

    • 创建一个自定义容器卷并使用恢复
      [root@localhost ~]# docker volume create nginx-data  #创建一个容器卷
      nginx-data
      [root@localhost ~]# docker volume ls  #查看
      DRIVER    VOLUME NAME
      local      4ee786001a8145d84d5ffb5fef0dbbf6e5afb63cda329dd8b5a339792bec9a4c
      local     nginx-data
      [root@localhost ~]# docker volume inspect nginx-data  #查看容器卷的详细信息 
      [
          {
              "CreatedAt": "2021-10-21T05:46:23-07:00",
              "Driver": "local",
              "Labels": {},
              "Mountpoint": "/var/lib/docker/volumes/nginx-data/_data",  #文件位置
              "Name": "nginx-data",
              "Options": {},
              "Scope": "local"
          }
      ]
      [root@localhost ~]# docker run -d -it --name=nginx -p 8000:80 -v nginx-data:/usr/share/nginx/html    #启动容器nginx并启动端口,将nginx下的HTML映射到nginx-data 
      nginxa9ad4144d680a5fa2b958d55dec6ddff3ace0e5f1912e2d699d5913bcb6896c5
      [root@localhost ~]# docker exec -it nginx /bin/bash  #进入nginx容器
      root@a9ad4144d680:/# ls /usr/share/nginx/html/  #查看保存位置
      50x.html  index.html
      root@a9ad4144d680:/# exit  #退出
      exit
      [root@localhost ~]# docker rm -f nginx  #删除容器 
      nginx
      [root@localhost ~]# ls /var/lib/docker/volumes/nginx-data/_data/  #查看宿主机下的文件
      50x.html  index.html
      [root@localhost ~]# touch /var/lib/docker/volumes/nginx-data/_data/123  #在宿主机下的文件重新创建一个文件
      [root@localhost ~]# ls /var/lib/docker/volumes/nginx-data/_data/  #查看
      123  50x.html  index.html
      [root@localhost ~]# docker run -d -it --name=nginx2 -p 8000:80 -v nginx-data:/usr/share/nginx/html nginx  #启动新的容器nginx2并映射到同一位置
      b9d752ef99d79aeab4531266e2c446030f19a63aa61b7a1bbaa01df13dee19c4
      [root@localhost ~]# docker exec -it nginx2 /bin/bash  #启动进入
      root@b9d752ef99d7:/# ls /usr/share/nginx/html/  #查看文件
      123  50x.html  index.html
      
    • 清理卷
      [root@localhost ~]# docker volume rm nginx-data
      

    Bind Mounts的基本使用

    • 使用卷创建一个容器
      [root@localhost ~]# docker run -d -it --name=nginx -p 800:80 -v /wwwroot:/usr/share/nginx/html nginx
      406ff46c41e8a58afbd4331dc6cd5a8b58071435ab689c6e80f3670887569647
      [root@localhost ~]# docker exec -it nginx /bin/bash
      root@406ff46c41e8:/# ls /usr/share/nginx/html/
      root@406ff46c41e8:/#   #并不是什么也没有只是被隐藏了
      #没有/wwwroot这个目录会自动创建,此时挂载的默认权限是读写(rw)
      root@406ff46c41e8:/usr/share/nginx/html# touch 1.txt  #创建一个文件
      root@406ff46c41e8:/usr/share/nginx/html# exit
      [root@localhost ~]# ls /wwwroot/  #查看
      1.txt
      [root@localhost ~]# docker inspect nginx  #查看详细信息
      "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/wwwroot",  
                    "Destination": "/usr/share/nginx/html",  #挂载点
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
      #销毁容器后文件还在
      

    数据卷容器

    • 命令:--volumes-from 就是通过数据卷容器进行多个容器使用
      docker run -it -v /宿主机目录:镜像目录 --name=目录名 镜像名 /bin/bash  #创建一个数据卷挂载到宿主机目录下
      docker run -it --volumes-from 目录名 --name 容器1 镜像1 /bin/bash  #进入容器1
      touch   #创建一个文件
      
      docker run -it --volumes-from 目录 --name 容器2 镜像2 /bin/bash  #进入一个新的容器并且和上一个镜像容器挂载到同一宿主机目录下
      查看文件
      
  • 相关阅读:
    百度员工揭秘百度八月最新优化的算法《绝密资料》
    解决IE8兼容问题只需要一句简短的代码
    选择Xen与OpenVZ哪种虚拟机做的VPS比较好?
    Windows VPS出现磁盘不足解决方法
    JiaSale 购物按钮 WordPress 插件:让你博客瞬间变成电商网站
    tb
    滚动marquee语法
    Change the marquee directions on button click left and right
    iOS多线程 GCD常见用法
    swift 中关于open ,public ,fileprivate,private ,internal,修饰的说明
  • 原文地址:https://www.cnblogs.com/wml3030/p/15435402.html
Copyright © 2011-2022 走看看