• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

docker - docker 如何处理多种挂载类型?

[复制链接]
菜鸟教程小白 发表于 2022-8-3 10:11:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

这篇文章有点冗长,但请耐心等待...
假设您有一个应用程序位于 /app在具有以下结构的本地(主机)文件系统中

app
|-- index.php
|-- foo
|   `-- file-h1
`-- bar
    `-- file-h2
现在假设我们有一个利用以下数据结构的图像(标记为 myrepo/app)
opt
|-- app
|   `-- foo
|       `-- file-c1
如果我们通过挂载主机的 /app 从该镜像运行容器到容器的 /opt/app如下
docker container run \
-v /app:/opt/app \
myrepo/app
容器的结果数据结构如下
opt
|-- app
|   |-- index.php
|   |-- foo       
|   |   `-- file-h1          
|   `-- bar
|       `-- file-h2 
到现在为止还挺好...
运行多个装载(绑定(bind)装载和卷)的容器
现在,假设我们要使用 两者 命名卷 data安装在 /opt/app/foo和一个 绑定(bind)安装用于安装 /app/opt/app
docker container run \
-v /app:/opt/app \
-v data:/opt/app/foo
myrepo/app
容器内的结果数据结构将是:
opt
|-- app
|   |-- index.php
|   |-- foo       
|   |   `-- file-c1          
|   `-- bar
|       `-- file-h2 
正如在各种帖子(如 thisthis )中所述,docker 安装按字典顺序执行(即最短路径优先)。据此,我希望 docker 首先执行绑定(bind)安装( -v /app:/opt/app ),然后是卷( -v data:/opt/app/foo )。
因此,我希望主机的内容 /app将替换/模糊容器 /opt/app 的内容因此 file-h1在里面 /opt/app/foo .最后,file-h1将是 copied在新创建的 data卷,该卷将安装在 /opt/app/foo 上(所以 file-h1 应该显示而不是 file-c1 )
我试图理解时提出的问题 this回答 SO



Best Answer-推荐答案


最后,在 github 用户 cpuguy83 的大量帮助下,我弄清楚了当我们尝试运行使用多个不同类型挂载的容器(例如 绑定(bind)挂载 卷 507x2)时,docker 引擎实际上做了什么例如:

docker container run \
-v /app:/opt/app \
-v data:/opt/app/foo
myrepo/app

这里要理解的重点是docker在中的进程中的两个步骤是按照以下顺序执行的:
  • 首先,它在主机文件系统( ... data/ )中为容器创建一个新的存储空间(即卷)来持久化文件,然后(因为新创建的卷是空的)它 copies 容器的文件(即 /opt/app/foo/* 中的任何内容)到卷的存储位置(... data/)
  • 然后,它按照字典顺序执行所有挂载(绑定(bind)、卷、tmpfs 挂载等......都集中在一起)(首先挂载 /app/opt/app 然后 ... data//opt/app/foo )

  • 因此,因此,当我们在示例中使用挂载运行容器时,docker 第一个 会将 file-c1 复制到主机文件系统中的 ... data/ 位置,然后 将第二个 _0x104567 的内容首先挂载到主机容器的 /app 和主机的 /opt/app (包含 ... data/ )到容器的 file-c1 覆盖/遮蔽其内容(即用 /opt/app/foo 覆盖 file-h1 )。因此,如果我们在挂载完成后查看正在运行的容器内部,结果将如下所示:
    opt
    |-- app
    |   |-- index.php
    |   |-- foo       
    |   |   `-- file-c1          
    |   `-- bar
    |       `-- file-h2
    

    关于docker - docker 如何处理多种挂载类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47795937/

    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注0

    粉丝2

    帖子830918

    发布主题
    阅读排行 更多
    广告位

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap