← 全部文章
Docker容器入门

Docker 系列(一):容器到底是什么

2026年7月28日 · 12 分钟

从一句开发者黑话说起

「在我电脑上明明是好的啊。」

几乎每个团队都被这句话折磨过。代码在你机器上跑得好好的,一到同事电脑或线上服务器 就报错——可能是 Node 版本不同、缺了某个系统库、环境变量没配、依赖版本对不上。

Docker 要解决的,就是「环境一致性」这个根本问题:把你的应用连同它运行所需的 一切(代码、运行时、系统库、配置)打包成一个标准化的「集装箱」,无论搬到哪台机器, 打开都是一模一样的环境。

容器 vs 虚拟机:本质区别

很多人第一次接触会问:这跟虚拟机(VM)有什么区别?看这张对比:

虚拟机                          容器
┌─────────────────┐            ┌─────────────────┐
│  App A  │ App B  │            │  App A  │ App B  │
├─────────┼────────┤            ├─────────┼────────┤
│ 客户机OS│客户机OS│            │  运行时依赖库    │
├─────────┴────────┤            ├──────────────────┤
│   Hypervisor     │            │  Docker Engine   │
├──────────────────┤            ├──────────────────┤
│    宿主机 OS      │            │    宿主机 OS     │
├──────────────────┤            ├──────────────────┤
│      硬件         │            │      硬件         │
└──────────────────┘            └──────────────────┘

关键差异在于:

  • 虚拟机:每个 VM 都要跑一套完整的操作系统(客户机 OS),启动要几十秒到几分钟, 动辄占用几个 GB 内存。
  • 容器:所有容器共享宿主机的内核,只打包应用和依赖,没有独立操作系统。 启动是毫秒到秒级,一个容器可能只占几十 MB。

一句话概括:虚拟机虚拟的是硬件,容器虚拟的是操作系统。 容器更轻、更快、密度更高, 一台机器能同时跑成百上千个容器。

三个必须搞懂的核心概念

学 Docker,先把这三个名词的关系理清,后面一切都好懂:

  1. 镜像(Image):一个只读的模板,包含运行应用所需的一切。你可以把它理解为 「安装光盘」或「类(class)」。比如一个 nginx 镜像里就装好了 Nginx 程序及其依赖。

  2. 容器(Container):镜像的一个运行实例。就像「对象(object)」是「类」的实例 一样。同一个镜像可以启动出很多个互相隔离的容器。容器可以启动、停止、删除。

  3. 仓库(Registry):存放镜像的地方,类似 GitHub 之于代码。最大的公共仓库是 Docker Hub。你 pull(拉取)别人的镜像,也可以 push (推送)自己的镜像。

它们的关系是:

Registry(仓库)  --pull-->  Image(镜像)  --run-->  Container(容器)
   例:Docker Hub              例:nginx:latest         例:正在运行的网站

Docker 的整体架构

Docker 采用 C/S(客户端-服务端)架构

  • Docker Client(客户端):你敲的 docker 命令,就是客户端。
  • Docker Daemon(守护进程 dockerd):真正干活的后台服务,负责构建、运行、管理容器。
  • Registry(镜像仓库):负责存储和分发镜像。

当你执行 docker run nginx 时,背后发生了这些事:

# 你敲的命令(客户端)
docker run nginx

# 背后流程:
# 1. Client 把请求发给 Daemon
# 2. Daemon 检查本地有没有 nginx 镜像
# 3. 本地没有 -> 去 Registry(Docker Hub)拉取
# 4. 基于镜像创建并启动一个容器

一个直观的例子

假设你要跑一个 Nginx 网站服务器。没有 Docker 时,你要:安装 Nginx、配置、处理依赖、 祈祷版本兼容……有了 Docker,只需一行:

docker run -d -p 8080:80 nginx

几秒后,打开 http://localhost:8080 就能看到 Nginx 欢迎页。不用安装任何东西,玩坏了 docker rm 删掉即可,宿主机干干净净。这就是 Docker 的魔力:标准、快速、隔离、可弃。

本篇小结

  • Docker 解决的核心痛点是环境一致性
  • 容器与虚拟机的本质区别:共享内核 vs 独立 OS,容器更轻更快。
  • 记牢三大概念:镜像(模板)、容器(实例)、仓库(存储分发)
  • Docker 是 C/S 架构:客户端发命令,守护进程干活,仓库存镜像。

下一篇我们动手:安装 Docker,运行你的第一个容器,掌握最常用的一批命令。

相关水晶