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

相关推荐
欧先生^_^4 分钟前
删除k8s某命名空间,一直卡住了怎么办?
云原生·容器·kubernetes
motosheep29 分钟前
关于安卓自动化打包docker+jenkins实现
android·docker·自动化
梁萌1 小时前
dify升级最新版本(保留已创建内容)
docker·升级·dify
阿湯哥3 小时前
外部访问 Kubernetes 集群中 MQ 服务的方案
云原生·容器·kubernetes
PolarisHuster5 小时前
如何查看k8s获取系统是否清理过docker镜像
docker·容器·kubernetes
matrixlzp5 小时前
K8S Secret 快速开始
云原生·容器·kubernetes
一只特立独行的猫6 小时前
Docker与Vmware网络模式的对别
网络·docker·容器
GoodStudyAndDayDayUp6 小时前
docker拉取国内镜像
运维·docker·容器
中草药z7 小时前
【Docker】Docker拉取部分常用中间件
运维·redis·mysql·docker·容器·nacos·脚本
和计算机搏斗的每一天9 小时前
k8s术语之Replication Controller
java·容器·kubernetes