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

Docker入门:容器化原理

Docker基础概念

在理解Docker之前,我们需要先了解容器与虚拟机的根本区别。容器和虚拟机都是用于实现应用程序隔离的技术,但它们的实现方式有着显著的不同。

容器与虚拟机的区别

虚拟机通过使用完整的操作系统(Guest OS)来实现隔离。在虚拟机中,一个独立的Hypervisor(或称为VMM,虚拟机监视器)负责管理多个虚拟机实例。每个虚拟机都包含自己的操作系统和应用程序,这意味着每个虚拟机都需要独立的资源,包括内核、内存、磁盘空间等。

容器则采用了一种更为轻量级的方式。它并不需要运行完整的操作系统,而是共享主机系统的内核。容器包含应用程序及其所有依赖项和运行时环境,但它们与主机和其他容器隔离开来。这种轻量级的隔离方式使得容器能够更快速地启动,更高效地利用系统资源。

为了更好地理解,做一个简单的比喻:

虚拟机就像是在一栋大楼里租赁一个独立的办公室,你需要购置自己的家具、设备,甚至安排自己的门禁系统。这个独立的办公室拥有自己的一套系统。而容器则更像是在同一层楼的开放办公区域租用一个办公桌,你共享大楼提供的基础设施,但你的桌子是独立的,你可以在上面安装自己的工作环境。

镜像与容器的关系

镜像:

镜像是一个只读的模板,包含了运行应用程序所需的所有信息,包括代码、运行时、库、环境变量和配置文件。它是一个静态的、不可改变的实体,就像是一个操作系统的快照。

容器:

容器则是镜像的可运行实例。当你启动一个容器时,Docker会在镜像的基础上创建一个可写层,这个可写层被称为容器层。容器层包含了应用程序的运行时状态,所有对文件系统和系统资源的修改都保存在这个容器层中。

  • 启动容器的过程:

    • 当你运行 docker run 命令时,Docker会根据指定的镜像创建一个新的容器实例。
    • 这个容器实例基于镜像的内容,包括文件系统、配置和元数据。
  • 镜像的不变性:

    • 镜像是只读的,一旦创建就不会被改变。这确保了在不同环境和不同阶段使用相同的镜像,实现了一致性和可重复性。
  • 容器的可写层:

    • 容器层是可写的,这意味着你可以在运行时向容器中添加新文件、修改配置、安装软件等。
    • 这种分层的机制使得容器轻巧而灵活。

Docker仓库:

Docker仓库是一个集中存储和管理镜像的地方。它可以被理解为一个拥有多个镜像版本的仓库,这些镜像可以通过标签进行版本控制。Docker仓库分为公共仓库和私有仓库,其中Docker Hub是最常见的公共仓库,供用户方便地分享和获取镜像。

Docker Hub地址:https://hub.docker.com/

Docker的工作原理

命名空间与隔离:

Docker通过使用命名空间来创造一个“小世界”供每个应用独立运行。这个小世界包括了进程、网络、文件系统等,让每个应用觉得自己是这个世界的唯一主角。

控制组与资源管理:

Docker使用控制组(cgroups)来限制每个应用对计算机资源的使用,就像分配每个学生一个固定的食物限额一样。这确保了每个应用都能公平地享受系统资源,不会因为某个应用“太贪婪”而影响其他应用。

联合文件系统:

Docker使用联合文件系统将所有的“小世界”叠加在一起,就像是把许多透明的玻璃纸叠加在一起,最终呈现出一个完整的画面。这样,镜像可以按照层级的方式存储,方便快速构建和传输。


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

相关文章:

  • python 2小时学会八股文-数据结构
  • 缓存与数据库不一致的解决方案:深入理解与实践
  • java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程
  • ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法)
  • Elastic Observability 8.16:增强的 OpenTelemetry 支持、高级日志分析和简化的入门流程
  • 随手记:简单实现纯前端文件导出(XLSX)
  • Clean 架构下的现代 Android 架构指南
  • 实验3.5 路由器的单臂路由配置
  • 装配式技术助力EHS平台系统:打造全方位的安全在线监测平台!
  • 【PTA-C语言】编程练习4 - 数组Ⅱ
  • 【面试经典150 | 二叉树】翻转二叉树
  • ubuntu内移除snap
  • VUE2+THREE.JS 按照行动轨迹移动人物模型并相机视角跟随人物
  • 智能优化算法应用:基于材料生成算法无线传感器网络(WSN)覆盖优化 - 附代码
  • Thymeleaf生成pdf表格合并单元格描边不显示
  • SpringDataJPA基础
  • Cypress:前端自动化测试的终极利器
  • Leetcode刷题笔记题解(C++):165. 比较版本号
  • 安路Anlogic FPGA下载器的驱动安装教程
  • 【mysql】下一行减去上一行数据、自增序列场景应用
  • 2023年4K投影仪怎么选?极米H6 4K高亮版怎么样?
  • Leetcode—1466.重新规划路线【中等】
  • 【PTA题目】7-7 自守数 分数 15
  • 芯知识 | 如何选择合适的单片机语音芯片?
  • 使用单例模式+观察者模式实现参数配置实时更新
  • 算术运算(这么简单?进来坐坐?)