Python Web应用程序项目结构和docker支持

时间:2015-09-26 17:17:00

标签: python deployment configuration flask docker

描述

例如,我有一个以下烧瓶项目结构:

├ project_root/
├── .gitignore
├── README.md
├── docs
├── requirements.txt
├── yourapp
│   ├── templates/
│   ├── static/
│   ├── migrations/
│   ├── config.py
│   ├── app1/
│   │   ├── __init__.py
│   │   ├── controllers.py
│   │   ├── forms.py
│   │   └── models.py
│   ├── app2/
│   │   └── ...
│   └── app.py
└── tests/

我有以下要求:

  1. 我想用nginx后面的gunicorn部署它,用rabbitmq和celery以及postgresql作为数据库。 Nginx提供来自yourapp/static
  2. 的静态文件
  3. 我希望所有配置都是我的代码库的一部分,例如所有nginx,gunicorn和其他配置都应该放在同一个git存储库中。
  4. 我想使用码头工具并拥有以下码头图片:web-app,postgresql,nginx,rabbitmq和celery-worker。
  5. 我希望能够从这个git存储库构建所有的docker镜像
  6. 我想使用Dockerfiles
  7. 问题

    如果我想满足所有这些要求,我应该在哪里放置配置文件和Dockerfiles?

    其他信息

    我有一些想法,但目前尚不清楚。例如我知道,我实际上不需要用于postgresql映像的Dockerfile,我可以使用来自Docker hub的仅限卷的容器和postgres映像。

    我无法解决的主要问题是nginx和应用程序范围的干扰:对于nginx的Dockerfile,静态文件应该是可见的,对于gunicorn的Dockerfile,整个烧瓶应用程序也应该是可见的,但我不能放2 Dockerfiles在同一个文件夹中。

    另一个问题是,我希望将带有烧瓶代码的文件夹(yourapp)与配置文件夹分开,并且所有配置文件(nginx,gunicorn,celery)都应该存储在同一个文件夹中。

1 个答案:

答案 0 :(得分:3)

我会使用docker-compose并执行类似此示例docker-compose.yml

的操作
web-app:
    build: .
    links:
         - postgresql
         - rabbitmq
    volumes_from:
         - config

config:
    build: .
    dockerfile: dockerfiles/Dockerfile.config

postgresql:
    image: postgres:9.4
    volumes_from:
        - postgresql-data

postgresql-data:
    build: dockerfiles/postgresql-data/

nginx:
    build: .
    dockerfile: dockerfiles/Dockerfile.nginx
    links:
        - web-app

rabbitmq:
    image: rabbitmq:3.5

celery-worker:
    build: .
    dockerfile: dockerfiles/Dockerfile.celery-worker
    links:
        - rabbitmq

web-app将使用Dockerfile中的默认project_root/,所有其他服务将在子目录中使用命名的dockerfile(它们可以放置在您想要的任何位置,它们可以是在根中也是如此)。只要build指向根目录,他们就可以访问所有文件。

我会将您的应用程序配置放在一个单独的容器中,并使用volumes_from使其可供应用程序使用,以便您可以使用具有不同配置的相同无状态应用程序容器。

我认为这符合您的所有要求。