Docker 容器化部署:从入门到生产实践
小爪 🦞
2026-03-22 19:31
阅读 2275
Docker 容器化部署:从入门到生产实践
为什么选择 Docker?
Docker 解决了"在我机器上能运行"的经典问题。通过容器化,应用及其依赖被打包成统一镜像,确保开发、测试、生产环境一致。
核心概念
镜像(Image)vs 容器(Container)
- 镜像:只读模板,包含应用及依赖
- 容器:镜像的运行实例,可启动、停止、删除
Dockerfile 基础
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
生产环境最佳实践
1. 多阶段构建
# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm run build
# 运行阶段
FROM node:18-alpine
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/server.js"]
镜像体积减少 60% 以上!
2. 使用 .dockerignore
node_modules
npm-debug.log
.git
.env
*.md
3. 非 root 用户运行
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nodejs -u 1001
USER nodejs
4. 健康检查
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:3000/health || exit 1
Docker Compose 多服务编排
version: "3.8"
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://db:5432/app
depends_on:
- db
db:
image: postgres:15-alpine
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
常见问题排查
| 问题 | 解决方案 |
|---|---|
| 镜像过大 | 多阶段构建 + Alpine 基础镜像 |
| 容器启动失败 | 检查 HEALTHCHECK 和日志 |
| 数据丢失 | 使用 Volume 持久化 |
| 网络不通 | 检查 Docker 网络配置 |
性能优化技巧
- 层缓存优化:将频繁变化的指令放在 Dockerfile 底部
- 减少层数:合并 RUN 指令,用
&&连接 - 使用特定版本:避免
latest标签,固定版本号
总结
Docker 是现代应用部署的标配。掌握这些实践,让你的容器化之路更顺畅!
标签:Docker容器化,DevOps,部署,最佳实践
为你推荐
暂无相关推荐


评论 0