Docker - 05 - 构建流程

本地启用compose流程(写的有点烂,简单记一下吧)

流程概览

复制代码
1. 概念验证(hello-world / volume)
2. Dockerfile 构建 API 镜像 → docker run 单容器
3. Compose 起 postgres + redis → migrate
4. Compose 加 api → 服务名互联
5. Compose 加 worker → 全链路
6. 环境变量整理 → docker compose up -d --build 一键启动

1. 概念验证

powershell 复制代码
docker version
docker run --rm hello-world
docker ps -a

# Volume 体验
docker run --rm -v demo-vol:/data alpine sh -c "echo hello > /data/test.txt && cat /data/test.txt"
docker volume ls
docker volume rm demo-vol   # 可选清理

2. Dockerfile ------ 单容器跑 API

文件: Dockerfile.dockerignore

powershell 复制代码
docker build -t nodejs-api .

docker run --rm -p 8080:8080 `
  -e DATABASE_URL="postgresql://postgres:密码@host.docker.internal:5432/nodejs_study?schema=public" `
  -e REDIS_URL="redis://host.docker.internal:6379" `
  -e JWT_SECRET="你的JWT_SECRET" `
  nodejs-api

curl http://localhost:8080/health

API 在容器内连宿主机服务 → 用 host.docker.internal,不用 localhost


3. Compose ------ postgres + redis

文件: docker-compose.yml(先只写 postgres、redis)

powershell 复制代码
docker compose up -d
docker compose ps

docker exec nodejs-redis redis-cli ping   # 期望 PONG

# 初始化 Compose 空库(端口看 compose 映射,本项目是 5433)
$env:DATABASE_URL="postgresql://postgres:密码@localhost:5433/nodejs_study?schema=public"
npx prisma migrate deploy

端口冲突时改 compose 映射,如 "5433:5432";宿主机 migrate 用映射后的端口(5433),不是 5432。


4. Compose ------ 加 api

docker-compose.yml 追加 api 服务后:

powershell 复制代码
docker compose up -d --build api
docker compose ps
docker compose logs api --tail 30

curl http://localhost:8080/health
curl http://localhost:8080/api/products

容器内连 PG/Redis → @postgres:5432redis://redis:6379(服务名,不是 localhost)。


5. Compose ------ 加 worker

docker-compose.yml 追加 worker 服务后:

powershell 复制代码
docker compose up -d worker
docker compose logs worker --tail 10

# 下单后看 worker 是否消费
docker compose logs worker --tail 5

6. 环境变量 + 一键启动

.env(宿主机 / compose 变量替换):

env 复制代码
POSTGRES_PASSWORD=你的密码
DATABASE_URL="postgresql://postgres:密码@localhost:5432/nodejs_study?schema=public"
REDIS_URL="redis://localhost:6379"
JWT_SECRET="..."

compose 里 api 环境变量(容器内):

yaml 复制代码
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/nodejs_study?schema=public
REDIS_URL: redis://redis:6379
JWT_SECRET: ${JWT_SECRET}

操作 Compose 库时(migrate / studio / test),临时覆盖,不必改 .env:

powershell 复制代码
$env:DATABASE_URL="postgresql://postgres:密码@localhost:5433/nodejs_study?schema=public"
npx prisma migrate deploy
npx prisma studio
npm test

日常命令:

powershell 复制代码
# 一键启动全部
docker compose up -d --build

# 查看状态 / 日志
docker compose ps
docker compose logs api --tail 30
docker compose logs worker --tail 10

# 停止(Volume 保留)
docker compose down

# 停止并删 Volume(慎用,丢库)
docker compose down -v

连接串速查

场景 DATABASE_URL REDIS_URL
宿主机 npm run dev @localhost:5432 redis://localhost:6379
单容器 docker run API @host.docker.internal:5432 redis://host.docker.internal:6379
Compose 内 api / worker @postgres:5432 redis://redis:6379
宿主机操作 Compose 库 @localhost:5433 redis://localhost:6379
相关推荐
Yana.nice9 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
2601_9605679611 小时前
电商套图自动化效率的工程量化分析——从逐张生成到批量套图的架构演进
运维·架构·自动化
吳所畏惧12 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
张忠琳12 小时前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
HiDev_13 小时前
【非标自动化】2、认识元器件(确定目标)
运维·自动化
Zhang~Ling13 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
爱写代码的森13 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
Elastic 中国社区官方博客14 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
中微极客14 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能
久曲健的测试窝14 小时前
智能座舱自动化测试落地方案:数字仿真搭配实车实测,解决用例运维与场景失真难题
运维