如何重用docker-compose项目?

我已经使用docker-compose为Web服务器定义了基本configuration,其中包括

  • db :基于MySQL映像,在启动时加载一些自定义模式和数据。
  • tomcat :基于Tomcat映像,在服务器启动时将Web应用程序(分解WAR文件)部署到Tomcat中。

Web应用程序连接到db容器以实现数据持久性。 两者通过docker-compose连接在一起,所以我可以通过docker-compose up -d启动两台服务器。 这很好。 我已经将docker-composeconfiguration,MySQL数据文件(SQL)和Web应用程序构件存储在Git仓库中,其他人可以克隆以便于本地设置。

现在我想使用这个基本configuration作为多个其他项目的起点:对于每个项目,我想使用基础项目,然后在其上进行构build。 我可以使用extendsfunction轻松地扩展docker-compose文件,但在这之前,我需要弄清楚如何重用整个项目,而不必重复它。

在每个项目中,我需要完整的“基础”项目,包括所有的Docker的东西,SQL文件和Web应用程序,然后我会在这里和那里添加东西,像不同的configuration,附加的Web应用程序,等等

什么是这样做的标准方式? 我曾经想过的一些事情:

  • 使用Git的submodulefunction,我会在每个项目中创build一个“基本”子模块,并从那里使用基本function。 缺点: git submodule笨重的可用性(初始化,更新)。
  • 使用Git的subtree特性,我将在每个项目中创build一个“base”目录作为Git子树。 比submodule更容易使用,但将整个“基础”项目(这将是巨大的)复制到每个新项目。

我错过了其他的select吗? 如何在不牺牲重用的前提下满足这些要求?

由于在这里我没有收到答案,所以我给了git submodule方法一个尝试:

在我想要重用“基础”Dockerconfiguration的项目中,我创build了子模块:

 git submodule add https://my.githost/git/projects/base-docker.git base 

这将“基础”项目克隆到本地base文件夹,然后我将其提交并推送到服务器。 其他人现在可以使用这个 – 我添加了文档来展示如何克隆/更新项目:

 # Clone the project git clone https://my.githost/git/projects/consumer-docker.git # CD into the project directory cd consumer-docker # Init the submodule to download the dependencies git submodule update --init 

当“基地”项目发生变化时,我可以简单地运行

 git submodule update --remote --merge 

将子模块更新到最新的master模块,然后提交/推送这些更改。

在重用“基础”项目的项目中,我可以像这样在docker-compose.yaml文件中引用基础项目的服务:

 database: extends: file: base/database.yaml service: database 

到目前为止,这工作得相当好,它避免了跨项目重复configuration,并允许我几乎100%地重用function。