Docker Compose 部署 Web 应用的几条实践

0 次浏览0 条回复

一台云服务器、一个 compose 文件,就能把应用、数据库和缓存都跑起来。下面是部署中最容易忽略的几件事。

YAML
services:
  db:
    image: postgres:17-alpine
    env_file: .env
    volumes:
      - db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      retries: 10
    restart: unless-stopped

  web:
    image: registry.example.com/web:1.4.2
    env_file: .env
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "127.0.0.1:3000:3000"
    logging:
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped

volumes:
  db-data:
  1. 镜像写明版本号,不要用 latest。否则某次重启拉到新版本,出了问题都不知道是哪里变了。
  2. 端口只绑定 127.0.0.1,由 Nginx 对外提供服务。Docker 发布的端口会绕过 ufw 等防火墙规则,直接写 3000:3000 等于把服务暴露在公网上。
  3. 用 healthcheck 控制启动顺序。depends_on 只等容器启动,不等服务就绪;配合 condition: service_healthy 才会等数据库真正可用。
  4. 数据放在卷里。docker compose down -v 会删掉命名卷,执行前想清楚。
  5. 密码放 .env,并加进 .gitignore,不要写进镜像或提交到仓库。
  6. 限制日志大小。默认的 json-file 日志驱动不限大小,跑久了能把磁盘写满。
  7. 更新用 pull + up:docker compose pull && docker compose up -d,只会重建有变化的服务。
  8. 旧镜像别急着全删。docker image prune -a 会删掉所有没有容器使用的镜像,包括回滚要用的上一个版本。

0 条回复

返回板块

还没有回复

欢迎发表你的看法。

发表回复