首页 / 容器云原生 / Docker Compose实战:把

Docker Compose实战:把Node应用、PostgreSQL和Nginx一次编排上线

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

Chapter 1:OK so,先把项目“装进箱子”

✅STEP 1环境搭建📋STEP 2编码实现🎯STEP 3测试验证📊STEP 4部署上线

兄弟们开机!这里是 eccfy,今天不讲虚的,直接屏幕录制级实战:一个 Node API、一个 PostgreSQL、一个 Nginx,全部用 Docker Compose 拉起来。你正在搜“Docker Compose教程”“docker compose怎么用”或者“Docker容器化部署实战”,这篇就按我的终端一步一步抄。

接下来,看我打开项目目录:api/ 里是 Node 服务,监听 3000。先写 api/Dockerfile:

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

注意这个点:不要把 node_modules 复制进去。根目录加 .dockerignore,否则镜像会膨胀,我实测一个小项目从 168MB 涨到 412MB。

node_modules
npm-debug.log
.git
.env

Chapter 2:Now watch this,用 Compose 一键编排三件套

性价比88易用性82稳定性95安全性90客服75

接下来是重点,根目录创建 compose.yml。我屏幕左边开配置,右边开终端,直接贴:

services:
  api:
    build: ./api
    environment:
      DATABASE_URL: postgres://app:app123@db:5432/appdb
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "3000:3000"

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: app123
      POSTGRES_DB: appdb
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app -d appdb"]
      interval: 5s
      timeout: 3s
      retries: 10

  nginx:
    image: nginx:1.27-alpine
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - api

volumes:
  pgdata:

再来 Nginx 配置,创建 nginx.conf:

server {
  listen 80;

  location / {
    proxy_pass http://api:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

开跑!

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

我这台 2 核 4G 云服务器实测:首次构建 46 秒,第二次缓存构建 7 秒;三个容器启动后内存占用约 310MB。这里如果你遇到“Docker镜像下载慢怎么解决”,先试官方 registry、公司内网镜像源或本机代理配置;别一上来就把问题归到“免费VPN怎么用”这种方向,先确认 DNS、网络和镜像源。

Chapter 3:翻车排查 + 怎么确认真的部署成功

OK so,最常见的三个坑,我现场给你拆:

  • API 连不上数据库:容器里不要写 localhost,要写服务名 db。
  • 数据库数据重启丢失:必须挂载 volume,也就是上面的 pgdata。
  • Nginx 502:先跑 docker compose logs api,再跑 docker compose exec nginx wget -qO- http://api:3000。

最后验证,跟着我敲:

curl -i http://localhost:8080
docker compose exec db psql -U app -d appdb -c "select now();"
docker stats --no-stream

如果 curl 返回 HTTP/1.1 200,PostgreSQL 能输出当前时间,docker stats 里三个容器状态稳定,那就说明 Compose 编排跑通了。想做“前后对比揭晓”?你再执行 docker compose down,然后 docker compose up -d,10 秒内恢复服务就是合格。

如果你只是拉镜像或查文档时网络不稳,优先用官方源、公司代理或自建方案;付费网络工具也只是选项之一,比如 Roxi:wizzegroup.com。好,今天这套 Docker Compose 实战你跑通了吗?评论区贴你的报错,我继续帮你拆!

延伸阅读