Skip to content

Instantly share code, notes, and snippets.

@rg3915
Last active April 20, 2020 02:15
Show Gist options
  • Select an option

  • Save rg3915/38ac6dc97d6af859f732990de8470ec0 to your computer and use it in GitHub Desktop.

Select an option

Save rg3915/38ac6dc97d6af859f732990de8470ec0 to your computer and use it in GitHub Desktop.
Rodando Django no Docker por linha de comando - somente com Dockerfile - django docker command line - docker django command
*
!requirements.txt
!contrib
!myproject
!manage.py

Rodando Django no Docker

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.

Criando um projeto Django do zero

  • 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.

Criando a imagem e subindo um container com Docker

Criando uma rede antes

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
ARG PYTHON_VERSION='3.8'
FROM juliano777/python:${PYTHON_VERSION} AS builder
WORKDIR /usr/src/app
COPY requirements.txt .
# Install all Python dependencies
RUN pip install -U pip && pip install -r requirements.txt
# Copy files
ADD contrib ./contrib
ADD myproject ./myproject
ADD manage.py .
# Create .env
RUN python contrib/env_gen.py
# Pack files
RUN tar cf /tmp/teste.tar /usr/src/app /usr/local/python/lib
# -----------------------------------------------------------------------------
FROM juliano777/python:${PYTHON_VERSION} AS final
WORKDIR /usr/src/app
COPY --from=builder /tmp/teste.tar /tmp
# Unpack files
RUN tar xf /tmp/teste.tar -C / && rm -rf /tmp/*
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
@rg3915
Copy link
Author

rg3915 commented Apr 20, 2020

Esta imagem ficou bem menor que a primeira:

mydjango              2.0                 226MB
mydjango              1.0                 960MB

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment