Docker Compose.yml存放位置及多服务编排配置咨询
Docker Compose 管理多服务应用的最佳实践与配置示例
两种compose.yml存放方案对比
- 单项目独立compose.yml:每个服务项目下单独维护自己的compose文件,适合开发阶段各自调试,但部署时需要分别启动两个compose,依赖协调麻烦,不利于整体运维。
- 统一根目录compose.yml:在两个服务项目的父目录(或单独的配置目录)维护一个全局compose文件,将两个服务纳入同一应用栈管理,部署、启停、扩缩容更便捷,是生产环境的主流做法。
通用推荐方案
开发阶段,两个项目可各自保留本地调试用的compose.yml(比如你的rest.galleries已有的文件);服务器部署时,建议使用全局统一的compose.yml,把ng.galleries和rest.galleries放在同一配置中,实现一键管理。
配置示例
1. 全局部署用docker-compose.yml(父目录)
假设项目结构如下:
galleries-stack/ ├── ng.galleries/ │ └── Dockerfile ├── rest.galleries/ │ ├── Dockerfile │ └── docker-compose.yml(本地开发用) └── docker-compose.yml(全局部署用)
全局compose配置内容:
version: '3.8' services: ng.galleries: # 从ng项目目录构建镜像 build: ./ng.galleries # 映射主机8001端口到容器内Nginx默认80端口 ports: - "8001:80" # 确保rest服务先启动(仅控制启动顺序,不等待服务就绪) depends_on: - rest.galleries # 加入自定义网络,服务间可通过服务名通信 networks: - galleries-network rest.galleries: build: ./rest.galleries ports: - "8000:8000" # 挂载独立卷存储日志和数据 volumes: - rest-galleries-logs:/opt/app/logs # 替换为容器内实际日志路径 - rest-galleries-data:/opt/app/data # 替换为容器内实际数据存储路径 networks: - galleries-network # 可选:添加健康检查,确保服务就绪后再让前端连接 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/actuator/health"] interval: 10s timeout: 5s retries: 3 # 定义命名卷,持久化存储数据 volumes: rest-galleries-logs: rest-galleries-data: # 自定义桥接网络,隔离应用栈 networks: galleries-network: driver: bridge
2. 前端本地开发用docker-compose.yml(ng.galleries项目内)
如果开发时rest服务在本地IDE运行(而非容器),可配置如下:
version: '3.8' services: ng.galleries: build: . ports: - "8001:80" # 允许容器访问主机本地服务 extra_hosts: - "host.docker.internal:host-gateway"
关键说明
- 自定义网络
galleries-network中,前端容器可直接通过http://rest.galleries:8000访问后端服务,无需依赖主机IP。 depends_on仅控制启动顺序,若需等待后端服务完全就绪,需配合healthcheck和depends_on的condition参数(Compose 2.1+支持)。- 命名卷比绑定挂载更适合生产环境,避免主机路径权限问题。
内容的提问来源于stack exchange,提问作者CraigFoote
相关产品推荐
相关产品推荐

