如何重用docker-compose项目?

时间:2016-02-29 14:19:10

标签: git docker docker-compose

我已经使用docker-compose为Web服务器定义了一个基本配置,包括

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

Web应用程序连接到db容器以获取数据持久性。两者都通过docker-compose连接在一起,因此我可以docker-compose up -d启动两个服务器。这非常有效。我已将docker-compose配置,MySQL数据文件(SQL)和Web应用程序工件存储在Git仓库中,其他人可以克隆以便于本地设置。

现在我想使用这个基本配置作为多个其他项目的起点:对于每个项目,我想使用基础项目,然后在此基础上构建。我可以使用extends功能轻松扩展docker-compose文件,但在我能够做到这一点之前,我需要弄清楚如何重用整个项目而不必复制它。

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

这样做的标准方法是什么?我想过的几件事情:

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

我是否错过了其他选择?如何在不牺牲重用的情况下满足这些要求?

1 个答案:

答案 0 :(得分:1)

由于我在这里没有得到答案,我尝试了git submodule方法:

在我想重用“基础”Docker配置的项目中,我创建了子模块:

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

将“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

到目前为止,这项工作相当不错,它避免了跨项目重复配置,并且允许我100%重复使用功能。