作者:Carrie
出处:https://home.cnblogs.com/u/hanjiali
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

数据持久化介绍

  在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
    

      

 

 

 

posted on 2020-12-06 21:42  不吃葡萄楞吐皮  阅读(196)  评论(0编辑  收藏  举报