Egg.js Docker容器化部署终极指南:从零到生产环境实战
Egg.js作为基于Node.js和Koa的企业级Web框架,为构建更好的应用而生。本文将为你详细解析如何通过Docker容器化技术,实现Egg.js应用的高效部署和扩展。无论你是初学者还是经验丰富的开发者,这份终极指南都将带你从零开始,掌握Egg.js Docker化部署的核心技巧。
🚀 为什么选择Docker部署Egg.js?
在传统的部署方式中,我们往往需要手动配置服务器环境、安装Node.js运行时、处理依赖关系等繁琐步骤。而Docker容器化部署带来了以下优势:
- 环境一致性:开发、测试、生产环境完全一致
- 快速部署:镜像构建后可在任何Docker环境中运行
- 资源隔离:每个应用运行在独立的容器中
- 易于扩展:通过容器编排工具轻松实现水平扩展
📦 准备工作与环境要求
在开始Docker化之前,确保你的Egg.js项目具备以下条件:
- Node.js版本 >= 6.0.0
- 项目根目录包含完整的package.json文件
- 应用配置文件位于config目录下
- 日志目录配置正确(默认为logs目录)
🔧 创建Dockerfile配置文件
在你的Egg.js项目根目录创建Dockerfile文件,这是Docker构建的核心配置文件:
# 使用官方Node.js镜像作为基础
FROM node:14-alpine
# 设置工作目录
WORKDIR /usr/src/app
# 复制package.json和package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install --production
# 复制应用源代码
COPY . .
# 暴露应用端口(Egg.js默认端口7001)
EXPOSE 7001
# 设置环境变量
ENV NODE_ENV=production
# 启动应用
CMD ["npm", "start"]
🐳 构建和运行Docker容器
构建Docker镜像
docker build -t egg-app .
运行Docker容器
docker run -p 7001:7001 --name egg-container egg-app
🌐 生产环境优化配置
多阶段构建优化
为了减小镜像体积,可以使用多阶段构建:
# 构建阶段
FROM node:14-alpine AS builder
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci --only=production
# 运行阶段
FROM node:14-alpine
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app/node_modules ./node_modules
COPY . .
EXPOSE 7001
CMD ["npm", "start"]
环境变量配置
在config/config.default.js中配置环境敏感的变量:
// config/config.default.js
module.exports = appInfo => {
const config = exports = {};
config.cluster = {
listen: {
port: process.env.PORT || 7001,
hostname: process.env.HOST || '0.0.0.0'
}
};
return config;
};
📊 日志和监控配置
Docker日志管理
配置日志输出到标准输出,便于Docker日志收集:
// config/config.prod.js
module.exports = () => {
const config = {};
config.logger = {
consoleLevel: 'INFO',
disableConsoleAfterReady: false,
outputJSON: true
};
return config;
};
健康检查配置
在Dockerfile中添加健康检查:
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:7001/ || exit 1
🚀 使用Docker Compose部署
创建docker-compose.yml文件实现多容器部署:
version: '3.8'
services:
egg-app:
build: .
ports:
- "7001:7001"
environment:
- NODE_ENV=production
restart: unless-stopped
volumes:
- ./logs:/usr/src/app/logs
运行命令:
docker-compose up -d
🔍 常见问题与解决方案
端口冲突问题
如果7001端口被占用,可以通过环境变量修改:
docker run -p 8080:7001 -e PORT=7001 egg-app
时区设置
在Dockerfile中设置正确的时区:
RUN apk add --no-cache tzdata
ENV TZ=Asia/Shanghai
内存限制
为容器设置内存限制:
docker run -m 512m --memory-swap=1g egg-app
📈 性能优化建议
- 使用Alpine基础镜像:显著减小镜像体积
- 多阶段构建:分离构建环境和运行环境
- 合理使用缓存:优化Docker构建速度
- 资源限制:为容器设置合适的CPU和内存限制
- 日志轮转:配置Egg.js的日志轮转策略
🎯 总结
通过本文的详细指南,你已经掌握了Egg.js Docker容器化部署的全流程。从基础的Dockerfile编写到生产环境的优化配置,从单容器部署到多容器编排,这些技巧将帮助你构建高效、稳定的Egg.js应用部署方案。
记住,成功的Docker化部署不仅仅是技术实现,更重要的是理解应用的特性和业务需求,选择最适合的部署策略。现在就开始你的Egg.js Docker化之旅吧!
官方文档参考:部署核心配置
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





