Atualmente estou construindo um aplicativo django do jeito que você quer.
Eu uso o docker-compose para fazer isso. Este é o meu docker-compose.yml
version: '2'
services:
nginx:
container_name: nginx-container
links:
- uwsgi
build: ./nginx
ports:
- "8888:80"
volumes_from:
- uwsgi
uwsgi:
container_name: uwsgi-container
build: ./uwsgi
expose:
- "8001"
volumes:
- ./code/conf:/opt/conf
- ./code/app:/opt/app
Dockerfile for uWSGI:
FROM python:3.5
RUN ["pip", "install", "uwsgi"]
CMD ["uwsgi", "--master", "--ini", "/opt/conf/uwsgi.ini"]
Dockerfile for nginx:
FROM nginx
RUN ["rm", "/etc/nginx/conf.d/default.conf"]
RUN ["ln", "-s", "/opt/conf/nginx.conf", "/etc/nginx/conf.d/"]
CMD ["nginx", "-g", "daemon off;"]
E esta é a minha árvore de diretórios:
├── README.md
├── code
│ ├── app
│ └── conf
├── collectstatic.sh
├── docker-compose.yml
├── install.sh
├── migrate.sh
├── nginx
│ └── Dockerfile
├── restart.sh
├── upgrade.sh
├── uwsgi
│ └── Dockerfile
Portanto, eu construo minhas imagens com docker-compose build
e, em seguida, inicio novos contêineres em segundo plano com docker-compose up -d
, então posso executar algumas tarefas de configuração, como instalar o django, gerar chave secreta ou o que você quiser que seu contêiner esteja pronto.
Os contêineres nginx e uwsgi usam volumes compartilhados para ler arquivos de configuração E para se comunicar com um soquete de arquivo.
Bem, não tenho certeza se é o melhor caminho, mas é um trabalho em andamento.