镜像就是安装包,容器就是运行起来的程序:镜像为只读静态模板,含代码、环境、依赖;容器是其可写运行实例,具独立进程、网络与生命周期;仓库则为分发镜像的应用商店。
镜像就是安装包,容器就是运行起来的程序——这个类比最直白,也最经得起推敲。
镜像 = 安装包(静态、只读、可复用)
就像你下载的 wechat_setup.exe 或 office_2024.dmg,Docker 镜像也是一个完整打包好的“软件交付物”:
- 它包含应用代码、运行环境(比如 Python 3.11 或 OpenJDK 17)、系统依赖(如 libc)、配置文件,甚至精简版操作系统(如 Alpine Linux)
- 你不能直接在镜像里改代码或删日志——它天生只读,就像双击前的 .exe 文件,本身不会执行也不会变化
- 同一个镜像可以启动无数次,生成多个互不干扰的容器,就像一份安装包能在十台电脑上分别安装微信
- 它按层存储(OS 层 → 运行时层 → 应用层),修改某一层只需重做上面几层,省空间又快
容器 = 正在运行的程序(动态、可写、有生命周期)
当你双击安装包,弹出登录窗口、开始收消息、编辑文档——那一刻的微信,就是容器:
- 容器启动后,在镜像最上方自动挂载一个可读写层,所有运行时产生的数据(日志、上传文件、数据库变更)都写在这里
- 每个容器拥有独立的进程空间、网络栈和文件系统,A 容器崩了不影响 B 容器,就像关掉一个 Chrome 窗口,其他标签页照常工作
- 它轻量、秒级启停:不是虚拟机,不模拟硬件,只是被隔离的普通 Linux 进程
- 默认是临时的——
docker stop后状态暂停,docker rm就彻底清空,但镜像还在,随时能再拉起一个一模一样的新容器
仓库 = 应用商店(存镜像、供分发)
你不用自己写微信安装包,去官网或应用商店下载就行。Docker 仓库干的就是这事:
- Docker Hub 是官方公共仓库,类似 App Store,有 nginx、redis、mysql 等成千上万个现成镜像
- 企业常用私有仓库(如阿里云 ACR、Harbor),把内部服务打包上传,团队内安全共享
-
docker pull是“下载安装包”,docker push是“上传自制安装包”,整个协作流程清晰闭环
三者串起来就是一个完整动作流
想跑一个博客系统?
- 先去 Docker Hub 拉镜像:
docker pull ghost:latest - 再基于它 启容器:
docker run -d -p 2368:2368 --name my-blog ghost:latest - 这时你就有了一个正在监听 2368 端口的 Ghost 博客——它就是容器,而 ghost:latest 是它的模板
- 哪怕服务器重装系统,只要装好 Docker,
docker pull+docker run两步,博客立刻原样复活


















