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

相关推荐
K***43061 小时前
IDEA+Docker一键部署项目SpringBoot项目
spring boot·docker·intellij-idea
小雪_Snow7 小时前
CentOS 7 测试 docker 镜像源
docker·centos
wan_da_ren10 小时前
Docker安装Elasticsearch9.2.1与Kibana9.2.1 保姆教程(带验证版)
运维·docker·jenkins
Hellc00710 小时前
Docker部署BaGet私有NuGet服务器:从入门到备份恢复完整指南 二
服务器·docker·eureka
t***316511 小时前
Docker 之mysql从头开始——Docker下mysql安装、启动、配置、进入容器执行(查询)sql
sql·mysql·docker
爱喝矿泉水的猛男13 小时前
ssh远程访问另一台windows(可扩展到docker环境)
docker·ssh·zerotier
gggg远14 小时前
docker详解
运维·docker·容器
ALex_zry15 小时前
Consul全方位入门指南:第二阶段—— 实操。Consul核心功能与项目集成
运维·docker·微服务·云原生·架构
热爱学习的小怪兽16 小时前
Docker容器的一些总结
运维·docker·容器
❀͜͡傀儡师17 小时前
Docker一键部署Nexus Terminal,高颜值SSH新体验
docker·容器·ssh