当前位置: 首页 > article >正文

Docker深度解析:运行原理

Docker run 运行原理:

  1. 例:docker run  tomcat
  2. 简单描述:
    1. 首先会从本地获取 Tomcat 的镜像文件,如果本地没有该镜像则会去阿里云仓库创建查找该镜像文件
    2. 如果阿里云仓库也没有改镜像文件,则会报错找不到镜像文件
    3. 如果有镜像文件,获取到镜像文件后直接运行
  3. 详细描述:
    1. docker 在本机缓存中查找 Tomcat 镜像文件,如果本地存在该镜像文件,则该镜像文件作为模板在容器中运行
    2. 如果本地缓存中没有 Tomcat 镜像文件,则会从 docker 或者加速镜像中查找,如果查找不到的话,则返回错误查找不到该镜像
    3. 如果能查找到该镜像,则以该镜像文件作为模板运行

Docker 镜像原理:

  1. 镜像:
    1. 镜像是一种轻量级、可执行的独立软件包,用来打包运行环境和基于环境的开发软件,它包含运行某个软件所需的内容,包括代码,运行时:库、环境变量和配置文件
    2. 镜像文件的组成通过 Union fs
    3. 运行我们的 Tomcat 镜像文件
  2. Tomcat 镜像文件:
    1. 依赖与 JDK 和 Linux 服务器
    2. Tomcat 镜像文件包含 JDK 依赖镜像
    3. 底层 dockerfile :描述配置 JDK 环境

镜像加载的原理:

  1. Linux 文件系统由 bootfs 和 rootfs 两部分组成
    1. bootfs:包含 bootloader(引导加载程序) 和 kernel(内核)
    2. rootfs:root 文件系统,包含的就是典型 Linux 系统中的 /dev,/proc,/etc 等标准目录和文件
    3. 不同的 Linux 发行版,bootfs 基本一样,而 rootfs 不同,如 ubuntu,centos 等
  2. Docker 镜像底层实际上有很多个不同的联合文件系统组成的
    1. 最底层:bootf,并使用宿主机的 bootfs(复用)
    2. 第二层:root 文件系统 rootfs,成为 base image
    3. 第三层:Union fs
    4. 在网上就可以叠加其他镜像的文件
  3. 统一文件系统(Union File System):
    1. 能够将不同层整合成一个文件系统,这些层提供了一个统一的视角,隐藏多层的存在,我们看来只是存在一个文件系统
    2. 所以当我们安装的 Tomcat 镜像文件大小是 600 多MB,是因为里面还包含了 JDK 和 CentOS 的镜像。而 CentOS 镜像复用了宿主机的 bootfs,下载的只有 rootfs,所以文件就会小很多
    3. 所以 Tomcat > JDK > CentOS ,整个文件向外暴露就是 600+ MB
  4. 镜像只读:
    1. 当从一个镜像启动容器时,Docker 会在镜像上面加载一个可读可写的文件系统作为容器运行

Docker Commit:

  1. 主要作用:
    1. 根据当前容器制作为镜像文件
  2. 流程:
    1. 下载镜像文件,如:docker commit tomcat8.0
    2. 运行 tomcat8.0 镜像文件,进入容器中
    3. 在 tomcat webapps 目录中新增 boyatop 文件夹,创建文件 index.html
    4. 书写内容:echo "boyatop" >> index.html
    5. 将当前容器内容根据模板制作为镜像文件
    6. docker commit 提交容器副本使之成为一个新的镜像
    7. 命令:docker  commit -m  "提交的描述信息" -a "作者"  容器 ID  要创建的目标镜像:标签名

Docker 数据卷:

  1. 基本概念:
    1. 数据卷就是宿主机上的一个文件或目录
    2. 当容器目录和数据卷(宿主机) 目录绑定,双发修改会立即同步操作
    3. 一个数据卷可以被多个容器同时挂载
    4. 数据卷作用:容器数据的持久化,外部机器和容器间通信,容器之间数据交换使用  -v  命令
  2. 数据卷添加的方式:
    1. 容器内与宿主机实现数据的共享
    2. 方式一:
      1. 直接命令形式添加:docker  run -it -v 宿主机绝对路径目录:容器内目录  镜像文件名
    3. 方式二:Dockerfile 方式添加
  3. volumes-from:
    1. 容器间传递共享数据

http://www.kler.cn/a/534270.html

相关文章:

  • 【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析
  • Java进阶笔记(中级)
  • 【数据分析】豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)
  • 企业高效管理策略中的关键一环:WorkWin 监控上网时间的软件的效能剖析
  • Java集合框架
  • macos系统jmap执行异常
  • C++SLT(三)——list
  • python-leetcode-验证二叉搜索树
  • 基于微信小程序的消防隐患在线举报系统设计与实现(LW+源码+讲解)
  • “message“: “类型注释只能在 TypeScript 文件中使用
  • 网络安全—DDoS攻防
  • 【实用小技巧】如何不更新application.yml而更新spring的配置
  • 力扣-哈希表-454 四数相加Ⅱ
  • 中位数定理:小试牛刀> _ <2025牛客寒假1
  • 工作流项目BPMN.JS_Question梳理
  • 防孤岛保护装置在分布式光伏并网中的应用
  • 【深度学习框架】MXNet(Apache MXNet)
  • 体验 DeepSeek 多模态大模型 Janus-Pro-7B
  • 浙江安吉成新照明电器有限公司分布式光伏发电项目--安科瑞Acrel-1000DP分布式光伏监控系统
  • ES6 字符串、数值、数组扩展使用总结
  • 30.日常算法
  • 【Elasticsearch】 日期直方图聚合(`date_histogram`)
  • IC卡读卡器web插件YOWOCloudRFIDReader.js
  • 基于ArcGIS的SWAT模型+CENTURY模型模拟流域生态系统水-碳-氮耦合过程研究
  • C# Monitor类 使用详解
  • K8S学习笔记-------2.极简易懂的入门示例