Docker 架构的核心逻辑是:
客户端发指令,守护进程做调度,

从仓库拉取(或本地构建)镜像,再基于镜像启动容器运行应用;

同时,容器能生成新镜像,镜像也能推回仓库共享。

用更生活化的「外卖料理」场景类比:

角色替换(对应 Docker 组件)

  • 你(用户) → Client(客户端)你是点单、操作的人,用手机(Client)发指令:“我要做黄焖鸡(docker run)”“我要把自己的配方存到平台(docker push)”。

  • 你家厨房(含冰箱、灶台) → Docker Host(主机)厨房是干活的地方:

    • 冰箱(Images 镜像存储区):存 “料理包”(镜像),比如预制的 “黄焖鸡调料包 + 食材”,只读、不变。
    • 灶台(Containers 容器运行区):拿冰箱里的料理包,现场加热(启动容器),做出一份能吃的黄焖鸡(运行程序),用完灶台可以清理(销毁容器)。
  • 外卖平台(比如美团商家后台) → Registry(镜像仓库)平台存着各种公开料理包(官方镜像,比如 “肯德基全家桶配方”),也能存你自己上传的私房配方(自定义镜像),供别人下载。

流程拆解(从 “用别人的料理包” 到 “传自己的配方”)

1. 下载料理包:docker pull(从仓库拉镜像)
  • 你打开手机(Client),下单 “黄焖鸡料理包”(发 docker pull 指令)。
  • 你家厨房(Docker Host)会去外卖平台(Registry),把 “黄焖鸡料理包”(镜像)下载到冰箱(Images 区)存着,随时能用。
2. 自己做料理包:docker build(构建镜像)
  • 如果你想做 “独家糖醋排骨”,先写一份 “菜谱”(Dockerfile):“排骨 + 醋 + 糖 +... 步骤 123”。
  • 用手机(Client)发 docker build 指令,厨房(Docker Host)就按照菜谱,把排骨、调料打包成新的 “糖醋排骨料理包”(镜像),存在冰箱(Images 区)。
3. 做菜吃:docker run(启动容器)
  • 你想吃饭了,在手机(Client)点 “用黄焖鸡料理包做菜”(发 docker run 指令)。
  • 厨房(Docker Host)从冰箱(Images)拿出料理包,放到灶台(Containers)加热,做出一份能吃的黄焖鸡(容器运行程序,提供服务)。
  • 吃完把灶台清理了(容器销毁),但冰箱里的料理包还在(镜像不变),下次还能做。
4. 分享配方:docker push(推送镜像到仓库)
  • 你觉得 “糖醋排骨料理包” 太好吃,想分享给朋友,就用手机(Client)发 docker push 指令。
  • 厨房(Docker Host)把冰箱里的 “糖醋排骨料理包”(镜像)推送到外卖平台(Registry),别人就能下载你的配方做菜了。

核心概念再对应(彻底打通)

  • 镜像(Images) = 料理包:只读、固定的 “配方 + 食材”,存着程序运行需要的所有东西(代码 + 依赖 + 环境)。
  • 容器(Containers) = 灶台做菜的过程:基于料理包(镜像)临时创建,用来实际运行程序,用完即删(但料理包还在)。
  • Registry(仓库) = 外卖平台:存各种公开 / 私有料理包(镜像),支持下载(pull)和上传(push)。
  • Docker Host(主机) = 你家厨房:统筹 “存料理包(镜像存储)” 和 “做菜(容器运行)” 的地方。
  • Client(客户端) = 你的手机:发指令的工具,让厨房干活(build/pull/run/push)。

Docker 本质是一套 “标准化料理系统”:用镜像(料理包)保证 “配方一致”,用容器(临时做菜)保证 “不污染环境”,用仓库(外卖平台)实现 “配方共享”,整个流程让程序运行像 “做菜” 一样简单、可控 。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐