1、Docker入门:Docker是什么、为什么用Docker、Docker与传统虚拟机的区别

1.1 Docker到底是什么?

先说说我自己的理解吧。Docker,说白了就是一个「集装箱」系统。

你想想看,以前我们部署一个应用,要装环境、配依赖、调参数,折腾半天。换台机器,又得重来一遍。我在项目中遇到过最头疼的事——开发环境跑得好好的,一上测试服务器就崩。查了半天,原来是某个系统库版本不一样。

Docker 就是来解决这个问题的。它把你的应用和它需要的所有东西——代码、运行时、系统工具、库、配置文件——打包成一个标准单元。这个单元叫「容器」。容器在任何地方都能跑,保证行为一致。

嗯,这里要注意:Docker 不是虚拟机。它更轻、更快、更灵活。

一句话总结:Docker 是一个开源的容器化平台,让你把应用及其依赖打包成轻量级、可移植的容器,在任何环境中都能一致运行。

1.2 为什么我们要用Docker?

我刚开始用 Docker 时,其实也犹豫过:「不就是个打包工具吗?有必要学吗?」后来真香了。原因有三:

  1. 环境一致性——开发、测试、生产环境完全一样。再也不会出现「在我机器上能跑」这种尴尬话。
  2. 快速部署——启动一个容器只要几秒钟。虚拟机?至少得等一两分钟。
  3. 资源利用率高——一台物理机可以跑几十个容器,互不干扰。

我记得有一次,团队要快速搭建一套微服务演示环境。如果用传统方式,每台机器装 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,然后跑第一个真正的容器。准备好了吗?