我想使用docker-compose来维护容器,还有一个API服务器集群。
他们使用相同的图像构建,我知道docker-compose scale app=5
将启动5个容器,但它们都相同,包括端口设置。
我想像这样运行多个容器:
services:
# wx_service_cluster
wx_service_51011:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/go/src/wx_service
ports:
- "51011:8080"
wx_service_51012:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/go/src/wx_service
ports:
- "51012:8080"
wx_service_...:
....
THERE ARE ALMOST 100 SERVICES NEED TO BE WROTE
ANYONE CAN HELPS ME TO MAKE IT SIMPLER.
我能让它变得更简单吗?
就像一个shell循环:
for each_port in $( seq 51011 51040 )
{
wx_service_${each_port}:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/go/src/wx_service
ports:
- "${each_port}:8080"
}
答案 0 :(得分:1)
简单回答您的实际问题:使用ENV变量并可能将其与dotenv https://docs.docker.com/compose/environment-variables/
结合使用services:
foo_{$instance1}
ports:
- "${instance1}:8080"
foo_{$instance12}
ports:
- "${instance2}:8080"
但是这不会帮助你“为WX生成带有X服务条目的docker-compose文件”..你似乎计划某种“托管”。
你应该退一步,而不是使用随机端口分配和使用docker inspect来查找端口 - 请参阅这里的示例https://github.com/EugenMayer/docker-sync/blob/master/lib/docker-sync/sync_strategy/unison.rb#L199 ..所以基本上你要么使用模板系统来生成docker-compose .yml文件 - 例如比如https://github.com/markround/tiller ..然后你用静态前缀生成服务,比如wx_service_ ..然后你使用不同的脚本(为你nginx / haproxy)配置和上游每个,找到名称和端口(使用动态检查。
如果我是对的,你真的会采用某种托管方案而且你是商业化的 - 你甚至可能会重新考虑这个并为游戏添加领事。让每个wx服务在领事中注册为服务,然后使用额外的httpd乘客(如nginx / haproxy)重新配置自身,并使用tiller + consul watch
在passender中添加后端+前端/上游+服务器条目。
最后一个只是下一个级别的东西,但如果你“商业化”这样做,你不应该做你最初要求的 - 然而,如果你选择,使用如上所述的dotenv