Docker 简介
在动手装环境之前,我们先搞清楚 Docker 到底是什么、为什么这几年火得一塌糊涂、它能帮你解决什么实际问题。理解了"为什么",学起命令来才不会觉得枯燥。
Docker 是什么?
Docker 是一款容器化平台,它的核心能力是:把一个应用和它需要的所有依赖(操作系统库、运行时、配置文件、环境变量)打包成一个标准化的"集装箱"(镜像),这个集装箱能在任何装了 Docker 的机器上原样跑起来,不用关心底层是 Mac、Windows 还是 Linux。
用一句话总结它的价值:Build once, run anywhere(构建一次,到处运行)。开发人员本机跑通的镜像,测试环境、生产环境跑的是同一个镜像,从此告别"在我电脑上能跑"的扯皮。
诞生历史:从 dotCloud 到改变世界
Docker 由法国程序员 Solomon Hykes 在 2013 年 3 月首次公开发布。当时他在一家叫 dotCloud 的公司做 PaaS(平台即服务)服务,内部用 Linux 的 LXC、cgroups、namespaces 这些容器技术来隔离用户的应用。他们把这些工具封装成一个易用的产品开源出来,就是 Docker。
开源后 Docker 火速走红,创下了 GitHub 史上最快的"万星"纪录,公司也顺势改名叫 Docker Inc.。Docker 这个名字来自英文 dock worker(码头工人)+ container(集装箱)——它的吉祥物是一条鲸鱼🐳,背上驮着一堆集装箱,形象地表达"把一堆服务统一搬运"的理念。
需要说明的是,容器技术并非 Docker 原创。Linux 早就有了 LXC,Solaris 有 Zones,FreeBSD 有 Jail,Google 内部更是用了多年 Borg。Docker 的真正贡献是:把这些底层能力包装得简单到一行命令就能用,加上镜像分层、Dockerfile、Docker Hub 这一整套生态,才让容器真正普及开来。
容器 vs 虚拟机:为什么 Docker 更轻?
这是新手最常混淆的概念。两种技术都是"隔离"和"复用"的手段,但实现思路完全不同:
- 虚拟机(VM):模拟整套硬件,每个 VM 装一整套操作系统(Guest OS)。代表是 VMware、VirtualBox。优点是隔离彻底,缺点是重、慢、占资源——一个 VM 几个 GB,启动要几十秒到几分钟。
- 容器(Container):不模拟硬件,也不装独立操作系统,而是共享主机内核,只隔离进程、文件系统、网络。代表是 Docker。优点是轻、快、省资源——一个镜像几十到几百 MB,启动以秒计。
一张图直观对比三种部署方式:
# 传统部署 vs 虚拟机 vs 容器 三种方式对比
# 1. 传统部署:物理机直接装应用
# 问题:不同应用抢资源、依赖打架,换台机器就要重装一遍
# 2. 虚拟机(VM):每个 VM 自带一整套操作系统
┌─────────────────────────────────┐
│ 物理机 HOST │
├─────────────────────────────────┤
│ Hypervisor │
├────────┬────────┬────────┬──────┤
│ App1 │ App2 │ App3 │ ... │
│ Libs │ Libs │ Libs │ │
│ 完整OS │ 完整OS │ 完整OS │ │ ← 重、慢、GB级
└────────┴────────┴────────┴──────┘
# 3. 容器:共享主机内核,只隔离进程
┌─────────────────────────────────┐
│ 物理机 HOST │
├─────────────────────────────────┤
│ Docker Engine │
│ (共享内核,不重复装OS) │
├────────┬────────┬────────┬──────┤
│ App1 │ App2 │ App3 │ ... │
│ Libs │ Libs │ Libs │ │ ← 轻、快、MB级
└────────┴────────┴────────┴──────┘简单说:虚拟机是"整栋独立别墅",容器是"同一栋楼里的公寓"。一台机器能跑十几个 VM,但能跑几百个容器——这就是 Docker 高效的本质。容器也不是没有缺点:它只能跑同一类内核(Linux 容器跑 Linux 程序),想在 Linux 上跑 Windows 程序还得用 VM。
核心概念速览
Docker 有五个最核心的概念,先记住名字和大致用途,后面每一篇都会展开:
# Docker 五大核心概念,一句话各记一个
# 1. 镜像(Image):只读模板,相当于"装好系统的安装盘"
docker images # 看本地镜像
# 2. 容器(Container):镜像跑起来的实例,相当于"正在用的电脑"
docker ps # 看正在跑的容器
# 3. 仓库(Registry):存镜像的地方,Docker Hub 是最大的公共仓库
docker pull nginx # 从仓库下载镜像到本地
# 4. 数据卷(Volume):让数据"活"在容器之外,容器删了数据还在
docker volume create mydata
# 5. 网络(Network):让多个容器互相通信
docker network create mynet最关键的是镜像和容器这一对。用面向对象来类比:镜像是"类",容器是"对象";一个镜像可以 docker run 出多个互相隔离的容器实例。其他三个(仓库、Volume、网络)是支撑它们的配套设施。
Docker 都用在哪?
Docker 如今是云原生世界的"通用语"。下面这些场景你一定会遇到:
# Docker 典型应用场景
# 1. 本地开发环境一致性:同事 clone 项目后一条命令跑起来
docker compose up -d
# 2. CI/CD:每次提交代码自动构建镜像、跑测试、推仓库
docker build -t myapp:$BUILD_NUMBER .
docker run --rm myapp:$BUILD_NUMBER npm test
# 3. 微服务部署:每个服务一个容器,独立扩缩容
docker service scale web=5 api=3
# 4. 一次性任务:跑完即删,不污染主机
docker run --rm alpine echo "hello"
# 5. 多版本并行:同一台机器跑 Node 18 和 Node 20
docker run node:18 node -v
docker run node:20 node -v简单说:只要你的应用需要"换个环境跑"——从开发机到测试服务器、从测试到生产、从本地到云——Docker 都能帮你省下一大把配环境的功夫。
Docker 的替代品
Docker 不是唯一选择,了解替代品有助于选型:
- Podman:Red Hat 出品,命令几乎和 Docker 一样(可以 alias),优势是无守护进程、无 root,更安全。
- containerd:从 Docker 抽出来的底层运行时,Kubernetes 默认用它。
- OCI 标准:开放容器协议,保证镜像格式通用,Docker / Podman / containerd 都遵守它。
- Docker Swarm:Docker 自家的轻量编排工具,适合小规模集群(已被 K8s 边缘化)。
但对初学者来说,先学 Docker 永远不亏——概念和命令都能迁移到 Podman/containerd,也是学 Kubernetes 的前置知识。
该不该学 Docker?
如果你的方向是后端开发、运维、DevOps、云原生,Docker 几乎是必修课。即便你是前端,本地起个数据库、跑个 Redis、调试 Nginx 配置,Docker 也比手动装省心太多。学完本系列,你将能:给任何项目写出 Dockerfile、用 Compose 编排多服务、把镜像推到仓库、做出又小又安全的生产镜像。
← 返回 Docker 教程目录
下一篇 Docker 环境安装 →