专栏首页Jerry的SAP技术分享用一个实际例子理解Docker volume工作原理
原创

用一个实际例子理解Docker volume工作原理

要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理。Docker镜像是由多个文件系统的只读层叠加而成。当一个容器通过命令docker run启动时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,但是该文件的只读版本依然存在,只不过已经被读写层中该文件的副本所隐藏。

当删除Docker容器,并通过该镜像重新启动时,之前在读写层的更改将会丢失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统),简称UnionFS,它用到了一个重要的资源管理技术,叫写时复制。写时复制(copy-on-write),也叫隐式共享,是一种对可修改资源实现高效复制的资源管理技术。对于一个重复资源,若不修改,则无需立刻创建一个新的资源,该资源可以被共享使用。当发生修改的时候,才会创建新资源。这会大大减少对于未修改资源复制的消耗。其实COW这个概念对编程人员来说一点也不陌生,广泛用在各种领域,比如ABAP里对于内表(Internal table)的拷贝动作,Java字符串的拷贝实现等等。Docker基于UnionFS去创建containers。

我们下面看一个实际例子。

使用命令行docker run --help查看这个命令的帮助文档。 -h 的作用是指定容器的主机名。

使用命令行创建一个新的容器:

docker run -it --name jerry-container-test -h CONTAINER -v /data busybox /bin/sh

名称为jerry-container-test, 用-v创建了一个volume /data

创建完毕之后,在容器里执行cd /data进入这个目录,这个时候还是空的。

docker ps查看容器状态:

现在我想知道主机上为了实现这个volume,使用了哪个internal目录。

用命令docker inspect jerry-container-test查看关键字"volumes":

得到了容器里/data在主机上实现的目录:

/var/lib/docker/volumes/96aa969033ee7e6d7ff607a0a47de5a5866613a422518ed3f86fee6240bae8cc/_data

现在我在主机上使用touch命令在这个目录下直接创建一个文件:

sudo touch /var/lib/docker/volumes/96aa969033ee7e6d7ff607a0a47de5a5866613a422518ed3f86fee6240bae8cc/_data/test.s

现在切换到容器里,用ls也能看到直接在主机上用touch命令在internal folder里创建的文件了。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Windows环境下,如何在Docker里运行SAP UI5应用

    本文面向的读者是对Docker技术有一些基本概念,但因为没有测试环境,所以没有动手操作过的朋友们。

    Jerry Wang
  • 容器和容器镜像的区别,您真的了解吗

    很多刚刚接触容器技术的朋友,不容易弄清楚容器,容器镜像和Docker这几个词的区别和联系。

    Jerry Wang
  • 在Kubernetes上运行SAP UI5应用(上)

    2018年只剩最后30天了。Jerry在2017年的最后一天,曾经立下一个目标:这个微信公众号在2018年保证至少每周发布一篇SAP原创技术文章。

    Jerry Wang
  • Docker实用情况的报告

    DataDog是监控应用性能的SaaS服务商,根据7000个客户的使用状况,他们总结了Docker技术实用的报告。DataDog的客户多是比较激进、敢于吃螃蟹的...

    Henry Zhang
  • Docker简介—Windows安装篇

    在笔者的测试中,真正体验到容器的轻量优点。超越虚拟机的启动速度、占用更少的内存资源、不需安装完整的操作系统。可以说,容器是云计算的未来之一。而Docker 属于...

    嘉为科技
  • Windows环境下,如何在Docker里运行SAP UI5应用

    本文面向的读者是对Docker技术有一些基本概念,但因为没有测试环境,所以没有动手操作过的朋友们。

    Jerry Wang
  • ASP.NET Core使用Docker进行容器化托管和部署

    跟着阿笨一起玩NET
  • ​k8s极简史

    Docker和K8S已经是当下运维的必备技能,无论是行业技能要求还是前沿技术领域,现在还不能很好掌握这两门技术的技术人员,在新一轮的技术迭代中将最终被抛弃。

    运维部落
  • 如何在Ubuntu 14.04上安装和使用Docker Compose

    Docker是一个很棒的工具,但要真正充分发挥其潜力,最好是应用程序的每个组件都在自己的容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以一起启动和关闭...

    小铁匠米兰的v
  • Docker专题汇总

    字母哥博客

扫码关注云+社区

领取腾讯云代金券