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

Meh*_*van 12 development-environment docker microservices docker-compose

我们正在使用微服务方法来构建我们的产品.我们正在使用一些项目,每个项目都使用docker-compose来运行.问题是在开发环境中,如果我们想要更改多个项目中的代码并测试已开发的代码,我们必须单独运行项目并手动将它们链接在一起.

现在我们要创建一个开发工具包,它可以克隆项目并将它们一起运行并处理链接.docker-compose可以处理多个docker-compose文件吗?如果没有,有没有足够的工具为我们这样做?或者我们的目标是否有任何推荐的方法?

编辑:例如我们有两个项目: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
Run Code Online (Sandbox Code Playgroud)

我们在PROJECT_B中有docker-compose.yml,如下所示:

db:
    image: postgres:9.4
    ports:
      - "5432"

project_b:
    build: .
    command: python2.7 main.py
    links:
        - db
Run Code Online (Sandbox Code Playgroud)

每个项目都可以单独运行并且运行正常.但是如果我们想要改变PROJECT_A和PROJECT_B之间的api,我们需要运行这两个项目并将它们链接在一起来测试我们的代码.现在我们要编写一个开发工具包项目,该项目可以运行这两个项目并在需要时链接它们.这样做的最佳方法是什么?

z0r*_*z0r 7

您可以使用以下extends功能组合来自多个文件的服务docker-compose.将项目放在一个定义明确的位置,并使用相对路径引用它们:

../
??? foo/
?   ??? docker-compose.yml
??? bar/
    ??? docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

富/泊坞窗,compose.yml:

base:
    build: .

foo:
    extends:
        service: base
    links:
        - db

db:
    image: postgres:9
Run Code Online (Sandbox Code Playgroud)

如果你想自己测试这个项目,你会做类似的事情:

sudo docker-compose up -d foo
Run Code Online (Sandbox Code Playgroud)

创建foo_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
Run Code Online (Sandbox Code Playgroud)

现在,您可以测试两种服务:

sudo docker-compose up -d bar
Run Code Online (Sandbox Code Playgroud)

创建bar_foo_1
创建bar_bar_1

  • 请注意,docker-compose v3 不再支持关键字 extends (3认同)

Mat*_*erg 3

我对你的问题不是 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
Run Code Online (Sandbox Code Playgroud)

也可以组合多个 yml 文件,例如
$docker-compose -f [File A].yml -f [File B].yml up -d

2)构建中的每个容器都可以通过compose单独控制。
$docker-compose stop/start/build/ ubuntu_1

3) 使用$docker-compose build只会在已完成更改的地方进行重建。

以下是可能有用的更多信息 https://docs.docker.com/compose/extends/#extending-services

如果以上都不正确,请提供构建示例。