https://hub.docker.com/_/django/
Deprecated
"This image is officially deprecated in favor of the standard python image, and will receive no further updates after 2016-12-31 (Dec 31, 2016). Please adjust your usage accordingly."
Veja o Dockerfile.
- Crie virtualenv na sua máquina
- Crie o projeto Django
- Crie o requirements.txt
# Criando o projeto Django
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install django==2.2.12 dj-database-url python-decouple django-extensions
pip freeze > requirements.txt
# pip install -r requirements.txt
django-admin startproject myproject .
cd myproject
python ../manage.py startapp core
cd ..
mkdir contrib
# Criando uma pasta chamada contrib com um env_gen.py
cat << EOF > contrib/env_gen.py
#!/usr/bin/env python
"""
Django SECRET_KEY generator.
"""
from django.utils.crypto import get_random_string
chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
CONFIG_STRING = """
DEBUG=True
SECRET_KEY=%s
ALLOWED_HOSTS=127.0.0.1,.localhost,*
#DATABASE_URL=postgres://USER:PASSWORD@HOST:PORT/NAME
""".strip() % get_random_string(50, chars)
# Writing our configuration file to '.env'
with open('.env', 'w') as configfile:
configfile.write(CONFIG_STRING)
EOF
Veja aqui como configurar o settings.py.
Ou, você pode clonar algum projeto do Github.
docker network create mynet
docker network ls
# Gerando a imagem.
docker image build -t mydjango:1.0 .
Isto requer um comando especial, leia tutorial.sh.
# Gerando a imagem com um tamanho menor.
docker image build -t mydjango:2.0 \
--compress --force-rm --no-cache \
--rm --squash .
Rodando o container
docker container run -itd \
--name django2 \
--hostname django2 \
--network mynet \
-p 8000:8000 \
mydjango:2.0
Aplicação estará rodando em localhost:8000
Dentro do container crie um arquivo com as variáveis de ambiente, para isso rode o comando:
docker container exec -ti django2 python contrib/env_gen.py
Ou você pode fazer, a partir da sua máquina local:
cd /tmp/
vim .env
DEBUG=True
SECRET_KEY=your_secret_key
ALLOWED_HOSTS=127.0.0.1,.localhost,*
#DATABASE_URL=postgres://USER:PASSWORD@HOST:PORT/NAME
DATABASE_URL=postgres://myuser:123@mypg:5432/mydb
Se quiser rodar o migrate no container digite
# CONTAINER ID ou NAME do container.
docker container exec -ti django2 python manage.py migrate
docker container exec -ti django2 python manage.py createsuperuser
Esta imagem ficou bem menor que a primeira: