1、Docker入门:Docker是什么、为什么用Docker、Docker与传统虚拟机的区别
1.1 Docker到底是什么?
先说说我自己的理解吧。Docker,说白了就是一个「集装箱」系统。
你想想看,以前我们部署一个应用,要装环境、配依赖、调参数,折腾半天。换台机器,又得重来一遍。我在项目中遇到过最头疼的事——开发环境跑得好好的,一上测试服务器就崩。查了半天,原来是某个系统库版本不一样。
Docker 就是来解决这个问题的。它把你的应用和它需要的所有东西——代码、运行时、系统工具、库、配置文件——打包成一个标准单元。这个单元叫「容器」。容器在任何地方都能跑,保证行为一致。
嗯,这里要注意:Docker 不是虚拟机。它更轻、更快、更灵活。
一句话总结:Docker 是一个开源的容器化平台,让你把应用及其依赖打包成轻量级、可移植的容器,在任何环境中都能一致运行。
1.2 为什么我们要用Docker?
我刚开始用 Docker 时,其实也犹豫过:「不就是个打包工具吗?有必要学吗?」后来真香了。原因有三:
- 环境一致性——开发、测试、生产环境完全一样。再也不会出现「在我机器上能跑」这种尴尬话。
- 快速部署——启动一个容器只要几秒钟。虚拟机?至少得等一两分钟。
- 资源利用率高——一台物理机可以跑几十个容器,互不干扰。
我记得有一次,团队要快速搭建一套微服务演示环境。如果用传统方式,每台机器装 JDK、MySQL、Redis、Nginx……至少半天。用 Docker,一个 docker-compose.yml 文件,三分钟搞定。当时同事都惊呆了。
个人建议:如果你还在用「手动装环境」的方式做开发,真的可以试试 Docker。哪怕只是本地开发,也能省下大量「环境调试」的时间。
1.3 Docker vs 传统虚拟机
很多人刚接触 Docker 时,会把它和虚拟机搞混。我刚开始也犯过这个错。其实它们有本质区别。
来看这张对比表:
| 对比维度 | Docker 容器 | 传统虚拟机 |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 占用空间 | MB 级别 | GB 级别 |
| 资源消耗 | 低(共享宿主机内核) | 高(每个 VM 有完整 OS) |
| 隔离性 | 进程级隔离 | 硬件级虚拟化 |
| 可移植性 | 极高(一次构建,到处运行) | 一般(依赖 Hypervisor) |
| 适用场景 | 微服务、CI/CD、开发环境 | 需要完整 OS 的场景 |
为什么会这样?
关键在于「共享内核」。Docker 容器直接使用宿主机的操作系统内核,只隔离用户空间。而虚拟机每个实例都包含一个完整的操作系统,包括内核。你想想看,一个 Ubuntu 镜像动辄几百 MB,而一个 Alpine Linux 的 Docker 镜像才 5MB。差距就在这里。
避坑指南:我曾经在项目中犯过一个错误——把 Docker 容器当虚拟机用,在里面跑 systemd、装 SSH 服务。其实 Docker 的设计哲学是「一个容器一个进程」。别把它当完整 OS 用,否则会踩很多坑。
1.4 核心概念速览
在正式开始之前,先熟悉几个关键词。后面会反复用到:
- 镜像(Image)——一个只读的模板,包含运行应用所需的一切。可以理解成「容器的蓝图」。
- 容器(Container)——镜像的运行实例。可以启动、停止、删除。每个容器都是隔离的。
- Dockerfile——一个文本文件,描述如何构建镜像。相当于「制作蓝图的说明书」。
- 仓库(Registry)——存放镜像的地方。Docker Hub 是官方公共仓库。
嗯,这几个概念搞清楚了,后面学起来就顺了。
1.5 一个小例子:感受一下
光说不练假把式。我们跑一个最简单的容器看看:
# 拉取一个 Nginx 镜像
docker pull nginx:alpine
# 启动一个 Nginx 容器
docker run -d -p 8080:80 --name my-nginx nginx:alpine
# 查看运行中的容器
docker ps
# 访问测试
curl http://localhost:8080
看到了吗?三行命令,一个 Web 服务器就跑起来了。而且这个容器只有几十 MB,启动时间不到一秒。如果是虚拟机,光装个系统就得几分钟。
我个人习惯,每次学新技术都会先跑一个 Hello World。Docker 的 Hello World 就是跑个 Nginx 或 Alpine 容器。你试试看,感受一下「秒级启动」的爽快感。
小技巧:如果拉取镜像慢,可以配置国内镜像加速器。比如阿里云、中科大的加速器。具体配置方法后面会讲,先记住有这回事就行。
1.6 本章小结
这一章我们聊了:
- Docker 是什么——一个容器化平台,解决「环境不一致」的问题
- 为什么用 Docker——环境一致、快速部署、资源高效
- 和虚拟机的区别——共享内核 vs 完整 OS,轻量 vs 重量
- 核心概念——镜像、容器、Dockerfile、仓库
说白了,Docker 就是让你「一次构建,到处运行」。下一章我们开始动手安装 Docker,然后跑第一个真正的容器。准备好了吗?