Docker Compose实战:把Node应用、PostgreSQL和Nginx一次编排上线
Chapter 1:OK so,先把项目“装进箱子”
兄弟们开机!这里是 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 一键编排三件套
接下来是重点,根目录创建 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 实战你跑通了吗?评论区贴你的报错,我继续帮你拆!