容器化和编排全栈应用已成为开发者的必备技能。本文将通过实际案例演示如何使用Docker和Kubernetes部署一个Node.js后端 + React前端的应用。

项目结构

project/
├── backend/
│   ├── Dockerfile
│   ├── package.json
│   └── index.js
├── frontend/
│   ├── Dockerfile
│   ├── package.json
│   └── src/
└── k8s/
    ├── backend-deployment.yaml
    └── frontend-deployment.yaml

后端Dockerfile

FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 5000
CMD ["node", "index.js"]

前端Dockerfile

FROM node:16-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

使用Docker Compose本地开发

version: '3'
services:
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    environment:
      - NODE_ENV=development
  frontend:
    build: ./frontend
    ports:
      - "3000:80"
    depends_on:
      - backend

Kubernetes部署

在生产环境中,使用Kubernetes进行部署可以实现自动扩缩容、自愈等能力。

总结

通过Docker,我们可以轻松实现开发、测试、生产环境的一致性,大大简化了全栈应用的部署流程。