我正在试图用码头集装箱化我们的开发环境.这包括Google Appengine项目以及最终在Google Compute引擎中托管的服务.
我们当前的开发环境引导脚本会在boot2docker中引发弹性搜索和Nginx,其他应用程序在dev_appserver appengine沙盒中的localhost:{product port}上运行.这个过程证明很难管理和维护,因为它需要大量的洞察我们的应用程序如何沟通.
我发现docker-compose的错误是检测到容器之间的循环依赖关系.
Circular import between cs and vbc and aa and sr.
由于此配置仅适用于开发环境(mac osx),所以在将所有产品套件依赖关系连接在一起时,是否有任何建议或想法可以采用不同的方法.
docker-compose.yml的一部分:
elasticsearch:
build: ./compute/containers/elasticsearch/elasticsearch
ports:
- "9200:9200"
environment:
- PROJECT_ID=localhost
Nginx:
build: ./compute/containers/elasticsearch/Nginx
links:
- elasticsearch:localhost
ports:
- "9201:9201"
cs:
build: ./CS
command: dev_appserver.py /src/ --host=0.0.0.0 --admin_host=0.0.0.0 --port=8080 --admin_port=9080 --storage_path=/data/
ports:
- "8080:8080"
- "9080:9080"
volumes:
- /Users/source/CS/src:/src
- /Users/source/CS/data:/data
aa:
build: ./AA
command: dev_appserver.py /src/ --host=0.0.0.0 --admin_host=0.0.0.0 --port=8081 --admin_port=9081 --storage_path=/data/
links:
- vbc:vbc-local
- st:st-local
- elasticsearch:localhost
ports:
- "8081:8081"
- "9081:9081"
volumes:
- /Users/source/AA/src:/src
- /Users/source/AA/data:/data
vbc:
image: google/cloud-sdk
command: dev_appserver.py /src/ --host=0.0.0.0 --admin_host=0.0.0.0 --port=8082 --admin_port=9082 --storage_path=/data/
links:
- cs:cs-local
- sr:sr-local
- sm:sm-local
- ms:ms-local
- st:st-local
- cis:cis-local
- elasticsearch:localhost
ports:
- "8082:8082"
- "9082:9082"
volumes:
- /Users/source/VBC/src:/src
- /Users/source/VBC/data:/data
sr:
build: ./SR
command: dev_appserver.py /src/ --host=0.0.0.0 --admin_host=0.0.0.0 --port=8083 --admin_port=9083 --storage_path=/data/
links:
- cs:cs-local
- aa:aa-local
ports:
- "8083:8083"
- "9083:9083"
volumes:
- /Users/source/SR/src:/src
- /Users/source/SR/data:/data
圆形连接在PR # 1676固定
This是他们如何解决这个问题.简单地说,他们将使容器能够彼此交谈而不链接.我已经将更新添加到Docker Compose文档中:
组合网络
默认情况下,Compose为您的应用程序设置了一个默认网络.服务的每个容器加入默认网络,可以通过服务名称下的DNS进行发现.
Note: Your app’s network is given the same name as the “project name”,which is based on the name of the directory it lives in. See the CLI docs for how to override it.
例如,假设您的应用程序位于名为myapp的目录中,并且您的docker-compose.yml如下所示:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
当您运行docker-compose时,会发生以下情况:
>创建一个名为myapp的网络.
>使用网络配置创建容器.它在网络名称下加入了网络myapp.
>使用db的配置创建容器.它以名称db加入网络myapp.
每个容器现在可以查找主机名web或db并获取相应容器的IP地址.例如,Web的应用程序代码可以连接到URL postgres:// db:5432并开始使用Postgres数据库.
因为web明确地映射一个端口,所以它也可以通过Docker主机网络接口上的端口8000从外部世界访问.
进一步阅读实验Docker网络API:
https://github.com/docker/docker/blob/master/experimental/networking_api.md