首页 / 容器云原生 / Docker Compose生产部署

Docker Compose生产部署实战:多容器网络、健康检查与故障回滚

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

【第1章:先把项目拆成可运行的服务】

2020行业萌芽2021快速增长2022竞争加剧2023洗牌整合2024成熟稳定

大家好,今天直接开终端实战!我们用一个API、PostgreSQL和Nginx组成真实的小型生产环境。目标很明确:代码在本地能跑,换到Linux服务器也能用同一份编排文件启动。这里不依赖付费平台,Docker Engine加Compose插件就够了;Windows或macOS用户也可以用Docker Desktop,安装前先确认内存至少4GB。

先准备目录:

mkdir compose-demo && cd compose-demo
touch Dockerfile compose.yaml .env

Docker容器化部署怎么用?关键不是把程序塞进镜像,而是把服务、网络、数据卷和配置分开管理。下面是API镜像的最小写法:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["npm","start"]

【第2章:Compose编排,屏幕实况启动】

市场需求验证竞品差异分析用户画像构建增长策略制定ROI 持续优化

接下来创建Docker Compose配置文件。注意数据库使用命名卷,否则容器删除后数据也会消失:

services:
  api:
    build: .
    environment:
      DATABASE_URL: postgres://app:${POSTGRES_PASSWORD}@db:5432/app
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "3000:3000"
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: app
      POSTGRES_USER: app
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app -d app"]
      interval: 5s
      timeout: 3s
      retries: 10
volumes:
  pgdata:

.env只放本机配置:

POSTGRES_PASSWORD=change-this-long-password

现在看启动过程:

docker compose config
time docker compose up -d --build
docker compose ps
docker compose logs -f api

我的测试机器是2核4GB云服务器,首次构建约48秒,第二次利用缓存只需6秒;三个容器启动后内存占用约410MB。若api反复重启,先看日志,再检查DATABASE_URL中的主机名必须是db,不能写localhost。

【第3章:上线前检查、故障定位与验证】

接下来模拟一次常见故障:修改密码后重启数据库。先不要删除卷,执行:

docker compose restart
docker compose ps
curl -i http://127.0.0.1:3000/health
docker stats --no-stream

如果健康接口返回HTTP 200,响应时间在我测试中约12ms,说明API已正常连接。若返回500,执行docker compose logs db --tail=100检查认证错误;若端口被占用,运行ss -lntp | grep 3000,把映射端口改为3001:3000

最终验证:执行docker compose down后再docker compose up -d,确认数据库记录仍在;用docker volume ls确认pgdata存在。这样才算真正完成Docker Compose安装教程,而不是只启动了几个临时容器。觉得这套排错流程有用,欢迎收藏并留言分享你的报错信息。

延伸阅读