微服务设置

时间:2017-11-01 18:39:46

标签: node.js docker-compose microservices

我想通过docker-compose管理几个git repo。我还希望docker-compose所在的项目是一个git repo。所以我有以下组织:

UI-Repo --> .git --> Dockerfile

Server-Repo --> .git --> Dockerfile

Local-Development-Repo --> .git --> docker-compose.yml

不幸的是,由于Docker的限制,我似乎无法访问UI-Repo和Server-Repo dockerfiles。在Local-Development-Repo中使用UI-Repo和Server-Repo的sym链接也不起作用。所以我可以想到两个选择。

  1. Git子模块

    • 这种方法的缺点是我需要复制package.json并在我的dockerfiles中执行npm install,因为node_modules在我的.gitignore上。我希望这纯粹用于开发,理想情况下,应该只使用卷而不是在docker容器中安装依赖项。
  2. 在父目录中设置UI-Repo和Server-Repo,其中包含docker-compose.yml文件。

    • 这种方法的缺点是我希望通过Git跟踪这个父级。我不认为在父目录中有两个git repo的.git会起作用。
  3. 建立具有多个独立git repos的微服务架构的建议做法是什么,并使用docker-compose管理这些项目以进行本地开发?

3 个答案:

答案 0 :(得分:0)

我最终做了类似的事情:

Parent-Folder - docker-compose.yml (sym linked to Local-Development-Repo/docker-compose.yml) - Local-Development-Repo - docker-compose.yml - UI-Repo - Server-Repo

这样,我可以跟踪docker-compose.yml,同时可以通过父文件夹中的docker-compose-up启动所有服务。

答案 1 :(得分:-1)

您无需访问其他UI项目的Dockerfile。 对于所有UI项目,在他们自己的项目中本地构建他们的图像。 然后将这些图像引用到您的docker-compose文件中,如下所示。

在引用时,您可以在docker中安装相应的代码库。 这样,即使您更改了UI代码,也无需再次重建docker镜像。

version: "2"
services:
  UIProjectA:
    image: ui_project_A_local_build:0.0.1
    container_name: ui_project_A_local_build
    ports:
      - "8081:8080"
    volumes:
      - /path/to/local/folder/in/project/A:/path/to/docker/folder
  UIProjectB:
    image: ui_project_B_local_build:0.0.1
    container_name: ui_project_B_local_build
    ports:
      - "8082:8080"
    volumes:
      - /path/to/local/folder/in/project/B:/path/to/docker/folder

答案 2 :(得分:-1)

我怀疑问题只出在你的docker-compose文件中。我有相同的目录结构,它工作正常。您只需将构建上下文设置为repo目录,并从Local-Development-Repo中运行docker-compose。

version: '2.1'
services:
  ui:
    image: ui
    container_name: ui
    build:
      context: ../UI-Repo
  server:
    build:
      context: ../Server-Repo
    image: server
    container_name: server