如果你做过项目部署,应该都遇到过这样的情况:
「代码在我电脑上运行完全正常,为什么部署到服务器就报错?」
又或者:
「昨天还能运行,今天重装系统后环境全没了。」
造成这些问题的原因,大多数不是代码本身,而是运行环境不一致。
例如:
- Node.js 版本不同
- PHP 扩展缺失
- MySQL 版本不同
- Python 依赖冲突
- 系统环境变量不一致
Docker 正是为了解决这些问题而诞生。
它可以把应用程序和运行环境一起打包成一个标准化容器,无论是在 Windows、Linux、macOS,还是云服务器(VPS)上,都能够保持一致的运行效果。
我现在部署绝大多数项目时,都会优先选择 Docker。
原因很简单:
- 更容易迁移
- 更容易部署
- 更容易备份
- 更容易升级
- 环境一致,不容易踩坑
本文将从零开始,带你理解 Docker 的核心概念,并通过实际案例快速掌握 Docker 的日常开发与部署流程。
本文将学习哪些内容?
阅读完本文,你将掌握:
- Docker 是什么
- Docker 与虚拟机有什么区别
- Docker Desktop 安装方法
- Linux 安装 Docker
- Image(镜像)
- Container(容器)
- Registry(镜像仓库)
- Docker 常用命令
- 使用 Docker 快速部署 WordPress
下一篇还会继续介绍:
- Dockerfile
- Docker Compose(Compose V2)
- Volume 数据卷
- Network 网络
- Docker 最佳实践
一、什么是 Docker?
Docker 是一种容器化(Containerization)技术。
它可以把:
- 应用程序
- 运行环境
- 依赖库
- 配置文件
全部打包到一个容器中。
这个容器可以运行在任何安装了 Docker 的机器上,而不用担心环境差异。
例如:
你的项目需要:
- PHP 8.3
- MySQL 8
- Redis
- Nginx
传统方式:
需要一台服务器一项一项安装。
Docker:
只需要运行几个容器即可。
整个环境几分钟内就能搭建完成。
Docker 为什么越来越流行?
Docker 最大的优势可以概括为四个字:
一次构建,到处运行(Build Once, Run Anywhere)
开发阶段:
Windows
↓
测试环境:
Ubuntu
↓
生产服务器:
CentOS
↓
云服务器:
阿里云、腾讯云、AWS
全部使用同一套环境。
不会再出现:
“我电脑能运行”
这种经典问题。
对于团队协作来说,这一点尤为重要。
Docker 和虚拟机有什么区别?
很多初学者第一次接触 Docker,都会把它和 VMware、VirtualBox 等虚拟机混淆。
虽然它们都可以隔离运行环境,但原理完全不同。
| 对比项 | Docker | 虚拟机 |
|---|---|---|
| 启动速度 | 秒级 | 分钟级 |
| 占用空间 | 几十 MB~几百 MB | 几 GB~几十 GB |
| 系统内核 | 与宿主机共享 | 每台虚拟机独立 |
| 性能 | 接近原生 | 有一定损耗 |
| 部署速度 | 非常快 | 较慢 |
可以把它们理解成:
虚拟机:
就像盖一栋新的房子。
里面:
- 厨房
- 卫生间
- 水电
全部重新建设。
Docker:
更像是在同一栋楼里放置多个独立集装箱。
大家共用基础设施,但彼此互不影响。
正因为如此,Docker 才能够做到:
- 启动快
- 占用资源少
- 部署速度快
也是目前云原生开发最主流的部署方式。
二、安装 Docker
不同操作系统安装方式略有区别。
目前推荐使用官方版本。
Windows 安装 Docker Desktop
Windows 用户建议直接安装 Docker Desktop。
安装前建议确认:
- Windows 10 / Windows 11
- 已开启 WSL2
- 开启 Hyper-V(部分版本需要)
安装完成后,打开终端执行:
docker --version
如果输出类似:
Docker version 28.x.x
说明安装成功。
随后再执行:
docker info
如果能够看到 Docker Engine 信息,则说明 Docker 服务已经正常运行。
Ubuntu 安装 Docker
更新软件源:
sudo apt update
安装 Docker:
sudo apt install docker.io
启动服务:
sudo systemctl start docker
设置开机自启:
sudo systemctl enable docker
为了避免每次执行 Docker 命令都输入 sudo,建议把当前用户加入 Docker 用户组:
sudo usermod -aG docker $USER
执行完成后重新登录终端即可生效。
安装完成后,同样可以执行:
docker --version
验证是否安装成功。
三、Docker 的三个核心概念
学习 Docker,不需要记住所有命令。
真正需要理解的是三个核心概念:
- Image(镜像)
- Container(容器)
- Registry(镜像仓库)
理解了这三个概念,就已经掌握了 Docker 的基础。
1、Image(镜像)
镜像可以理解为:
一个已经打包好的运行环境。
里面包含:
- 操作系统基础环境
- 软件
- 依赖库
- 启动命令
例如:
nginx
mysql
redis
wordpress
node
python
这些官方镜像,都可以直接下载使用。
镜像本身是只读的。
它更像一个安装包。
2、Container(容器)
容器就是:
镜像运行后的实例。
例如:
下载:
nginx
镜像。
然后执行:
docker run nginx
Docker 就会创建一个真正运行中的容器。
一个镜像可以创建:
- 一个容器
- 十个容器
- 一百个容器
它们互相独立。
3、Registry(镜像仓库)
镜像需要存放。
Docker 使用 Registry 保存镜像。
最常见的是:
Docker Hub。
里面提供:
- Ubuntu
- MySQL
- Redis
- MongoDB
- PostgreSQL
- WordPress
- Jenkins
等数十万个镜像。
平时执行:
docker pull nginx
实际上就是从 Docker Hub 下载镜像。
整个流程可以理解为:
Docker Hub
↓
docker pull
↓
Image
↓
docker run
↓
Container
理解这个流程后,后面的 Dockerfile 和 Compose 就会容易很多。
四、Docker 常用命令
日常开发中,并不需要记住所有命令。
下面这些命令已经能够覆盖绝大多数使用场景。
查看 Docker 版本
docker --version
查看 Docker 服务信息:
docker info
下载镜像
例如下载最新版 Nginx:
docker pull nginx
下载完成后,可以查看本地镜像:
docker images
输出会显示镜像名称、版本、创建时间以及占用空间。
如果镜像不再使用,可以删除:
docker rmi nginx
如果不知道镜像名称,还可以搜索:
docker search mysql
选择官方维护的镜像通常更加安全、更新也更及时。