Docker 从入门到精通:容器化部署完全指南
容器2026-06-30
# Docker 从入门到精通
## 核心概念
- **镜像 (Image)**:只读模板,包含运行环境和代码
- **容器 (Container)**:镜像的运行实例,隔离的进程空间
- **仓库 (Registry)**:镜像存储和分发中心
- **卷 (Volume)**:持久化数据存储
## Dockerfile 最佳实践
```
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
USER node
CMD ["node", "server.js"]
```
关键原则:
1. 使用具体版本标签,避免 `latest`
2. 合并 RUN 指令减少层数
3. 使用 `.dockerignore` 排除无关文件
4. 非 root 用户运行
5. 健康检查
## Docker Compose
```
services:
app:
build: .
ports: ["3000:3000"]
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: mysql:8.0
volumes: ["db_data:/var/lib/mysql"]
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
```
## 生产环境 Checklist
- [ ] 日志收集(json-file + 轮转限制)
- [ ] 资源限制(CPU / Memory)
- [ ] 健康检查
- [ ] 优雅关闭(SIGTERM 处理)
- [ ] 镜像扫描(Trivy / Snyk)
- [ ] 只读根文件系统(可选)
> 容器化不是目标,可维护的交付流程才是。