首页 > 解决方案 > 如何将 docker-compose 架构和单个项目分成不同的项目?

问题描述

我是 docker-compose 的新手,我正在尝试创建一个可供多个项目使用的架构。想象一下,我的 2 个服务是气流和 postgres。我希望能够对我的架构与我的项目分开进行版本控制。

例如,目前我有项目:project_architectureproject_individual

我希望能够分离这些项目的原因是我可以独立地对每个项目进行差异存储库和版本控制,而不是相互耦合。此外,如果我成功了,我可以创建新的“个人”项目并重用架构。

project_architecture:
── README.md
├── config
│   ├── airflow_container.env
│   ├── postgres.env
├── docker-compose.yml
├── services
│   └── postgres
│       ├── 00_create_user.sh
└── shared
    ├── airflow_requirements.txt
    ├── dags
    │   ├── example_dag.py
project_individual:
├── __init__.py
├── data
│   ├── __init__.py
│   ├── data.py
├── docker
│   ├── create_main_tables.sql
│   └── my_specific_dag.py
├── func
│   ├── __init__.py
|   └── functions.py

如果你看得更仔细,我的个人项目上有一个 docker 文件夹,我计划在其中开发自己的 DAG 和数据库脚本,它们将分别用于 project_architecture Airflow 和 Postgres。此外,我想从我的项目中调用特定的函数、方法、类,比如data/data.py

目前,在我的 docker-compose.yml 文件中,我正在尝试像这样挂载一个外部 DAG(这不起作用):

    volumes:
      - ${PWD}/../project_individual/docker/my_specific_dag.py:/usr/local/airflow/dags/my_specific_dag.py

我不得不认为我所描述的问题已经被使用带有气流的容器解决方案的公司解决了。我可以想象会有一个团队管理中央气流,而开发人员在他们自己的团队中生成他们的项目与架构分离。我很乐意接受任何意见或建议。我的最终目标是确保我的 2 个项目不耦合,并且我可以扩展可以重用相同架构的项目(在 project_architecture 上描述)

标签: dockerdocker-composeairflow

解决方案


您可能可以为每个单独的项目添加更多服务到您的 docker compose,但如果您想单独部署,最简单的方法是创建多个 docker-compose 文件。

这样,您可以有一个 docker-compose.common.yml 文件来详细说明您的公共服务,然后使用 docker extends-compose 的步骤来自定义您的配置。

docker-compose up您甚至可以在使用-f选项期间一次调用多个 docker-compose 文件:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d


推荐阅读