> 有没有遇到过这种情况:代码在自己电脑上跑得好好的,部署到服务器就各种报错?环境不一致是开发者最头疼的问题之一。Docker 把应用和它的运行环境打包在一起,一次构建到处运行。
---
## 什么是 Docker?
Docker 就像一个轻量级的虚拟机。传统虚拟机要模拟整个操作系统,Docker 只隔离应用层,所以启动快(秒级)、占用资源少。
| 对比 | 传统虚拟机 | Docker 容器 |
|------|-----------|-------------|
| 启动速度 | 分钟级 | 秒级 |
| 磁盘占用 | GB 级 | MB 级 |
| 性能损耗 | 较高 | 几乎无 |
| 隔离级别 | 操作系统级 | 进程级 |
---
## 安装 Docker
```bash
# Ubuntu/Debian
curl -fsSL https://get.docker.com | bash
# 启动 Docker 服务
systemctl start docker
systemctl enable docker
# 验证安装
docker --version
```
---
## 核心概念
- **镜像(Image)**:应用的模板,类似于安装包
- **容器(Container)**:镜像运行起来的实例
- **仓库(Registry)**:存放镜像的地方,Docker Hub 是最大的公共仓库
---
## 第一个 Docker 应用:运行 Nginx
```bash
docker run -d --name my-nginx -p 8080:80 nginx
```
浏览器访问 http://你的服务器IP:8080,就能看到 Nginx 欢迎页面。
---
## 常用管理命令
| 命令 | 用途 |
|------|------|
| docker ps | 查看运行中的容器 |
| docker ps -a | 查看所有容器(含已停止) |
| docker stop my-nginx | 停止容器 |
| docker start my-nginx | 启动已停止的容器 |
| docker rm my-nginx | 删除容器 |
| docker images | 查看本地镜像列表 |
| docker logs my-nginx | 查看容器日志 |
| docker exec -it my-nginx bash | 进入容器内部 |
---
## 用 Docker Compose 管理多容器应用
真实项目中经常需要同时运行多个服务(比如 Web + 数据库),Docker Compose 可以一键启动所有服务。
```yaml
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: mypassword
```
一条命令全部启动:docker-compose up -d
---
## 实战:用 Docker 部署一个博客
```bash
docker run -d \
--name typecho \
-p 80:80 \
-v /opt/typecho:/app/usr \
80x86/typecho:latest
```
访问服务器 IP,就能看到 Typecho 安装界面了。整个过程不超过 2 分钟。
Docker 的好处就是你不用关心服务器装了什么版本的 PHP、MySQL,镜像里已经配好了。