Docker容器化部署与优化:从入门到生产环境的完整指南

文章最后更新时间:2026-04-14 08:35:28

Docker是现代应用部署的标准方式,但很多开发者对Docker的理解还停留在”会拉镜像”的阶段。本文从Docker基础讲起,到生产环境部署和优化,帮你全面掌握容器化技术。

一、Docker核心概念

镜像(Image)

镜像是一个只读模板,用来创建容器。类似于面向对象中的”类”。

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

容器(Container)

容器是镜像的运行实例。类似于面向对象中的”对象”。

# 运行容器
docker run -d -p 80:80 nginx:latest

# 查看运行中的容器
docker ps

# 停止容器
docker stop 容器ID

仓库(Registry)

存放镜像的地方。最常用的是Docker Hub。

# 推送镜像到仓库
docker push myimage:latest

二、Dockerfile最佳实践

基础镜像选择

# 使用官方轻量级镜像
FROM node:18-alpine

# 非必要不使用latest标签
FROM nginx:1.23-alpine

优化构建层级

# 不好:所有指令在一层
FROM node:18
COPY . .
RUN npm install
RUN npm run build

# 好:分离依赖和代码
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

使用.dockerignore

node_modules
.git
*.log
.DS_Store
dist
coverage

多阶段构建

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

# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

三、Docker Compose编排

docker-compose.yml示例

version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=secret

  redis:
    image: redis:7-alpine

volumes:
  db-data:

常用命令

# 启动所有服务
docker-compose up -d

# 查看服务日志
docker-compose logs -f

# 停止所有服务
docker-compose down

# 重新构建并启动
docker-compose up -d --build

四、生产环境部署

数据持久化

# 使用卷
volumes:
  - ./data:/app/data
  - db-data:/var/lib/postgresql/data

# 使用命名卷
docker volume create mydata

环境变量管理

# .env文件
DB_HOST=localhost
DB_PORT=5432
SECRET_KEY=mysecret

# docker-compose引用
environment:
  - DB_HOST=${DB_HOST}

健康检查

services:
  web:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

资源限制

services:
  web:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M

五、Docker网络配置

网络模式

  • bridge:默认模式,容器间通信
  • host:容器共享主机网络
  • none:禁用网络
  • overlay:跨主机通信(Swarm模式)

创建自定义网络

docker network create mynetwork

# 运行容器时指定网络
docker run -d --network mynetwork myapp

容器间通信

# 使用服务名作为主机名
# web容器可以通过 http://db:5432 访问db容器

六、镜像构建优化

构建缓存利用

# 顺序很重要:不常变化的层放前面
FROM node:18
WORKDIR /app
COPY package*.json ./    # 先复制依赖文件
RUN npm ci              # 安装依赖
COPY . .                # 再复制代码
RUN npm run build       # 构建

减小镜像体积

  • 使用alpine等轻量级基础镜像
  • 多阶段构建分离构建环境
  • 清理不必要的文件(apt缓存、临时文件)
  • 使用.dockerignore排除无关文件

安全最佳实践

# 不以root用户运行
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

# 使用非特权端口
EXPOSE 8080

七、监控与日志

查看日志

# 查看容器日志
docker logs -f 容器ID

# 查看最近100行
docker logs --tail 100 容器ID

资源监控

# 查看容器资源使用
docker stats

# 查看容器详细信息
docker inspect 容器ID

日志管理

# 使用日志驱动
logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

八、常见问题

Q:容器内数据如何持久化?
A:使用Docker卷(volume)或绑定挂载(bind mount)。

Q:如何查看容器内部?
A:使用 docker exec -it 容器ID /bin/sh 进入容器。

Q:容器启动失败怎么办?
A:使用 docker logs 查看日志,使用 docker inspect 检查配置。

Q:如何更新运行中的容器?
A:使用 docker-compose up -d –build 重新构建,或使用 docker pull 更新镜像后重新运行。

总结

Docker容器化是现代应用部署的标配。核心要点:写好Dockerfile利用构建缓存、使用Docker Compose编排多服务、配置生产级参数(资源限制、健康检查)、做好监控日志。掌握这些,生产环境部署不再困难。

瀚煜云提供Docker容器化部署及运维服务。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容