使用docker运行多个项目,每个docker-compose运行

我们正在使用微服务的方法来build立我们的产品。 我们正在使用一些使用docker-compose来运行的项目。 问题是,在开发环境中,如果我们想改变多个项目中的代码并testing开发的代码,我们必须单独运行项目并手动将它们连接起来。

现在我们要创build一个开发工具包来克隆项目,并将它们一起运行并处理链接。 docker-compose可以处理多个docker-compose文件吗? 如果没有,有没有足够的工具来为我们做这件事? 还是有任何build议的方法来实现我们的目标?

编辑:例如,我们有两个项目:PROJECT_A和PROJECT_B。 每个人都有自己的docker-compose.yml,每个人都需要运行postgresql。 我们在PROJECT_A中有docker-compose.yml,像这样:

db: image: postgres:9.4 ports: - "5432" project_a: build: . command: python2.7 main.py links: - db 

我们在PROJECT_B中有docker-compose.yml,像这样:

 db: image: postgres:9.4 ports: - "5432" project_b: build: . command: python2.7 main.py links: - db 

每个项目都可以单独运行,工作正常。 但是如果我们想要改变PROJECT_A和PROJECT_B之间的API,我们需要运行两个项目并将它们连接在一起来testing我们的代码。 现在我们要编写一个开发工具包项目,可以运行这两个项目,并在需要时连接它们。 什么是最好的方法来做到这一点?

您可以通过使用docker-composeextendsfunction组合多个文件中的服务来完成此操作。 把你的项目放在一个明确定义的位置,并用相对path引用它们:

 ../ ├── foo/ │ └── docker-compose.yml └── bar/ └── docker-compose.yml 

富/泊坞窗,compose.yml:

 base: build: . foo: extends: service: base links: - db db: image: postgres:9 

如果你想自己testing这个项目,你可以这样做:

 sudo docker-compose up -d foo 

创buildfoo_foo_1

酒吧/搬运工-compose.yml:

 foo: extends: file: ../foo/docker-compose.yml service: base links: - db bar: build: . extends: service: base links: - db - foo db: image: postgres:9 

现在您可以一起testing这两个服务:

 sudo docker-compose up -d bar 

创buildbar_foo_1
创buildbar_bar_1

对你的问题不是100%肯定的,所以这将是一个广泛的答案。

1)如果在同一台机器或服务器集群上运行,所有文件都可以在同一个组合文件中

 #proxy haproxy: image: haproxy:latest ports: - 80:80 #setup 1 ubuntu_1: image: ubuntu links: - db_1:mysql ports: - 80 db1: image: ubuntu environment: MYSQL_ROOT_PASSWORD: 123 #setup 2 ubuntu_2: image: ubuntu links: - db_2:mysql ports: - 80 db2: image: ubuntu environment: MYSQL_ROOT_PASSWORD: 123 

也可以将几个yml文件组合起来
$docker-compose -f [File A].yml -f [File B].yml up -d

2)build造中的每个集装箱都可以单独控制。
$docker-compose stop/start/build/ ubuntu_1

3)使用$docker-compose build只会重build修改已完成的地方。

这里有更多有用的信息https://docs.docker.com/compose/extends/#extending-services

如果以上都不是正确的请build立的例子。

对于有同样问题的人来说,这是我们的方法:

现在我们每个项目都有一个docker-compose,可以独立运行。 我们还有一个名为“开发套件”的项目,它克隆需要的项目并将其存储在一个目录中。 我们可以使用类似的命令来运行我们的项目:

 python controller.py --run projectA projectB 

它使用docker-compose up命令运行每个项目。 然后,当所有项目启动并运行时,通过使用以下命令将所有其他项目的主要docker的IP添加到/ etc / hosts ips,开始将其他项目添加到其他项目中:

 # getting contaier id of projectA and projectB CIDA = commands.getoutput("docker-compose ps -q %s" % projectA) CIDB = commands.getoutput("docker-compose ps -q %s" % projectB) # getting ip of container projectA IPA = commands.getoutput("docker inspect --format '{{ .NetworkSettings.IPAddress }}' %s" % CIDA) 

现在,将projectB的请求发送到projectA,我们只需要在projectB的设置中定义projectA IP为“projectA”。