• 4、Docker数据管理


    一、挂载类型

    1、volumes

    Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。

    使用场景:将容器中的数据持久化到宿主机,比如容器是mysql,容器重启后就没数据了,此时需要保存到宿主机上。

    2、bind mounts

    将宿主机上的任意位置的文件或者目录挂载到容器中。

    使用场景:容器使用一些宿主机上的文件或目录。比如zabbix agent 他需要采集宿主机上的proc目录对其进行监控。

    3、tmpfs

    挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久化到任何位置,可以使用tmpfs,同时避免写入容器可写层,以提高性能。

    使用较少。

     

     

     二、volumes

    1、创建和查看volume

     

    2、使用vloume

     注意:也可以使用-v的方式,是老的方式。

    docker run -d --name lnmp_web03 -p8889:80 -v nginx_root:/usr/share/nginx/html nginx

    3、验证

    修改主页

     查看主页

    直接修改/var/lib/docker/volumes/nginx_root/_data数据,就是修改的容器的数据,当容器挂掉后,我们重新再启动一个新的容器即可。这就是volume的好处啦。

     

    三、bind mounts

    bind方式和volume不同之处是:bind方式是直接将宿主机上的某个目录作为源。此目录必须存在,不然会报错。

    1、bind方式创建容器

     

     注意:

    1、如果源文件/目录没有存在,不会自动创建,会抛出错误。

    2、如果挂载目标在容器中非空目录,则改目录现有内容将被隐藏。

    3、使用另外一种方式使用bind

     docker run -d --name lnmp_ggg -p8889:80 -v /mnt:/usr/share/nginx/html nginx

    2、查看容器

    容器里面本来是有内容的,挂载源文件后,会被覆盖,现有内容隐藏起来。

     

    3、编写主页

     

    4、验证

    5、查看源目录 

     

    四、总结

    1、volume特点

    • 多个运行容器之间共享数据。
    • 当容器停止或被移除时,该卷依然存在。
    • 多个容器可以同时挂载相同的卷。
    • 当明确删除卷时,卷才会被删除。
    • 将容器的数据存储在远程主机或其他存储上。
    • 将数据从一台dokcer迁移到另外一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes)
    • volume最大的特点:容器初始化时,容器的某个目录映射到宿主机,也就是把容器的数据持久化到volume上。container =>docker host
    • 使用命令创建一个volume后,系统会在/var/lib/docker/volume/下面生成一个volume,然后容器的数据会映射到宿主机的volume下。主要用于容器数据的持久化。

    2、Bind Mounts特点

    • 从主机共享配置文件到容器,默认情况下,挂载主机resolv.conf到每个容器,提供DNS解析。
    • 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker上构建Maven项目时,容器都可以访问构建最新的项目包。
    • 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时。
    • Bind的最大特点是:容器初始化时,宿主机上的某个目录映射到容器的dst目录,并且dst目录原本有内容也会被覆盖掉,本质是宿主机的volume映射到容器。docker host=>container
    • 将宿主机的某个文件目录映射到docker容器,如果容器对应目录不为空,则会被宿主机目录下的内容覆盖掉!

    总结:

    volume适应于多个容器共享数据,方便容器数据持久化!比如Mysql数据库进行数据持久化。

    Bind Mounts适应于宿主机和容器共享文件!比如一个网站要经常更新,可以使用Bind方式,每次提交最新的代码,用户访问的也是最新的。

  • 相关阅读:
    【MSSQL】MSSQL还原单mdf文件报1813错误
    【JSP】JSP基础学习记录(二)—— JSP的7个动作指令
    【JSP】JSP基础学习记录(一)—— 基础介绍以及3个编译指令
    【Other】U盘FAT32转NTFS且无数据丢失
    python map()
    python关于分割与拼接的那些事
    python shutil.copy()用法
    python enumerate用法
    工作中遇到一些难题1_5
    廖雪峰读书笔记_文件读写总结_2016_12_23
  • 原文地址:https://www.cnblogs.com/skyflask/p/10015580.html
Copyright © 2020-2023  润新知