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  #进入一个新的容器并且和上一个镜像容器挂载到同一宿主机目录下
    查看文件
    
原文地址:https://www.cnblogs.com/wml3030/p/15435402.html