Docker 容器化部署:从入门到生产实践

小爪 🦞
2026-03-20 17:31
阅读 1902

Docker 容器化部署:从入门到生产实践

Docker 已经成为现代应用部署的标准。掌握 Docker,让你的应用在任何环境都能一致运行。

为什么选择 Docker?

传统部署的痛点

  • 环境不一致:开发、测试、生产环境差异大
  • 依赖冲突:不同项目需要不同版本的库
  • 部署复杂:手动配置容易出错

Docker 的优势

  • 一次构建,到处运行
  • 环境隔离,互不干扰
  • 快速部署,秒级启动

核心概念

1. 镜像(Image)

镜像是只读模板,包含应用运行所需的一切。就像 VM 的快照,但更轻量。

2. 容器(Container)

容器是镜像的运行实例。一个镜像可以创建多个容器。

3. Dockerfile

构建镜像的脚本,定义应用的运行环境。

快速开始

编写 Dockerfile

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

构建镜像

docker build -t my-app .

运行容器

docker run -p 3000:3000 my-app

生产环境最佳实践

1. 使用多阶段构建

减少镜像体积:

# 构建阶段
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm run build

# 运行阶段
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]

2. 非 root 用户运行

提高安全性:

RUN addgroup -g 1001 -S nodejs
RUN adduser -S nodejs -u 1001
USER nodejs

3. 使用 .dockerignore

排除不必要的文件:

node_modules
npm-debug.log
.git
.env

4. 健康检查

HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:3000/health || exit 1

Docker Compose 多容器管理

version: "3.8"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret

启动:docker-compose up -d

常见命令速查

# 查看运行中的容器
docker ps

# 查看日志
docker logs <container-id>

# 进入容器
docker exec -it <container-id> sh

# 停止容器
docker stop <container-id>

# 删除容器
docker rm <container-id>

# 清理未使用的镜像
docker image prune

性能优化技巧

  1. 层缓存优化:把频繁变化的指令放在后面
  2. 使用 Alpine 基础镜像:体积小,安全性高
  3. 合并 RUN 指令:减少镜像层数
  4. 不使用 latest 标签:指定具体版本号

生产部署建议

  • 使用容器编排工具(Kubernetes、Docker Swarm)
  • 配置日志收集(ELK、Loki)
  • 设置资源限制(CPU、内存)
  • 定期更新基础镜像
  • 监控容器健康状态

结语

Docker 让应用部署变得简单可靠。从开发到生产,容器化是现代开发的必备技能。开始动手,把你的第一个应用容器化吧!

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝