zoukankan      html  css  js  c++  java
  • Docker从入门到精通(七)——容器数据共享

    什么是容器数据共享?简单来说就是容器与容器之间数据共享,容器与宿主机数据共享。

    1、为什么需要数据共享?

    ①、数据持久化

    比如我们有一个MySQL集群,通过容器启动,那么项目运行过程中的数据是保存在容器中的,假设容器被删除了,数据就丢失了,如果没有数据共享,那你就只能删库跑路了。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6uywFyTL-1638886338448)(https://gitee.com/YSOcean/typoraimg/raw/master/image%5Cdocker/image-07-00.gif)]

    而有了数据共享,你就可以打通容器和宿主机的数据联通,将容器中的数据同步到宿主机,即使容器删除了,数据还是在本地的。

    ②、同步内容

    前面的教程,我们每次要修改容器里面的内容,都得进入到容器中,而实际生产环境容器都是有很多个的,一个个修改,大家不用干活了。

    那么你想不想在本地修改了,直接同步到容器?想就接着往下看。

    2、命令挂载

    docker run -it -v 宿主机目录:容器目录

    比如我们将宿主机下面的 /home/webapps 目录挂载到Tomcat容器的 /usr/local/tomcat/webapps

    docker run -it -v /home/webapps:/usr/local/tomcat/webapps -p 8083:8080 --name tomcat03 tomcat:latest /bin/bash

    我们在容器的 /usr/local/tomcat/webapps 目录下新建 a.txt 文件,会在宿主机 /home/webapps 目录下找到这个文件;

    同理在宿主机的 /home/webapps 目录下新建 b.txt 文件,你会在容器的 /usr/local/tomcat/webapps 目录下也能找到。

    这样就完成了宿主机和容器文件目录的同步操作。

    ①、即使容器停止(不是删掉),宿主机挂载目录变动了,再次启动容器,宿主机改动还是能够同步到容器的。

    ②、容器删掉,宿主机挂载目录不会被删掉。

    3、检查挂载是否成功

    docker inspect 容器id

    4、匿名挂载和具名挂载

    4.1 匿名挂载

    docker run -v 容器内路径

    比如给一个Tomcat容器匿名挂载:

    docker run -d -P -v /usr/local/tomcat/webapps tomcat:8.0

    然后通过 docker inspect 容器id,查看挂载情况:

    Name 属性为一长串数字的一般都是匿名挂载,可以到下面的Source属性指定的目录找到宿主机挂载目录。

    4.2 具名挂载

    docker run -v 卷名:容器内路径

    指定Tomcat挂载名称为 tomcatVolumeUrl

    docker run -d -P -v tomcatVolumeUrl:/usr/local/tomcat/webapps tomcat:8.0

    同样通过 docker inspect 容器id查看:

    5、共享容器进行挂载

    大家有没有发现一个问题,通过上面的命令进行数据共享,如果我们有多个容器,都需要挂载一个目录,但是挂载过程中,有一个容器命令目录写错了,那就会造成容器数据不同步,如何解决这个问题呢?

    答案就是创建一个共享容器,创建共享容器的同时进行目录挂载,然后别的容器和这个共享容器关联即可。

    实例演示:

    ①、宿主机创建目录

    我们在 /home 下创建 /share_volume 目录,然后在这个目录下新建 index.html 文件,里面就一句 hello docker!!!。

    ②、创建共享容器

    docker create --name tomcat_share -v /home/share_volume:/usr/local/tomcat/webapps tomcat:latest /bin/true

    ③、创建实际容器

    创建的同时指定和共享容器关联。

    docker run -d -p 8081:8080 --volumes-from tomcat_share --name tomcat01 -d tomcat

    docker run -d -p 8082:8080 --volumes-from tomcat_share --name tomcat02 -d tomcat

    上面启动了两个容器,会发现更改宿主机的/home/share_volume 目录内容,两个容器的/usr/local/tomcat/webapps 目录内容都会改变。

    作者:IT可乐

    资源:微信搜【IT可乐】关注我,回复 【电子书】有我特别筛选的免费电子书。
    本文版权归作者所有,欢迎转载,但未经作者同意不能转载,否则保留追究法律责任的权利。
  • 相关阅读:
    Python 最强 IDE 详细使用指南!-PyCharm
    Python中最常用的字符串方法!
    转:用 Python 一键分析你的上网行为, 看是在认真工作还是摸鱼
    python中hasattr()、getattr()、setattr()函数的使用
    下载图片到本地,保存字符串内容到本地
    根据经纬度算出两个位置之间的距离
    根据日期获取星座和生肖
    java去除字符串的html标签
    java环信服务端注册IM代码
    linux命令
  • 原文地址:https://www.cnblogs.com/ysocean/p/15659181.html
Copyright © 2011-2022 走看看