主题
Docker 部署入门
🎯 Docker 是什么?
一句话理解
Docker 就是一个「打包神器」。
它可以把你的代码 + 运行环境(Node.js、Java、数据库…)打包成一个「箱子」(容器),这个箱子在任何电脑上都能一模一样地运行。
🤔 为什么需要 Docker?
| 以前的痛点 | Docker 怎么解决 |
|---|---|
| "在我电脑能跑,你电脑不行" | 打包成容器,在哪都一样 |
| 安装环境要半天 | 一条命令搞定 |
| 几个项目依赖冲突 | 容器相互隔离,互不干扰 |
| 部署步骤一大堆 | 一条命令启动所有服务 |
🎬 类比理解
想象你做了一道菜想分享给朋友:
- 以前:给他菜谱,让他自己买菜、调配料、掌握火候... 结果味道可能完全不一样
- Docker:直接把做好的菜真空包装寄过去,他只需要加热就能吃到一模一样的味道
📋 第一步:安装 Docker
Docker 已安装
Docker Compose 已安装(通常随 Docker 一起安装)
检查是否安装
bash
$
docker --version
bash
$
docker compose version
如果显示版本号,说明已安装。如果没安装,参考下面链接:
Windows 用户注意
安装 Docker Desktop 后,需要重启电脑。确保 WSL2 已启用。
🚀 快速体验
运行一个现成的容器
来,运行一个 Nginx 服务器试试:
bash
$
docker run -d -p 8080:80 nginx
然后打开 http://localhost:8080,你会看到 Nginx 的欢迎页面!
发生了什么?
- Docker 从网上下载了 Nginx 镜像
- 创建了一个容器并在后台运行
- 把容器的 80 端口映射到你电脑的 8080 端口
停止并删除它:
bash
$
docker stop $(docker ps -q) && docker rm $(docker ps -aq)
📦 核心概念(只需要理解三个)
| 概念 | 通俗理解 | 例子 |
|---|---|---|
| 镜像 (Image) | 安装包/模板 | node:20、postgres:15 |
| 容器 (Container) | 运行中的程序 | 你启动的那个 Nginx |
| Compose | 批量管理工具 | 一次启动前端+后端+数据库 |
📁 生成的 Docker 文件
我们生成的项目已经包含了 Docker 配置:
project/
├── backend/
│ └── Dockerfile # 后端打包配置
├── frontend/
│ └── Dockerfile # 前端打包配置
└── docker-compose.yml # 一键启动配置🎮 一键启动项目
进入项目目录,运行:
bash
$
docker compose up -d
就这一条命令,前端、后端、数据库全部启动了!
启动成功后
- 前端:
http://localhost:80 - 后端:
http://localhost:3000 - 数据库:自动在容器内运行
其他常用命令
| 我想... | 命令 |
|---|---|
| 看服务运行状态 | docker compose ps |
| 看日志 | docker compose logs -f |
| 停止所有服务 | docker compose down |
| 重新构建 | docker compose up -d --build |
📄 docker-compose.yml 解读
这是一个典型的配置,每一行我都加了注释:
yaml
services:
# 后端服务
backend:
build: ./backend # 用 backend 目录下的 Dockerfile 构建
ports:
- "3000:3000" # 把容器的 3000 端口映射到本机的 3000
environment:
- DATABASE_URL=postgresql://postgres:password@db:5432/app
depends_on:
- db # 等数据库启动后再启动后端
# 前端服务
frontend:
build: ./frontend
ports:
- "80:80" # 映射到 80 端口
# 数据库
db:
image: postgres:15 # 使用官方 PostgreSQL 镜像
environment:
POSTGRES_PASSWORD: password
POSTGRES_DB: app
volumes:
- pgdata:/var/lib/postgresql/data # 数据持久化
volumes:
pgdata: # 定义一个数据卷,防止数据丢失☁️ 部署到云服务器
步骤概览
1. 买一台云服务器(阿里云/腾讯云,几十元/月起)
↓
2. SSH 连接服务器
↓
3. 安装 Docker
↓
4. 把代码上传到服务器
↓
5. 运行 docker compose up -d
↓
6. 配置域名(可选)
↓
7. 完成!服务器安装 Docker
SSH 连接到服务器后,运行:
bash
$
curl -fsSL https://get.docker.com | sh
bash
$
sudo systemctl start docker
上传代码
方式一:用 Git
bash
$
git clone https://github.com/你的用户名/你的项目.git
方式二:用 scp 上传
bash
$
scp -r ./你的项目 root@你的服务器IP:/home/app
启动服务
bash
$
cd /home/app && docker compose up -d --build
❓ 常见问题
构建失败/很慢
国内访问 Docker Hub 可能很慢,配置镜像加速:
bash
# 创建配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
# 重启 Docker
sudo systemctl restart docker端口被占用
修改 docker-compose.yml 中的端口:
yaml
ports:
- "3001:3000" # 改成 3001容器内连接数据库
容器里访问其他容器,用服务名而不是 localhost:
yaml
# ✅ 正确
DATABASE_URL=postgresql://postgres:password@db:5432/app
# ❌ 错误
DATABASE_URL=postgresql://postgres:password@localhost:5432/app查看日志排错
bash
$
docker compose logs backend --tail 100
进入容器调试
bash
$
docker compose exec backend sh
💡 小贴士
最佳实践
- 敏感信息用 .env 文件:密码、密钥不要写在 docker-compose.yml 里
- 数据要持久化:用 volumes,否则容器删了数据就没了
- 定期备份数据库:
docker compose exec db pg_dump ... - 用多阶段构建:镜像更小,启动更快
📚 学习资源
⏭️ 下一步
- 了解 CI/CD 自动部署(代码推送后自动部署)
- 配置 HTTPS 和域名
- 尝试 Kubernetes(更大规模的容器编排)