我已经使用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应用程序,然后我会在这里和那里添加内容,就像不同的配置,附加网络应用程序等。
这样做的标准方法是什么?我想过的几件事情:
submodule
功能,我会在每个项目中创建一个“基础”子模块,并使用那里的基本功能。缺点:git submodule
(初始化,更新)的笨拙可用性。subtree
功能,我会在每个项目中创建一个“基本”目录作为Git子树。比submodule
更容易使用,但复制整个“基础”项目(这将是巨大的)到每个新项目。我是否错过了其他选择?如何在不牺牲重用的情况下满足这些要求?
答案 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%重复使用功能。