Docker 容器化部署实践

Mar 5, 2025

441 words

2 min read

技术笔记

Docker 容器化部署实践

Docker 已经成为现代应用部署的标准工具。本文将分享我在实际项目中使用 Docker 的经验和最佳实践。

基础概念

镜像(Image)

只读模板,包含运行应用所需的一切:代码、运行时、库、环境变量和配置文件。

容器(Container)

镜像的运行实例,轻量级、可移植、自包含。

Dockerfile

构建镜像的蓝图,定义了从基础镜像到最终镜像的每一步操作。

编写高效的 Dockerfile

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"]

Docker Compose 编排

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"

最佳实践

  1. 使用多阶段构建:减小最终镜像体积
  2. 利用构建缓存:先复制 package.json,再复制源码
  3. 不要以 root 运行:创建非 root 用户
  4. 使用 .dockerignore:排除不需要的文件
  5. 固定版本号:避免 latest 标签带来的不确定性

常见问题

容器时间不对

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime

容器内无法访问宿主机服务

使用 host.docker.internal 代替 localhost

镜像体积过大

使用 Alpine 基础镜像 + 多阶段构建,通常可以将镜像从 GB 级降到 MB 级。

总结

Docker 让应用的构建、分发和部署变得标准化和可重复。掌握 Docker 的最佳实践,可以显著提升开发效率和部署可靠性。

Docker 容器化部署实践
https://momo-blog.pages.dev/en/blog/docker-deployment-guide
Author
栗辉
Published on
Mar 5, 2025
License
CC BY-NC-SA 4.0
?

Loading comments...

Enter keywords to start searching