zoukankan      html  css  js  c++  java
  • 第7章 数据持久化与volume的基本使用

    数据持久化介绍

      在docker中若想真的实现数据持久化(容器结束但是数据不会被销毁),需要将数据从宿主机挂载到容器中,目前dockers提供三种不同的方式将数据从宿主机挂载到容器中

    数据挂载在容器中的方法

      1.数据卷:dockers会管理宿主机文件系统的一部分资源,默认位于/var/lib/docker/volumes/目录中:(最常用的方式)

    • 在容器中创建一个文件
      [root@localhost ~]# docker run -it -v /opt/ centos /bin/bash [root@73ca6f2ec4b2 /]# touch /opt/Carrie.txt [root@73ca6f2ec4b2 /]# ls /opt/ Carrie.txt 在宿主机上查看文件 [root@localhost ~]# ls /var/lib/docker/volumes/c1b90a7cf9f76e59df27711fe4b86cb68ea3bf76d3dcf54bd8ce34fdaf7e1a74/_data Carrie.txt

      2.bind mounts :意为着指定存储在宿主机的任意位置

        但是这种方法在不同的宿主机系统之间是不可移植的,bind mounts所指定的host目录不一样,这也是为什么bind mounts不能出现Dockerfile中的原因,因为会导致Dockerfile无法移植。

      3.tmpfs:挂载存储在宿主机系统的内存中,一般不用,容易丢失数据

    volume的基本使用

      1.自己制定一个容器卷

    • 虽然是个容器,但是提供了卷的功能
      [root@localhost ~]# docker volume create nginx_data
      nginx_data
      [root@localhost ~]# docker volume ls
      DRIVER              VOLUME NAME
      local               c1b90a7cf9f76e59df27711fe4b86cb68ea3bf76d3dcf54bd8ce34
      local               c1c87a0a98cfa3e78931e4b80802de51eb39c4acbc3564cbe22922
      local               c40e51083de4b800026f91a15838b727100bfdc8cc5e618d116b79
      local               ea3edafb5643ef8073665cc70c6bf6f7d043e4d94c383641af3f94
      local               nginx_data
      
    • 2.查看容器卷的详细信息

    • [root@localhost ~]# docker volume inspect nginx_data
      [
          {
              "CreatedAt": "2020-12-06T20:40:53+08:00",
              "Driver": "local",
              "Labels": {},
              "Mountpoint": "/var/lib/docker/volumes/nginx_data/_data",
              "Name": "nginx_data",
              "Options": {},
              "Scope": "local"
          }
      ]
      
    • 自己创建容器卷有个好处就是存放的地址不是ID号,能够更好利于找到文件,便于管理

    • [root@localhost ~]# docker run -d -it --name=nginx -p 8000:80 -v nginx_data:/usr/share/nginx/html nginx
      8e212642347b20b7091a0cd4256f8e7de56a9969253d451042d785cc3eb14e6c
      [root@localhost ~]# ls /var/lib/docker/volumes/nginx_data/_data/
      50x.html  index.html

    Bind Mounts的基本用法

    •  相当于打通一条通道,缺点是不可移植,无法跨操作系统

      创建容器并映射目录
      
      [root@localhost ~]# docker run -d -it --name=nginx-4 -p 801:80 -v /www/lib/root/:/usr/share/nginx/html nginx
      
      进入容器创建文件,要测试宿主机是否成功创建相同文件
      
      [root@localhost ~]# docker exec -it 3912 /bin/bash
      root@3912be3b20b3:/# echo "I am Carrie " > /usr/share/nginx/html/index.html
      
      
      测试
      [root@localhost ~]# cat /www/lib/root/index.html
      I am Carrie 
      

    -v 的三种玩法

    • 1.默认的挂载进行映射
      [root@localhost ~]# docker run -it -v /opt/ centos /bin/bash
      [root@localhost ~]# ls /var/lib/docker/volumes/c1b90a7cf9f76e59df27711fe4b86cb68ea3bf76d3dcf54bd8ce34fdaf7e1a74/_data
      Carrie.txt
      2.创建容器卷的挂载进行映射
      [root@localhost ~]# docker run -d -it --name=nginx -p 8000:80 -v nginx_data:/usr/share/nginx/html nginx
      [root@localhost ~]# ls /var/lib/docker/volumes/nginx_data/_data/
      3.将docker的目录映射在宿主机的目录上(不可移植性)
      [root@localhost ~]# docker run -it -v /opt/:/usr/share/nginx/html  /bin/bash
      

    数据卷容器

      就是将数据卷制作成一个容器

    • 创造一个容器卷,让它运行起来
      [root@localhost ~]# docker run -it -v /dbdata:/dbdata --name=dbdata centos /bin/bash
      [root@localhost ~]# docker container start dbdata
      dbdata
      
      创建一个容器通过容器卷运行起来,容器中会有一个目录是dbdata
      [root@localhost ~]# docker run -it --volumes-from dbdata --name test1 centos /bin/bash
      [root@1843cf161467 /]# ls
      bin	dev  home  lib64       media  opt   root  sbin	sys  usr
      dbdata	etc  lib   lost+found  mnt    proc  run   srv	tmp  var
      

        

    • 测试
    • 创建一个新的容器
      [root@localhost ~]#  docker run -it --volumes-from dbdata --name test2 centos /bin/bash
      进入dbdata就可查看文件
      [root@5356ce4ad202 /]# ls
      bin	dev  home  lib64       media  opt   root  sbin	sys  usr
      dbdata	etc  lib   lost+found  mnt    proc  run   srv	tmp  var
      [root@5356ce4ad202 /]# cd /dbdata/
      [root@5356ce4ad202 dbdata]# ls
      Carrie
      

        

     

  • 相关阅读:
    未完存储过程MySQL
    看山不是山——我们眼中的世界并不可观
    常用Linux命令
    表格行列的删除
    RFID会议签到系统总结(二十一)――服务端的通讯
    FastReport的一些另类用法
    RFID会议签到系统总结(二十二)――系统中的模式
    单元格的计算
    表格行列的移动
    RFID会议签到系统总结(十九)――单数据窗体
  • 原文地址:https://www.cnblogs.com/hanjiali/p/14094463.html
Copyright © 2011-2022 走看看