19-数据持久化-Bind Mounting

Bind Mounting 与 Data Volume区别

Data Volume 需要在 Dockerfile 内声明需要创建的 volume 目录。

Bind Mounting 则不需要在 Dockerfile 声明 volume,只需要在创建容器的时候,也就是 run 的时候声明即可。

如:

docker run -v /home/aaa:/root/aaa demo

上一节中 -v 参数是 mysql:/var/lib/mysql,冒号 “:” 左边是对 /var/lib/mysql 这个目录产生的volume起一个别名。

而在 Bind Mounting 中,-v 参数冒号 “:” 左边是本地的目录路径,右边是创建容器内的路径,做一个映射。

Bind Mounting

通过 Bind Mounting 创建的 volume,在我们修改本地的目录时,容器内对应的目录也会跟着修改,因为是同一个volume。

接下来我们通过一个实验来查看。

  1. 创建一个docker-nginx文件夹,并进入

    mkdir docker-nginx
    cd docker-nginx
    
  2. 创建Dockerfiile和index.html两个文件

    touch Dockerfile index.html
    

    修改Dockerfile文件如下:

    FROM nginx:latestWORKDIR /usr/share/nginx/htmlCOPY index.html index.html
    

    修改index.html文件如下:

    <html>
    <body><h1>Bind Mounting</h1><p>This is a demo.</p></body>
    </html>
    
  3. 创建镜像

    docker build -t vincent/my-nginx .
    
  4. 创建容器

    docker run -d -p 80:80 --name web vincent/my-nginx
    

    查看运行状态

    [vagrant@10 docker-nginx]$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    190b2e296c54        vincent/my-nginx    "nginx -g 'daemon of…"   2 seconds ago       Up 1 second         0.0.0.0:80->80/tcp   web
    

    可以看到web容器是up的。

  5. 访问本机80端口获取web容器的内容

    [vagrant@10 docker-nginx]$ curl 127.0.0.1
    <html>
    <body><h1>Bind Mounting</h1><p>This is a demo.</p></body>
    </html>
    

    curl使用http协议的时候默认是80端口,https默认是443,我们是可以不需要加端口号的。

    我们也可以在笔记本中去访问这台虚拟机的80端口服务

     vincent@dell-Inspiron-7559$: curl http://192.168.2.32
    <html>
    <body><h1>Bind Mounting</h1><p>This is a demo.</p></body>
    </html>
    

    也可以通过浏览器访问查看,ip首先要在虚拟机内通过ip a获取。

  6. 重新创建web容器并指定volume

    删除web容器

    docker rm -f web
    

    这条命令会强制删除一个正在运行的容器,不推荐使用。

    重新创建容器,并指定挂载 /home/vagrant/docker-nginx/ 目录。

    docker run -d -p 80:80 -v /home/vagrant/docker-nginx/:/usr/share/nginx/html --name web vincent/my-nginx
    
  7. 查看被挂载的目录在容器内情况

    进入web容器

    docker exec -it web /bin/bash
    

    查看 /usr/share/nginx/html 目录下有哪些内容

    root@cb7e310d02fd:/usr/share/nginx/html# ls /usr/share/nginx/html
    Dockerfile  index.html
    

    我们发现在 /home/vagrant/docker-nginx/ 文件夹内的Dockerfile文件被映射进来了。

    那我们在 /usr/share/nginx/html 文件夹内创建一个 test.txt 文件,看看是否在 外部也能看到

    touch test.txt
    

    创建好之后退出web容器,进入/home/vagrant/docker-nginx/目录下查看

    exit
    [vagrant@10 docker-nginx]$ ls
    Dockerfile  index.html  test.txt
    

    我们发现同样被映射到了外面 docker-nginx 目录下。同样我们可以测试在容器内修改 test.txt 文件看看里外是否同步。

    进入web容器

    docker exec -it web /bin/bash
    

    修改test.txt文件

    root@cb7e310d02fd:/usr/share/nginx/html# echo "1234" >> test.txt
    root@cb7e310d02fd:/usr/share/nginx/html# cat test.txt
    1234
    

    完成后我们退出容器并查看这个文件是否同步了

    exit
    [vagrant@10 docker-nginx]$ cat test.txt
    1234
    

    结果是同样发生了同步。因为我们修改的其实是同一个文件。

热更新

  1. 我们再次执行一次curl获取web内容

    [vagrant@10 flask-app]$ curl 127.0.0.1
    <html>
    <body><h1>Bind Mounting</h1><p>This is a demo.</p></body>
    </html>
    
  2. 此时我们手动修改本机目录下的index.html文件

    nano docker-nginx/index.html
    

    修改如下:

    <html>
    <body><h1>Bind Mounting</h1><p>This is a app.</p></body>
    </html>
    
  3. 验证在不重启nginx服务器的情况下是否web内容发生变化

    [vagrant@10 docker-nginx]$ curl 127.0.0.1
    <html>
    <body><h1>Bind Mounting</h1><p>This is a app.</p></body>
    </html>
    

    我们可以看到web内容已经发生了变化。

这对于开发或后续更新来说是很好的。

19-数据持久化-Bind Mounting相关推荐

  1. Docker Swarm bind 数据持久化

    Docker Swarm bind 数据持久化 bind:主要将工作节点宿主级文件或目录,同步挂载到容器中. 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节 ...

  2. docker mysql data volume_Docker 持久化存储, Data Volume/Bind Mounting

    docker容器, 再启动之后 我们可以对其进行 修改删除等等. 如果是一个数据库的容器, 里面的数据 不想随着这个容器的消失, 而消失.  就需要持久化数据存储. Data Volume 这是 do ...

  3. 从零开始学习docker(九)持久化存储和数据共享之 bind Mounting

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 数据持久化的第一种方式Data Volume 使用Data Volume: 首先在Dockerfile中定义 V ...

  4. 三剑客”之Swarm应用数据持久化管理(volume 、bind 、 nfs)

    1.前言  在上一篇文章 <"三剑客"之Swarm集群架构.集群管理 .服务管理>中,大家已了解swarm集群管理以及如何管理swarm集群中的服务.试想一下,如果sw ...

  5. Docker 的数据持久化项目实战

    文章目录 官网 概述 初探Mysql镜像容器的数据存储 镜像准备:拉取mysql镜像 docker pull mysql 启动Mysql镜像 登录Mysql镜像容器 登录mysql 容器数据存储路径查 ...

  6. redis的基本操作And数据持久化方式以及redis实现mybatis缓存

    Redis 1.NoSql # NoSql(Not Only Sql),不仅仅是sql,泛指非关系型数据库 2.NoSql的诞生 随着互联网web2.0网站的兴起,传统的关系型数据库在高并发和特大规模 ...

  7. docker容器运行mysql持久化_docker容器实现数据持久化的两种方式及其区别

    前言 这篇博文是我对docker实现数据持久化几种方式的特征进行一个总结. 在docker中,它的存储文件系统是在dockerhost上原有的xfs或ext4架设了一层文件系统:overlay2(将此 ...

  8. iOS中几种数据持久化方案总结

    概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...

  9. 数据持久化 技术比较

      [数据存储]coredata.sqlite.fmdb和sqlitepersistentobject 管理提醒: 本帖被 angellixf 从 OS X开发讨论区 移动到本区(2014-02-12 ...

最新文章

  1. python 100例(10)
  2. R语言使用caret包的findCorrelation函数批量删除相关性冗余特征、实现特征筛选(feature selection)、剔除高相关的变量
  3. P vs. NP 五十年:AI正在解决不可解问题
  4. javascript搜索框联想搜索_js实现类似于联想关键词的搜索功能(附代码)
  5. 科学家发现鱼会数学,5以内的加减法难不倒它,网友:要多吃鱼了
  6. 检查数据报:防火墙和入侵检测系统
  7. 删除有序数组中的重复项 IIPython解法
  8. 磁盘及文件系统的管理
  9. 当Java遇上机密计算,又一段奇幻之旅开始了!
  10. 自适应 响应式展示型企业通用网站源码 织梦dedecms模板
  11. [译]Java 设计模式之组合
  12. 【Android】五种常用布局方式详解(图文+示例)持续更新中...
  13. 扩展欧几里得算法(求逆元)总结
  14. 杜邦线改成焊线_做杜邦线(假)教程
  15. 卸载wps后,office图标显示异常、变成白板
  16. CCIE总结:路由器、交换机
  17. python编程语言的缺点-多种编程语言的优缺点梳理
  18. python兔子编程_Python兔子生兔子算法,编程练习题实例十一
  19. hdu(杭电oj)第一页题目题解
  20. NVIDIA卡和ATI卡的对比,以及如何判断 N卡 和 A卡 每个型号的含义:

热门文章

  1. ubuntu服务器ssh登录密码修改,Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器...
  2. 网站备案靠谱吗_网站外包靠谱吗目前都是什么价位
  3. linux桌面发展方向,观点|Linux 桌面的发展之路!
  4. python爬虫验证码的识别_Python爬虫识别验证码
  5. 订阅号 笔记记录开发 php,微信订阅号开发笔记(五)
  6. linux 线程优先级算法,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
  7. gnu.getopt java_c – 用于GNU getopt()的-W选项是什么?
  8. python 爬取贝壳网小区名称_如何使用 python 爬取全国小区名称
  9. netty java开发文档_Netty简明教学文档
  10. Jackson ObjectMapper readValue过程