`
JerryWang_SAP
  • 浏览: 1059815 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

用一个实际例子理解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的原创文章,请关注公众号"汪子熙":

 
0
0
分享到:
评论

相关推荐

    Docker使用OpenStack Cinder持久化 volume原理分析及实践.docx

    用户可以选择指定一个现有的目录作为 Docker Volume,或者让 Docker 自动创建一个新的空目录作为 Volume。 例如,以下命令将会把宿主机上的 `/data` 目录挂载到容器内的 `/data` 路径: ```bash docker run -v /...

    Docker Volume入门用法详解

    - **创建Volume**:使用`docker volume create`命令创建一个新的数据卷。例如,`docker volume create --name www-data`会创建一个名为`www-data`的Volume。 - **查看Volume**:使用`docker volume ls`命令列出所有...

    docker镜像分层原理.pdf

    Docker 镜像分层原理 Docker 镜像分层原理是 Docker 容器技术的核心概念之一。通过本文,我们将深入探讨 Docker 镜像分层原理的概念、...理解镜像分层原理可以帮助我们更好地使用 Docker,提高容器化的效率和灵活性。

    Docker网络原理分析

    以下是一个具体的例子,展示了如何手动构建一个Docker网络环境: 1. **启动容器**: 首先启动两个容器`docker1`和`docker2`,并指定`--net=none`以禁止Docker自动配置网络。 ``` docker run -itd --name=docker1 -...

    10张图带你深入理解Docker容器和镜像1

    于是,我花了几周的时间来学习Docker的工作原理,更确切地说,是关于Docker统一文件系统(the union file system)的知识,然后回过头来

    Docker in Docker原理与实战

    在容器内部初始化一个外部Docker守护进程。这可以通过设置环境变量`DOCKER_HOST`来实现,将其指向外部Docker守护进程的unix socket或TCP地址。 2. 挂载Docker socket 将外部Docker守护进程的socket挂载到容器内部。...

    Docker volume 挂载卷的实现方法

    但是如果我们需要修改我们的运行代码,或者有输入输出文件的时候,我们就没有办法了,每一个container运行完毕后,其分配的资源以及文件系统都会消失,那么我们就需要在本地给docker container挂载一个卷,这样在...

    Windows Docker的内部原理大胆分析

    3. LibraryOS原理:DrawBridge技术的核心是LibraryOS概念,它相当于给每个进程提供了一个薄薄的“外皮”,实质上是为两个重要的内核模式组件win32k.sys和OSKernel提供了用户模式下的独立副本。其中,win32k.sys的...

    10张图带你深入理解Docker容器和镜像 高清PDF 学习docker原理

    在学习docker的过程中,容易对镜像和容器之间的概念进行混淆。这个资料就深入docker实现原理,帮助同学打通任督二脉,从此对docker的学习游刃有余

    窥探Docker中的Volume Plugin内幕-有容云

    接下来,我们来看一下Docker如何使用Volume Plugin。Docker的Container结构中有一个名为MountPoints的map类型变量,用于存储容器中所有已挂载的Volume。MountPoint结构保存了挂载目录和Volume结构的基本信息,并管理...

    详解Docker Volume 之权限管理

    Docker Volume是一种可以被一个或多个容器共享、使用的特殊目录,它为容器...通过以上知识点的总结,可以对Docker Volume的权限管理有一个全面的理解,并在实际操作中有效避免相关问题,提高容器应用的稳定性和安全性。

    Docker 网络工作原理详解

    当Docker server也就是docker daemon启动时,会自动创建一个名字是docker0的bridge,每当docker创建一个Container时,会在主机上面创建一个名字是veth*的ethernet 端口,并把这个eth*加入到docker0的bridge,在...

    docker-volume-plugin-helloworld:Docker Volume Plugin的Hello World

    app.js是一个更完整的Volume Plugin,它使用SSHFS作为基础文件系统,并通过Volume Plugin从Docker实例化。如何设定创建一个文件helloworld.json并将其放在/etc/docker/plugins { "Name": "plugin-helloworld", ...

    blockbridge-docker-volume, Docker的Blockbridge卷插件.zip

    blockbridge-docker-volume, Docker的Blockbridge卷插件 Blockbridge Docker 插件版本 3.1Blockbridge插件可以作为 Docker 1.13 的"托管 Docker 插件",也可以作为 Docker 1.12和更高版本的"旧版插件"。 两个选项都...

    docker视频讲解,深入理解docker,docker实战

    大厂2018年,培训视频资料,完整讲解docker的使用,深入理解docker docker实战讲解

    docker原理.txt

    docker原理

    docker原理.pptx

    PPT内容为三部分—— what is Docker Docker Architecture Docker Installation

    docker-s3-volume:具有来自s3的数据量的Docker容器

    Docker-s3-volume 是一个工具,它允许Docker容器使用Amazon S3作为数据卷,实现数据在本地与云端的同步。这对于备份、恢复或者在多台机器间共享持久化数据非常有用,特别是对于那些依赖云存储服务的应用场景。 **...

Global site tag (gtag.js) - Google Analytics