如何重用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。 我可以使用extends
function轻松地扩展docker-compose文件,但在这之前,我需要弄清楚如何重用整个项目,而不必重复它。
在每个项目中,我需要完整的“基础”项目,包括所有的Docker的东西,SQL文件和Web应用程序,然后我会在这里和那里添加东西,像不同的configuration,附加的Web应用程序,等等
什么是这样做的标准方式? 我曾经想过的一些事情:
- 使用Git的
submodule
function,我会在每个项目中创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。