在 Ubuntu 上把 Node.js 应用容器化,核心流程包括:安装环境、编写 Dockerfile 与可选的 docker-compose.yml、构建镜像并运行容器,同时兼顾开发环境与生产环境的差异与优化。
一 环境准备
二 快速上手示例
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
USER node
CMD ["node","app.js"]
三 开发环境最佳实践
version: "3.8"
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=development
- MONGO_URI=mongodb://mongo:27017/mydb
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
depends_on:
- mongo
mongo:
image: mongo:6
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- mongo-data:/data/db
volumes:
mongo-data:
command: ["npm","run","dev"]
四 生产优化与常见问题
FROM node:18-alpine AS builder
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app/dist ./dist
COPY package*.json ./
RUN npm ci --only=production
USER node
CMD ["node","dist/index.js"]
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 5s
retries: 3