一、为什么需要 Docker?先解决开发的「老大难」问题

你是否遇到过这些场景:

  • 本地跑通的项目,部署到服务器直接报错:「缺依赖库 xxx」
  • 测试环境没问题,生产环境突然崩了:「操作系统版本不一致」
  • 服务器资源紧张,多应用部署互相干扰:「内存被挤爆了」

Docker 的出现就是为了解决环境一致性资源隔离的核心痛点。它通过容器化技术,把应用和依赖打包成标准化单元,实现「一次构建,到处运行」。

二、Docker 核心概念:3 分钟看懂三大组件

1. 镜像(Image):应用的「安装包」

  • 定义:只读模板,包含运行应用所需的代码、依赖、配置(比如 Redis 镜像含 Redis 程序 + Linux 基础库)
  • 类比:手机里的「微信安装包.apk」,可多次安装但本身不可修改
  • 关键特性:分层存储(复用公共层,减少存储空间)

2. 容器(Container):运行中的「应用实例」

  • 定义:从镜像创建的可运行实例,是独立的隔离环境
  • 类比:安装后正在运行的「微信 APP」,可启动、停止、删除多个实例
  • 核心技术:通过 Linux Namespaces 实现进程隔离,cgroups 限制资源(CPU / 内存)

3. 仓库(Registry):镜像的「应用商店」

  • 作用:存储和分发镜像,类似 GitHub 存代码
  • 常用仓库
    • Docker Hub(公共仓库,含 MySQL/NGINX 等官方镜像)
    • 阿里云容器仓库(私有仓库,适合企业)

三、Docker vs 虚拟机:为什么容器更轻量?

很多人会问:「虚拟机也能隔离环境,为啥要用 Docker?」看这张对比表就懂了:

维度 Docker 容器 传统虚拟机(VM)
架构 共享宿主机内核 自带完整操作系统
启动速度 秒级(无需加载 OS) 分钟级(需启动完整 OS)
资源占用 轻量(MB 级) 笨重(GB 级)
隔离性 进程级隔离(够用) 硬件级隔离(更强)
适用场景 微服务、CI/CD、轻量应用 传统企业应用、多 OS 需求

简单说:Docker 是「集装箱」,虚拟机是「货运卡车」—— 前者只装应用及配件,后者连车头带司机全配齐。

四、实操入门:10 分钟上手 Docker(Ubuntu 为例)

1. 安装 Docker

bash

  1. # 1. 卸载旧版本
  2. sudo apt-get remove docker-ce docker-ce-cli containerd.io
  3. # 2. 安装依赖工具
  4. sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
  5. # 3. 添加阿里云镜像源(国内下载更快)
  6. curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  7. sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  8. # 4. 安装并启动
  9. sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
  10. sudo systemctl start docker # 启动服务
  11. sudo systemctl enable docker # 开机自启
  12. # 5. 验证安装(出现版本信息即成功)
  13. docker --version

2. 核心命令实战

场景 命令示例
拉取镜像 docker pull redis:7.0(拉取 Redis 7.0 版本)
启动容器 docker run -d -p 6379:6379 --name myredis redis:7.0(后台运行,端口映射,命名容器)
查看运行中容器 docker ps
进入容器内部 docker exec -it myredis /bin/bash(以交互模式进入容器)
停止容器 docker stop myredis

参数说明

  • -d:后台运行
  • -p 宿主端口:容器端口:端口映射
  • --name:自定义容器名

五、Docker 能做什么?3 大典型应用场景

1. 开发环境标准化

团队统一使用 Docker 镜像搭建开发环境,避免「我这能跑」的尴尬,比如:bash

  1. # 前端开发者直接拉取含Node+Webpack的镜像
  2. docker pull node:18-alpine

2. CI/CD 流水线集成

代码提交后,自动在 Docker 容器中构建、测试、打包,确保每个环节环境一致,大幅缩短上线周期。

3. 微服务部署

把微服务拆分成多个容器(如订单服务、支付服务),单独部署和扩容,比如用 Docker Compose 管理多容器应用。

六、总结与扩展

Docker 的核心价值是「环境一致性」和「资源高效利用」,它不是虚拟机的替代品,而是互补技术 —— 轻量应用用 Docker,需强隔离的传统应用用 VM。👉 进阶学习方向:

  1. Dockerfile:自定义镜像的构建脚本
  2. Docker Compose:多容器编排工具
  3. Kubernetes(K8s):大规模容器集群管理