git - 如何重用 docker-compose 项目?

标签 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 应用程序,然后我会在这里和那里添加一些东西,比如不同的配置、额外的 Web 应用程序,等等

    这样做的标准方法是什么?我想到了几件事:
  • 使用 Git 的 submodule功能,我会在每个项目中创建一个“基础”子模块并从那里使用基础功能。缺点:git submodule 的可用性很差(初始化,更新)。
  • 使用 Git 的 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/

    相关文章:

    docker - Hasura 操作处理程序不存在(名称或服务未知)

    docker - nginx 的 gitlab 容器代理传递不适用于推送请求

    mongodb - Docker 无法通过纯数据容器启动带有附加卷的 MongoDb

    mysql - Wordpress 不适用于 docker compose

    git - 如何删除检查同一存储库的 git 子模块的重复数据?

    git - git 的 master 分支应该包含什么

    git push --receive-pack 选项和安全性 : how to prevent from hacking?

    android - Android Studio 中分离的 HEAD 问题

    node.js - Dockerized NGINX 配置与在 Azure 上运行的 ReactJS 应用程序(容器实例)

    docker - 使用 ansible docker_service 模块在 docker-compose.yml 中仅启动一项服务