Docker 部署实战:前端应用容器化指南

Docker 部署实战:前端应用容器化指南

什么是 Docker?

Docker 是一个开源平台,用于开发、部署和运行应用程序。它使用容器化技术,将应用程序及其依赖打包在一个独立的容器中。

Docker 的优势

  • 一致性:开发环境与生产环境一致
  • 隔离性:容器之间相互隔离
  • 可移植性:一次构建,到处运行
  • 轻量级:共享宿主机内核,启动快速

Docker 基础概念

镜像(Image)

只读的模板,包含运行应用所需的所有文件和配置。

容器(Container)

镜像的运行实例,可以启动、停止、删除。

Dockerfile

定义如何构建镜像的文本文件。

创建 Dockerfile

前端应用的 Dockerfile

dockerfile 复制代码
FROM node:18-alpine AS build

WORKDIR /app

COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

FROM nginx:alpine

COPY --from=build /app/dist /usr/share/nginx/html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

多阶段构建优化

dockerfile 复制代码
FROM node:18-alpine AS builder

WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci --only=production

COPY . .
RUN npm run build

FROM nginx:1.25-alpine

COPY --from=builder /app/dist /usr/share/nginx/html

COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 80

USER nginx

CMD ["nginx", "-g", "daemon off;"]

Docker Compose

多容器编排

yaml 复制代码
version: '3.8'

services:
  frontend:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "80:80"
    environment:
      - NODE_ENV=production
    networks:
      - app-network

  api:
    build:
      context: ./api
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/app
    networks:
      - app-network
    depends_on:
      - db

  db:
    image: postgres:14-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=app
    networks:
      - app-network

volumes:
  postgres_data:

networks:
  app-network:
    driver: bridge

优化 Docker 镜像

使用 .dockerignore

复制代码
node_modules
npm-debug.log
.git
dist

选择合适的基础镜像

dockerfile 复制代码
# 推荐:使用 alpine 版本,体积更小
FROM node:18-alpine

# 避免:完整的 Debian 镜像体积较大
FROM node:18

清理构建缓存

dockerfile 复制代码
RUN npm ci --only=production && \
    rm -rf /root/.npm /root/.cache

部署流程

本地开发

bash 复制代码
docker-compose up --build

生产环境部署

bash 复制代码
docker build -t my-app:latest .
docker tag my-app:latest registry.example.com/my-app:latest
docker push registry.example.com/my-app:latest

使用 CI/CD

yaml 复制代码
name: Docker Build

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v3
      
      - name: Build Docker image
        run: docker build -t my-app .
        
      - name: Push to registry
        run: |
          docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASS }}
          docker push my-app

Docker 网络配置

网络模式

bash 复制代码
# 桥接模式(默认)
docker run --network bridge my-app

# 主机网络
docker run --network host my-app

# 自定义网络
docker network create app-network
docker run --network app-network my-app

数据持久化

卷(Volumes)

bash 复制代码
docker volume create my-data
docker run -v my-data:/app/data my-app

绑定挂载

bash 复制代码
docker run -v $(pwd)/data:/app/data my-app

安全最佳实践

非 root 用户运行

dockerfile 复制代码
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

最小权限原则

dockerfile 复制代码
# 不要以 root 身份运行
USER root  # ❌
USER appuser  # ✅

定期更新镜像

bash 复制代码
docker pull node:18-alpine

总结

Docker 容器化已经成为现代应用部署的标准方式。通过 Docker,我们可以:

  1. 实现开发环境与生产环境的一致性
  2. 简化部署流程,提高可靠性
  3. 优化资源利用,降低运维成本
  4. 支持快速扩展和弹性伸缩

掌握 Docker 技能,将使你在现代软件开发中更具竞争力。

相关推荐
Georgeviewer2 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
GuWenyue2 小时前
分不清AI Workflow与Agent?3个实战案例彻底讲透,做AI应用不再踩选型坑
人工智能
彩讯股份3006343 小时前
彩讯股份与心洲科技签署战略合作协议,共建企业级模型后训练能力
人工智能·科技
迅易科技3 小时前
从场景验证到Agent上线:迅易 × WorkBuddy如何帮助企业建设AI能力?
人工智能·ai·腾讯云
PNP Robotics3 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
GIR1233 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
绿算技术3 小时前
绿算技术亮相第十八届HPC AI中国年会,擘画AI基础设施全栈协同新图景
人工智能
Litluecat4 小时前
2026年7月22日科技热点新闻
人工智能·科技·新闻·每日·速览
To_OC4 小时前
别再傻傻分不清:Workflow 和 Agent 到底不是一回事
人工智能·agent·workflow
触底反弹4 小时前
🔥 2026 大模型选择指南:别再只看 Benchmark 了,这些维度才是关键!
人工智能·面试