docker-compose部署规范-服务命名和端口分配
本规范根据多个项目实践总结,服务命名和端口分配都提现在docker-compose.yml的配置中
服务命名
- 优先采用中间件名称、语言名称对服务进行命名,如下
- mysql
- mongo
- java
- python
- web
- 如果同一类型服务有多个,则采用中横线命名方式进行区分,如下:
- java-auth :java鉴权服务
- web-auth: web鉴权服务
端口命名
- 容器内部名称,不改动原服务端口默认值
- mysql:3306
- mongo:27017
- java:7001
- python:6001
- web: 80(http)、443(https)
- 映射到宿主主机的端口时,采用前置默认+统一分配端口段 组合方式,如某个项目分配一个端口段,比如060~064
- mysql:33060->33060
- mongo:27017->27060
- java: 7060->7001
- python:6060->6001
- web:8060->80
- java-auth :7061->7001(在自己端口段内递增分配)
- web-auth: 8061->80(在自己端口段内递增分配)
- 总计有000~999可以分配,按着端口分配计划,每个产品分配5个端口,一个产品线可以满足200个产品的端口分配
服务间的引用
服务间的引用主要包含两个常见:
- docker-compose文件中的服务引用
- nginx.conf中的服务引用
优先采用"服务名:默认端口”方式,这样在重新部署时不用做调整,例如:
docker-compose中的引用样例
java-auth:
image: java-auth:master
ports:
- "7061:7001"
environment:
spring.datasource.url: jdbc:mysql://mysql:3306/wh_index?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&autoReconnect=true
nginx中的引用样例
server {
listen 80;
location / {
root /usr/src/app;
index index.html;
}
location /api/ {
proxy_pass http://java:7001/api/; #后台服务路径
}
location /api/auth/ {
proxy_pass http://java-auth:7001/api/auth/api/; #菜单服务路径
}
location /api/p/ {
proxy_pass http://python:6001/api/p/;
}
}