全书目录

第十篇:Docker 完全指南 —— 国际港口集装箱宇宙

第十四章:一个完整例子 —— 前端 + API + PostgreSQL 的最小货柜编队

1 分钟 61 字 第 160 / 962 个阅读单元

假设你有一个现代 Web 应用,结构是:

text
software-city-app/
├── frontend/
├── api/
└── compose.yaml

API 的 Dockerfile

dockerfile

FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev

FROM node:22-alpine
WORKDIR /app

COPY --from=deps /app/node_modules ./node_modules
COPY . .

EXPOSE 3000
CMD ["node", "server.js"]

总调度表:

yaml
services:
  api:
    build: ./api
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/app
      REDIS_URL: redis://redis:6379
    depends_on:
      - db
      - redis

  db:
    image: postgres:17
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
    volumes:
      - dbdata:/var/lib/postgresql/data

  redis:
    image: redis:8

volumes:
  dbdata:

启动:

bash
docker compose up -d --build

这套模型的意思非常清楚:

text
应用编队
├── api      业务货柜
├── db       数据货柜
├── redis    缓存货柜
└── dbdata   独立仓储区