Docker 到底是什么:用一栋楼读懂镜像、容器与 Docker Desktop

系列第一篇:先不背命令。先把 Docker 想成一栋可以快速复制、快速出租、也能随时拆除重建的大楼。

你可能遇到过这样的情况:照着教程在电脑上安装一个工具,装到一半,教程说“请先安装 Node.js、数据库、某个依赖库”,而你的电脑里版本又不一样。最后不是工具没启动,就是启动了但和教程画面完全不同。

Docker 想解决的,正是这件事:不要让每个人都从零搭一间房,而是把一间已经布置好的房间,连同里面需要的东西一起搬过来。

先看结论:Docker 不是一个软件,而是一套“装箱和运行”的方法

Docker 里最常听到的三个词是:镜像(image)、容器(container) 和 Docker Desktop / Docker Engine。如果直接背定义,很容易混淆;把它们放进一栋楼里就简单很多。

Docker 概念 生活中的类比 真正的技术含义
镜像 Image 房屋的施工图 + 统一装修包 一个只读模板,包含程序、依赖、默认文件和运行环境。
容器 Container 按施工图实际搭好的、已经开门的房间 从镜像创建出的运行实例。每个容器有自己的进程、文件系统和网络空间。
Docker Engine 物业的施工与调度系统 负责拉取镜像、创建、运行、停止和删除容器。
Docker Desktop 物业前台 + 管理面板 Windows/macOS 上提供 Docker Engine、图形界面和常用集成的桌面工具。
一句话记忆:镜像是“房间说明书”,容器是“正在使用的房间”,Docker 是“负责把房间建起来并管理它的物业”。

为什么不直接安装软件?

假设你想在电脑上运行 n8n。传统安装方式像是自己装修一间房:先装运行环境,再装 n8n,再处理数据库、权限、版本和系统差异。Docker 的方式则像是从物业那里领取一套标准房:房间内已经放好了必要设备,你只需要决定它开在哪一层、门牌号是多少、数据放到哪里。

这并不代表 Docker 没有学习成本。它只是把“散落在很多安装步骤里的复杂性”,集中到了几个可以重复使用的概念中:镜像、容器、端口、网络和数据卷。学会这几个概念后,你不只会部署 n8n,也更容易部署其他工具。

第一步:安装 Docker Desktop,实际上发生了什么?

在 Windows 或 macOS 上,建议先安装 Docker Desktop。安装完成后,你会得到一个图形界面,同时也会得到终端里可使用的 docker 命令。

打开终端,输入:

docker version

如果能看到 Client 和 Server 两部分信息,说明“物业前台”和“后端调度系统”都已经正常工作。只看到 Client、却提示无法连接 Server,通常表示 Docker Desktop 没有启动,或者它还在初始化。

新手常见误解:Docker Desktop 是不是我要部署的应用?

不是。Docker Desktop 是管理工具,类似物业管理处;n8n、PostgreSQL、Uptime Kuma 这些才是你真正住进楼里的“房间”。关闭 Docker Desktop 后,容器通常也无法继续由本机管理,因此本地部署时要保证它处于运行状态。

第二步:亲手启动第一个容器

先运行一个官方演示镜像:

docker run --rm hello-world

这条命令看起来很短,背后却完成了一个完整流程。

命令片段 生活化解释 技术上真正发生的事
docker run 请物业按图纸开一间房 Docker 根据镜像创建并启动容器。
hello-world 这间房采用哪一套样板装修 Docker 使用名为 hello-world 的镜像。
--rm 参观结束后立即退房,不保留房间 容器退出后自动删除。

第一次运行时,你往往会看到类似 Unable to find image locally 的提示。这不是报错。它只是说:本地仓库还没有这套样板房,Docker 正在从镜像仓库下载它。下载完成后,Docker 用镜像创建一个临时容器,打印欢迎信息,然后因为 --rm 自动清理这个容器。

镜像与容器为什么一定要分开?

假设你有一张“咖啡店标准装修图”。同一张图可以开三家咖啡店:第一家在一楼,第二家在二楼,第三家只用于测试。三家店都来自同一张图,却是互相独立的实体。

Docker 也是一样:一个镜像可以创建多个容器。镜像保持不变,容器各自运行、停止、删除。这样做的好处是,当某个容器配置乱了,你通常不需要重新安装整套软件;删除这一个容器,再根据同一镜像创建一个新的即可。

不过,这里马上会出现一个重要问题:房间拆掉后,里面的资料怎么办? 这就是后面“数据卷”的主题。先记住:容器适合承载程序本身,不适合当作唯一的数据仓库。

第三步:看看“正在营业的房间”

运行下面这条命令:

docker ps

它会列出正在运行的容器。你可以把输出理解为物业的“当前入住名单”:哪间房在运行、用了什么镜像、开放了哪些端口、名称是什么。

想看包括已停止容器在内的所有记录,则使用:

docker ps -a

新手经常把“镜像没有了”和“容器停止了”混为一谈。其实容器停止,像是房间关门;镜像仍然在本地,像施工图仍在档案室。你可以用下面命令查看本地镜像:

docker images

本篇必须建立的边界感

容器不是虚拟机。虚拟机更像是把一整栋小楼复制出来,连同自己的操作系统一起运行;容器更接近在同一栋大楼中划分出的独立房间,隔离的是应用运行环境和进程。这个比喻不需要理解到内核层面,但足以帮助你判断:Docker 擅长快速、可复制地运行应用;它不是“安装了 Docker 就自动解决所有网络、数据和安全问题”。

Docker 官方把容器描述为相互隔离的进程环境;这种隔离让不同组件可以各自运行,也正是后续端口发布和网络配置存在的原因。1

跟做练习:用 Nginx 开一间真正能访问的房间

执行:

docker run -d --name my-first-web nginx

这次与 hello-world 的区别是:

  • -d 表示后台运行。像店铺开门后,物业不用一直站在门口等着。
  • --name my-first-web 是给容器取一个容易记的名字。
  • nginx 是镜像名,里面包含一个 Web 服务。

然后运行:

docker ps

你会看到 my-first-web 正在运行。但此时你还不能在浏览器打开它,因为它的“房间门牌”尚未对楼外公布。下一篇会专门解释:为什么服务明明在运行,却打不开;以及 5678:5678 到底是两扇什么门。

练习结束后,可以清理:

docker stop my-first-web
docker rm my-first-web

常见问题:看到这些提示时,不要慌

看到的情况 它真正说明什么 先这样处理
docker: command not found 终端找不到 Docker 命令 确认 Docker Desktop 已安装;安装后重新打开终端。
Cannot connect to the Docker daemon 管理界面或 Docker Engine 未启动 打开 Docker Desktop,等待状态显示正在运行后重试。
Unable to find image locally 本地没有该镜像 正常提示,Docker 会尝试下载;检查网络即可。
容器一启动就退出 房间里的主程序执行完了或运行失败 用 docker ps -a 找到容器,再用 docker logs 容器名 查看原因。

下一篇预告

下一篇我们把镜头从“房间怎么建”移到“房间怎么被找到”。你会彻底看懂 5678:5678:左边和右边为什么可以不同;为什么 n8n 在容器里监听 5678,浏览器却未必能打开;以及两个容器想“聊天”时,到底怎样把电话线接上。

参考资料

1.Docker Docs — Publishing and exposing ports