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 技能,将使你在现代软件开发中更具竞争力。

相关推荐
滴图服务-七七1 小时前
滴滴地图:精准定位赋能企业数字化转型
大数据·人工智能·地图服务·甲级测绘资质·商业授权
爱学习的程序媛1 小时前
2026上半年大模型全景技术解读:推理融合、Agent 爆发与多模态统一
人工智能·ai
A.说学逗唱的Coke2 小时前
【大模型专题】向量数据库深度解析:从原理到实战,构建企业级 AI 知识检索底座
数据库·人工智能
果丁智能3 小时前
智能锁赋能网约房民宿数字化管控:身份核验+远程授权,筑牢安全防线、降本增效
网络·数据库·人工智能·安全·智能家居
V搜xhliang02463 小时前
AI智能体的数据安全与合规实践
人工智能·学习·数据分析·自动化·ai编程
PPIO派欧云3 小时前
PPIO登上贵州新闻联播,深化AI算力生态建设
人工智能
hai3152475433 小时前
一种通过空间几何转换进行软件编程计算的方式与现有计算的对比
人工智能·深度学习·数学建模·硬件架构·几何学·图论·拓扑学
猿饵块3 小时前
LibreOffice---文档制作
人工智能
硅谷秋水3 小时前
HARBOR:一个面向具身智体机器人强化学习的驾驭框架
人工智能·深度学习·机器学习·机器人
Mr..Jackey3 小时前
瑞佑 RUI Builder 图形化 UI 设计工具
arm开发·人工智能·单片机·ui·人机交互·ra8889·lcd控制芯片