Dockerização refere-se ao processo de encapsular uma aplicação Django e suas dependências em um contêiner leve e portátil. Esses contêineres operam independentemente do sistema subjacente, garantindo consistência nos ambientes de desenvolvimento, teste e implantação.
Benefícios do Docker para Projetos Django:
O Docker oferece uma infinidade de vantagens para desenvolvedores Django. Um benefício chave é a garantia de consistência em vários ambientes. Ao empacotar o aplicativo Django com todas as suas dependências, o Docker elimina o dilema “mas funciona na minha máquina”. Esta uniformidade se estende desde configurações de desenvolvimento local até implantações em produção, promovendo uma colaboração mais suave e reduzindo problemas de compatibilidade.
Além disso, o Docker simplifica significativamente o processo de implantação. Sua abordagem baseada em contêineres simplifica o fluxo de trabalho de implantação, permitindo que os desenvolvedores empacotem a aplicação Django junto com suas configurações e dependências em uma única unidade, facilmente implantável em diferentes servidores ou plataformas na nuvem.
Configurando o Docker para Django
Passos para Instalação do Docker:
Instalar o Docker é o primeiro passo para dockerizar sua aplicação Django. O Docker fornece guias de instalação abrangentes para vários sistemas operacionais em seu site oficial. Para a maioria dos sistemas, o Docker Desktop é a opção preferida para um processo de instalação direto.
- Selecione Seu Sistema Operacional: Visite o site do Docker e baixe o Docker Desktop para o seu sistema operacional específico. Siga as instruções na tela para completar a instalação.
- Verifique a Instalação: Uma vez instalado, verifique a instalação do Docker executando docker –version no seu terminal ou prompt de comando. Este comando deve exibir a versão instalada do Docker, confirmando uma instalação bem-sucedida.
Configurando o Docker para um Projeto Django:
Após instalar o Docker, você terá que criar um arquivo chamado Dockerfile dentro do projeto Django, onde a configuração atual será adicionada, criando como resultado a imagem que posteriormente será usada para criar o container…
- Crie um Dockerfile: No diretório raiz do seu projeto Django, crie um arquivo chamado Dockerfile. Este arquivo conterá instruções para construir a imagem Docker para seu aplicativo Django.
project_directory/
│
├── Dockerfile # <-------------
├── DjangoProject/
├── DjangoApp/
└── manage.py
BashCriando um Dockerfile para Django
Um Dockerfile é um arquivo de texto que contém um conjunto de instruções necessárias para construir uma imagem Docker. Ele especifica o ambiente e a configuração necessária para que sua aplicação Django seja executada dentro de um contêiner Docker.
Os componentes necessarios para o Dockerfile para nosso projeto Django:
1 – Declaração da Imagem Base: Comece seu Dockerfile declarando a imagem base. Tipicamente, a imagem base para aplicações Django é uma imagem oficial do Python.
Por exemplo:
FROM python:3.9
Dockerfile2 – Definindo o Diretório de Trabalho: Defina o diretório de trabalho dentro do contêiner onde seu projeto Django residirá:
WORKDIR /app
Dockerfile3 – Copiando Requisitos e Instalando Dependências: Copie o arquivo requirements.txt
para dentro do contêiner e instale as dependências. Este passo garante que os pacotes Python necessários para seu aplicativo Django sejam instalados dentro do contêiner Docker:
# Instale as dependências
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
Dockerfile4 – Copiando Arquivos do Projeto Django: Copie todo o diretório do projeto Django para dentro do contêiner:
COPY . /app/
Dockerfile5 – Definindo Variáveis de Ambiente e Executando a Aplicação: Defina quaisquer variáveis de ambiente necessárias e o comando para iniciar a aplicação Django:
# Exponha a porta que a aplicação usará
EXPOSE 8000
DockerfileGuia Passo a Passo:
Aqui está um guia passo a passo para escrever um Dockerfile especificamente adaptado para aplicações Django:
- Crie um novo arquivo chamado Dockerfile no diretório raiz do seu projeto Django.
- Declare a imagem base usando
FROM python:3.9
. - Defina o diretório de trabalho dentro do contêiner com
WORKDIR /app
. - Copie o arquivo
requirements.txt
e instale as dependências. - Copie todo o diretório do projeto Django para dentro do contêiner
COPY . /app/
. - Exponha a porta que a aplicação usará
EXPOSE 8000
.
Com isso o arquivo Dockerfile precisa estar desta maneira:
FROM python:3.9
# Defina o diretorio que ira copiar os arquivos
WORKDIR /app
# Instale as dependências no container
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copie os dados do diretorio local para o diretorio do container que foi criado acima
COPY . /app/
# Exponha a porta que a aplicação usará
EXPOSE 8000
DockerfileDocker Compose para Aplicações Multi-Contêiner
O Docker Compose é uma ferramenta que permite aos desenvolvedores definir e gerenciar aplicações Docker multi-contêiner. Ele simplifica o processo de definição, execução e conexão de múltiplos contêineres Docker, sendo particularmente útil para aplicações complexas com serviços interconectados, como aplicações Django que dependem de bancos de dados ou outros serviços.
Neste exemplo, criaremos um arquivo docker-compose.yml
para gerenciar dois contêineres: o contêiner da aplicação Python + Django e um contêiner de banco de dados para PostgreSQL.
Papel do Docker Compose em Aplicações Django:
Em uma configuração típica de aplicação Django, serviços adicionais como bancos de dados (por exemplo, PostgreSQL, MySQL) ou sistemas de cache (por exemplo, Redis) complementam o servidor central Django. O Docker Compose ajuda a orquestrar esses serviços, definindo suas configurações e interconexões dentro de um único arquivo YAML.
Criando um docker-compose.yml para nossa aplicação Django:
Para criar um arquivo docker-compose.yml
adaptado para nossa aplicação Django, siga estes passos:
- Crie um Novo Arquivo: Comece criando um novo arquivo chamado
docker-compose.yml
no diretório raiz do seu projeto Django (mesmo lugar onde voce criou o arquivo Dockerfile). - Definindo Serviços Django e Banco de Dados: Defina os serviços necessários para sua aplicação Django, como
web
para o servidor Django edb
para o banco de dados. Especifique as configurações necessárias para cada serviço. Um exemplo do arquivo:
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:latest # <--- pegando a imagem direto do docker
environment:
POSTGRES_DB: mydb
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
YAMLExplicação da Configuração YAML:
O serviço web
constrói a imagem Docker a partir do diretório atual, executa o servidor de desenvolvimento Django na porta 8000 dentro do container e configura um volume para recarregamento de código em tempo real.
Ah, ja iria me esquecer voce viu que o projeto django dentro do container esta 8000? Lembra que nos espomos a porta 8000 no dockerfile tambem? Pois bem no codigo acima voce ve que estamos apontando a porta interna onde o django esta se comunicando para a porta host do container. Assim podemos ter acesso na nossa maquina.
O serviço db
usa a imagem do PostgreSQL e define variáveis de ambiente para configuração do banco de dados que serão usadas para inserir nas configurações do Django posteriormente.
Executando o Docker Compose:
Execute o comando docker-compose up
no mesmo diretório onde seu arquivo docker-compose.yml
está localizado. O Docker Compose lê o arquivo e inicia os serviços definidos.
E qual é a relação entre Dockerfile e docker-compose.yml?
A relação entre o Dockerfile e o arquivo docker-compose.yml
está em seus papéis dentro de uma aplicação baseada em Docker:
- Dockerfile: Define as instruções de configuração para construir uma única imagem Docker. Ele foca na configuração de um serviço contêinerizado específico (por exemplo, um aplicativo Django, um banco de dados). Este arquivo descreve como criar uma imagem de contêiner individual.
- docker-compose.yml: Orquestra e gerencia múltiplos contêineres como uma aplicação coesa. Este arquivo descreve as relações entre diferentes serviços, especificando como vários contêineres interagem, suas configurações, dependências, rede e volumes.
Estrutura do Projeto:
Se você ja esta acostumado com a estrutura de arquivos de um projeto django. Assim que deve ficar o mesmo depois de adicionar os arquivos Docker e docker-compose.yml..
project_directory/
│
├── manage.py
├── DjangoApp/
| └── ...
├── DjangoProject/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── ...
├── Dockerfile
├── requirements.txt
└── docker-compose.yml
BashConclusão
Dockerizar uma aplicação Django fornece uma maneira eficiente de encapsular, implantar e gerenciar seus projetos. Através deste passo-a-passo, nos aprofundamos nos conceitos fundamentais do Docker e demonstramos como conteinerizar um aplicativo Django usando Docker e docker-compose.
Ao aproveitar a tecnologia de conteinerização do Docker, os desenvolvedores podem garantir consistência em ambientes de desenvolvimento, teste e produção, promovendo uma colaboração mais fácil e fluxos de trabalho de implantação mais suaves.
O Docker simplifica o processo de empacotamento do seu aplicativo Django e suas dependências em um contêiner portátil, eliminando problemas relacionados ao ambiente e facilitando a escalabilidade contínua.
Ao navegar em seu aprendizado de Docker e Django, lembre-se de que este guia serve como ponto de partida. Experimente recursos adicionais do Docker, ajuste suas configurações e mergulhe em estratégias avançadas de implantação para otimizar seu pipeline de desenvolvimento.