繁体   English   中英

多个应用程序和共享容器与 docker-compose

[英]Multiple applications and shared containers with docker-compose

我试图了解这里最好的方法是什么。

一台服务器,多个应用程序,一些容器使用相同的图像。

示例#1:

每个应用程序有两个docker-compose.yml文件

services:
  db:
    image: mariadb:latest
    ...

  app:
    image: app/one
    depends_on:
      - db
    ...
services:
  db:
    image: mariadb:latest
    ...

  app:
    image: app/two
    depends_on:
      - db
    ...

示例#2:

将所有内容docker-compose.yml

services:
  db:
    image: mariadb:latest
    ...

  app1:
    image: app/one
    depends_on:
      - db
    ...

  app2:
    image: app/two
    depends_on:
      - db
    ...

有通用的做法吗?

两种常见的做法:

  1. 使用应用程序的源代码docker-compose.yml文件(通常在Dockerfile旁边的存储库的根目录中)

  2. 不要在应用程序之间共享数据库(容器可以很容易地启动第二个)

这两件事都会建议两个单独docker-compose.yml文件。

在您有多个正在合作的服务的情况下,单个docker-compose.yml文件可能有意义,因此在没有其他服务的情况下启动一个是没有意义的。 (You have a REST API service, but it has an associated Nginx frontend and a specialized caching service that all go together, for example.) Calling from one Docker Compose setup to another is slightly tricky and at small scale it can make sense to just把紧密相连的东西放在一起。

在更大的范围内,拥有一个仅包含部署规范的单独存储库也是有意义的; 这对于像 Kubernetes 之类的集群管理器来说更有意义,即使这样,是否拥有一个仅包含部署数据的存储库或将部署设置与服务一起保留也是一种风格选择。

这取决于 app1 和 app2 彼此之间的相关程度。

在我看来,应用程序是一组紧密相关的事物:一个或多个服务、数据库和前端。 在这种情况下,将它们全部放在同一个 docker 组合中是实现此目的的方法。

在您的情况下,如果您的 app1 必须使用与 app2 相同的数据库或表,那么将它们放在同一个 docker compose 中是完全可以的。 另一方面,如果 app1 和 app2 使用不同的数据库并且彼此不交互,那么它们实际上是分离和独立的应用程序,因此它们应该运行在不同的 docker compose 配置上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM