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

Docker 入门教程(二):Docker 的基本原理

文章目录

  • 🐳 Docker 入门教程(二):Docker 的基本原理
    • 1. Docker 架构总览:三大核心角色
    • 2. 镜像与容器的关系
    • 3. 容器启动流程:`docker run` 背后发生了什么?

🐳 Docker 入门教程(二):Docker 的基本原理

在学习镜像与容器的命令操作之前,我们必须弄清楚:Docker 是如何运作的?容器和镜像到底是什么关系?docker run 背后到底做了什么?
这一节我们通过结构图 + 原理分析,建立起对 Docker 系统性理解的底层认知。


1. Docker 架构总览:三大核心角色

Docker 采用经典的客户端 - 服务端架构(C/S 架构),它主要由以下三部分组成:

在这里插入图片描述

1.1 Client(客户端)

客户端就是我们日常使用的命令行工具,例如:

docker build
docker pull
docker run

这些命令本质上不会直接操作容器或镜像,而是通过 HTTP API 请求把意图发送给 Docker 服务端。

1.2 Docker Daemon(服务端)

也称为 dockerd,是 Docker 的守护进程,负责实际执行一切命令,包括:

  • 拉取镜像
  • 构建镜像
  • 创建 / 启动容器
  • 管理网络、挂载、资源等

它同时维护两个最核心的资源:

  • Images(镜像):只读模板,用于创建容器
  • Containers(容器):基于镜像运行出来的隔离进程

1.3 Registry(镜像仓库)

这是 Docker 镜像的集中分发平台,默认是 Docker Hub,也可以是私有仓库(如 Harbor)。

Docker Daemon 会在执行 docker pulldocker run 时自动从 Registry 拉取镜像。


图解架构流程

+---------+           HTTP API         +-------------------------+
|  Client | ─────────────▶──────────▶ |     Docker Daemon       |
|         |                            | (dockerd)               |
| docker  |                            |                         |
| build   |                            |   +------------+        |
| pull    |                            |   |  Images    |◀───────┐
| run     |                            |   +------------+        |
+---------+                            |   | Containers |        ||   +------------+        |+-------------------------+▲│pull/push│+-------------------------------+|           Registry            ||     (Docker Hub or custom)   |+-------------------------------+

2. 镜像与容器的关系

Docker 中,镜像(Image)和容器(Container)的关系可以从两个角度来类比理解:

类比一:类 vs 实例

  • 镜像 就像一个类(Class)
    它定义了对象的结构、行为和属性,但不能直接运行。

  • 容器 就是类创建出来的实例(Instance)
    每个容器基于镜像创建,可以独立运行、修改、销毁,彼此互不影响。

类比二:安装包 vs 软件

  • 镜像 像是一个软件安装包,里面包含程序代码和运行环境。它本身是静态的、不能直接运行。

  • 容器 就是你在电脑上安装并运行起来的软件,它有自己的配置、运行数据和状态。你可以同时运行多个程序实例,它们都来源于同一个安装包。


3. 容器启动流程:docker run 背后发生了什么?

当你运行:

docker run redis

Docker 表面上只做了一件事:运行了一个 Redis 容器。
但实际上,它在背后做了一系列工作,整个过程可以拆成几个简单的步骤:

第一步:找镜像

Docker 会先检查你本地有没有 redis 镜像。

  • 有就直接用
  • 没有就从 Docker Hub 下载

第二步:创建容器

基于镜像,Docker 创建一个容器。就像“解压安装包、准备好环境”。

这一步会:准备一个独立的运行环境p;分配一个容器 ID;设置网络和存储

第三步:启动容器

Docker 会执行容器里的默认启动命令(比如 Redis 的服务器进程),让它真正“跑起来”。

此时容器就进入了运行状态(Running)。

第四步:资源隔离 & 控制(Docker 背后自动做的)

虽然我们看不见,但 Docker 还会在后台做几件重要的事:

  • 资源隔离:让容器拥有自己独立的文件系统、网络、进程空间等
  • 资源限制:防止某个容器用光 CPU 或内存
  • 文件系统挂载:用一种叫 Overlay 的方式叠加镜像和容器的文件系统,便于读写分离

相关文章:

  • 东芝e-STUDIO 2323AMW双面复印报计数器溢出故障
  • 《规则怪谈》合集
  • Kotlin环境搭建与基础语法入门
  • python pandas数据清洗
  • Python打卡:Day37
  • 黑马JVM解析笔记(四):Javap图解指令流程,深入理解Java字节码执行机制
  • 【办公类-105-01】20250626 托小班报名表-条件格式-判断双胞胎EXCLE
  • MySQL (一):数据类型,完整性约束和表间关系
  • C++智能指针概念及std::unique_ptr使用介绍
  • YOLOv10tensorRT推理代码C++
  • Apipost和Postman对比
  • Git-git worktree的使用
  • [OS_27] 现代应用程序架构 | Full System Emulation | VM | Docker
  • springcloud 尚硅谷 看到9开头
  • C++(模板与容器)
  • 【学习笔记】Dify知识库配置参数解析
  • 跨越十年的C++演进:C++14新特性全解析
  • CNN不是一个模型?
  • [特殊字符] Windows 查看端口占用及服务来源教程(以 9018 端口为例)
  • Python网安-随机密码生成器