例如,我有一个以下烧瓶项目结构:
├ 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/
我有以下要求:
yourapp/static
如果我想满足所有这些要求,我应该在哪里放置配置文件和Dockerfiles?
我有一些想法,但目前尚不清楚。例如我知道,我实际上不需要用于postgresql映像的Dockerfile,我可以使用来自Docker hub的仅限卷的容器和postgres映像。
我无法解决的主要问题是nginx和应用程序范围的干扰:对于nginx的Dockerfile,静态文件应该是可见的,对于gunicorn的Dockerfile,整个烧瓶应用程序也应该是可见的,但我不能放2 Dockerfiles在同一个文件夹中。
另一个问题是,我希望将带有烧瓶代码的文件夹(yourapp)与配置文件夹分开,并且所有配置文件(nginx,gunicorn,celery)都应该存储在同一个文件夹中。
答案 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
使其可供应用程序使用,以便您可以使用具有不同配置的相同无状态应用程序容器。
我认为这符合您的所有要求。