Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

[Dúvida] Imagem Django

Olá, pessoal Alguém aí pode me dar um exemplo de como construir uma imagem baseada em um projeto Django?

7 respostas
solução!

Oi Bruno, tudo bem?

Aqui está um exemplo que resolveria isso que você puxou:

  1. Crie um arquivo Dockerfile no diretório raiz do seu projeto Django. O Dockerfile é um arquivo de texto que contém instruções para o Docker sobre como construir a imagem.
  2. Adicione as seguintes linhas ao seu Dockerfile para especificar a imagem base e instalar as dependências do projeto:
FROM python:3.8

WORKDIR /app

COPY requirements.txt /app
RUN pip install -r requirements.txt

3- Adicione mais linhas ao Dockerfile para copiar os arquivos do seu projeto para a imagem e executar os comandos necessários para inicializar o servidor Django:

COPY . /app
RUN python manage.py collectstatic --no-input

EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

4- Save o Dockerfile e execute o comando docker build na linha de comando para construir a imagem a partir do seu projeto Django:

$ docker build -t my-django-project .

Isso vai construir a imagem e vai salvar com o nome "my-django-project". Lembrando que é possível usar o comando docker run para iniciar um contêiner a partir da imagem e executar o servidor Django:

$ docker run -p 8000:8000 my-django-project

Isso iniciará o contêiner e exporá a porta 8000 do contêiner para a porta 8000 do host, permitindo que você acesse o servidor Django em http://localhost:8000/.

Algo assim!

Ainda é possível adicionar mais instruções ao Dockerfile para adicionar recursos adicionais à imagem, como suporte a ambientes de desenvolvimento ou integração contínua, mas imagino que isso vai ser tratado no meio da Formação DevOps.

Espero ter ajudado e bons estudos,

Abcs!

Obrigado, Natan. A sua solução me deu uma boa orientação, mas quando eu vou gerar uma imagem docker ocorre um erro por causa da lib 'psycopg2'. E quando eu comento ela no meu requirements.txt, na hora de rodar o container da erro por que o sistema depende dessa lib.

Fala Bruno!

Opa, que bom que consegui ajudar! :) Sobre o outro erro que você está recebendo, ele pode ser causado por um problema justamente com a biblioteca psycopg2 no seu ambiente Docker e ela é necessária para conectar a bancos de dados PostgreSQL no Python, e se o seu sistema depende dela, é importante incluí-la no seu ambiente Docker.

Uma possível solução é adicionar a linha psycopg2 ao seu arquivo requirements.txt, que especifica as dependências do seu projeto. Isso fará com que a biblioteca psycopg2 seja instalada no seu ambiente Docker quando você construir a imagem.

Outra opção é adicionar a seguinte linha ao seu arquivo Dockerfile:

RUN pip install psycopg2

Isso fará com que a biblioteca psycopg2 seja instalada na imagem Docker quando você construir a imagem.

Depois de adicionar a biblioteca psycopg2 ao seu ambiente Docker, você deve ser capaz de gerar a imagem sem receber o erro relacionado à biblioteca. É importante lembrar de verificar se o restante do seu código está correto e não há outros erros que possam impedir a geração da imagem.

Abcs!

Na verdade eu fiz isso, Natan. Instalei o 'psycopg2-binary', como o erro sugeriu e em seguida tentei instalar o 'psycopg2'. Mesmo assim, o erro persistiu Esse é exatamente o erro, e como o meu código está: error image django psycopg2

Bruno,

Talvez esse outro tópico ajude, problema semelhante

https://cursos.alura.com.br/forum/topico-erro-ao-instalar-o-psycopg2-205093

Tudo bem Bruno?

A biblioteca psycopg2 é uma versão que deve ser compilada na sua instalação e sendo assim, vai precisar de verias dependências que são desnecessárias posteriormente, uma solução é trocar ela pela versão já compilada, a psycopg2-binary, podendo ser colocada tanto no requirements.txt quanto em um RUN.

Espero ter ajudado, se essa solução der problema me avise.

Obrigado, Leonardo. Eu ja consegui resolver o bug. Eu estava instalando o python:3.11-slim, mas ele é uma versão 'ligth', por isso não estava dando certo, mesmo eu intalando o psycopg2-binary. No final das contas era só intalar o python:3.11 no início do script e o psycopg2-binary antes do requirements.txt . Mas muito obrigado pela sua colaboração e a colaboração do Natan.

No final o meu Dockerfile ficou assim:

FROM python:3.11
  WORDIR /django 
  COPY requirements.txt /django 
  RUN python -m pip install --upgrade pip 
  RUN python -m pip install psycopg2-binary 
  RUN python -m pip install -r requirements.txt 
  EXPOSE 8000
  CMD [ "python", "manage.py", "runserver" ]