首页 > 解决方案 > 使用 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
    ...

有没有普遍的做法?

标签: dockerdocker-compose

解决方案


两种常见的做法:

  1. 使用应用程序的源代码签入一个docker-compose.yml文件(通常位于存储库的根目录旁边Dockerfile

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

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

在您有多个正在合作的服务的情况下,单个docker-compose.yml文件可能有意义,因此在没有另一个的情况下启动一个文件是没有意义的。(例如,您有一个 REST API 服务,但它有一个关联的 Nginx 前端和一个专门的缓存服务,所有这些都结合在一起。)从一个 Docker Compose 设置调用到另一个设置有点棘手,并且在小规模下它可以有意义把紧密相连的东西放在一起。

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


推荐阅读