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

相关推荐
大田斗小木子2 小时前
Docker学习
学习·docker·容器
莫得等待3 小时前
kubernetes架构
容器·架构·kubernetes
铁板鱿鱼1404 小时前
docker基本(仅供自己参考)
运维·docker·容器
江池俊5 小时前
本地快速部署一个简洁美观的个人Halo博客网站并发布公网远程访问
docker·个人博客
admin_2336 小时前
docker入门总结(附错误处理,持续更新)
运维·docker·容器
linux修理工6 小时前
docker desktop windows stop
docker
小魏冬琅6 小时前
Docker 进入容器并运行命令的方法
运维·容器
Ceder1c6 小时前
【已解决】Linux ubuntu 20.04 docker 不需要sudo权限
linux·ubuntu·docker
hybaym6 小时前
Docker修改默认的存储路径
docker
EricWang13588 小时前
【无标题】
docker