我已经使用 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 应用程序,然后我会在这里和那里添加一些东西,比如不同的配置、额外的 Web 应用程序,等等
这样做的标准方法是什么?我想到了几件事:
submodule
功能,我会在每个项目中创建一个“基础”子模块并从那里使用基础功能。缺点:git submodule
的可用性很差(初始化,更新)。 subtree
功能,我会在每个项目中创建一个“基本”目录作为 Git 子树。比 submodule
更易于使用,但是将整个“基础”项目(这将是巨大的)复制到每个新项目中。 我错过了其他选择吗?如何在不牺牲重用的情况下满足这些要求?
最佳答案
由于我在这里没有收到答案,所以我给了git submodule
尝试一下:
在我想重用“基础”Docker 配置的项目中,我创建了子模块:
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
到目前为止,这运行得很好,它避免了跨项目的重复配置,并且允许我几乎 100% 地重用功能。
关于git - 如何重用 docker-compose 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35701883/