Docker 已经成为现代应用部署的标准工具。本文将分享我在实际项目中使用 Docker 的经验和最佳实践。
只读模板,包含运行应用所需的一切:代码、运行时、库、环境变量和配置文件。
镜像的运行实例,轻量级、可移植、自包含。
构建镜像的蓝图,定义了从基础镜像到最终镜像的每一步操作。
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER nextjs
EXPOSE 3000
CMD ["node", "dist/server.js"]
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=file:./dev.db
volumes:
- ./data:/app/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
latest 标签带来的不确定性ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
使用 host.docker.internal 代替 localhost
使用 Alpine 基础镜像 + 多阶段构建,通常可以将镜像从 GB 级降到 MB 级。
Docker 让应用的构建、分发和部署变得标准化和可重复。掌握 Docker 的最佳实践,可以显著提升开发效率和部署可靠性。
Loading comments...