Skip to content

Commit

Permalink
Aula 10 - dockerfile compativel com python 3.11 ou 3.12 e pequenos aj…
Browse files Browse the repository at this point in the history
…ustes
  • Loading branch information
lbmendes authored May 30, 2024
1 parent 737a8d9 commit c7b2160
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 29 deletions.
39 changes: 10 additions & 29 deletions aulas/10.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,33 +41,14 @@ Uma das coisas interessantes sobre Docker é que existe um [Hub de containers](h

Aqui está um exemplo de `Dockerfile` para executar nossa aplicação:

```docker
FROM python:3.11-slim
ENV POETRY_VIRTUALENVS_CREATE=false
WORKDIR app/
COPY . .
RUN pip install poetry
RUN poetry config installer.max-workers 10
RUN poetry install --no-interaction --no-ansi
EXPOSE 8000
CMD poetry run uvicorn --host 0.0.0.0 fast_zero.app:app
```

Aqui está o que cada linha faz:

1. `FROM python:3.11-slim`: define a imagem base para nosso contêiner. Estamos usando a versão slim da imagem do Python 3.11, que tem tudo que precisamos para rodar nossa aplicação.
2. `ENV POETRY_VIRTUALENVS_CREATE=false`: define uma variável de ambiente que diz ao Poetry para não criar um ambiente virtual. (O container já é um ambiente isolado)
3. `RUN pip install poetry`: instala o Poetry, nosso gerenciador de pacotes.
4. `WORKDIR app/`: define o diretório em que executaremos os comandos a seguir.
5. `COPY . .`: copia todos os arquivos do diretório atual para o contêiner.
6. `RUN poetry config installer.max-workers 10`: configura o Poetry para usar até 10 workers ao instalar pacotes.
7. `RUN poetry install --no-interaction --no-ansi`: instala as dependências do nosso projeto sem interação e sem cores no output.
8. `EXPOSE 8000`: informa ao Docker que o contêiner escutará na porta 8000.
9. `CMD poetry run uvicorn --host 0.0.0.0 fast_zero.app:app`: define o comando que será executado quando o contêiner for iniciado.
=== "Versão 3.11"
{%set full_version = "3.11.9" %}
{%set short_version = 3.11 %}
{% include "templates/dockerfile.md" %}
=== "Versão 3.12"
{%set full_version = "3.12.3" %}
{%set short_version = 3.12 %}
{% include "templates/dockerfile.md" %}

Vamos entender melhor esse último comando:

Expand Down Expand Up @@ -99,7 +80,7 @@ Este comando lista todas as imagens Docker disponíveis no seu sistema.
Para executar o contêiner, usamos o comando `docker run`. Especificamos o nome do contêiner com a flag `--name`, indicamos a imagem que queremos executar e a tag que queremos usar `<nome_da_imagem>:<tag>`. A flag `-p` serve para mapear a porta do host para a porta do contêiner `<porta_do_host>:<porta_do_contêiner>`. Portanto, teremos o seguinte comando:

```shell title="$ Execução no terminal!"
docker run --name fastzeroapp -p 8000:8000 fast_zero:latest
docker run -it --name fastzeroapp -p 8000:8000 fast_zero:latest
```

Este comando iniciará nossa aplicação dentro de um contêiner Docker, que estará escutando na porta 8000. Para testar se tudo está funcionando corretamente, você pode acessar `http://localhost:8000` em um navegador ou usar um comando como:
Expand Down Expand Up @@ -506,7 +487,7 @@ Vamos entender melhor o que cada parte do comando faz:

Ao utilizar esse comando, o Docker Compose cuidará de iniciar os serviços dos quais `fastzero_app` depende, neste caso, o serviço `fastzero_database` do PostgreSQL. Isso é importante porque nossos testes podem depender de um banco de dados ativo para funcionar corretamente. O Compose garante que a ordem de inicialização dos serviços seja respeitada e que o serviço do banco de dados esteja pronto antes de iniciar os testes.

Se executarmos o comando, vemos que ele inicia o banco de dados, inicia o container da aplicação e na sequência executa o comando que passamos no `--entreypoint` que é exatamente como executar os testes:
Se executarmos o comando, vemos que ele inicia o banco de dados, inicia o container da aplicação e na sequência executa o comando que passamos no `--entrypoint` que é exatamente como executar os testes:

```shell title="$ Execução no terminal!"
docker-compose run --entrypoint="poetry run task test" fastzero_app
Expand Down
27 changes: 27 additions & 0 deletions aulas/templates/dockerfile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
```docker
FROM python:{{short_version}}-slim
ENV POETRY_VIRTUALENVS_CREATE=false
WORKDIR app/
COPY . .
RUN pip install poetry
RUN poetry config installer.max-workers 10
RUN poetry install --no-interaction --no-ansi
EXPOSE 8000
CMD poetry run uvicorn --host 0.0.0.0 fast_zero.app:app
```

Aqui está o que cada linha faz:

1. `FROM python:{{short_version}}-slim`: define a imagem base para nosso contêiner. Estamos usando a versão slim da imagem do Python {{short_version}}, que tem tudo que precisamos para rodar nossa aplicação.
2. `ENV POETRY_VIRTUALENVS_CREATE=false`: define uma variável de ambiente que diz ao Poetry para não criar um ambiente virtual. (O container já é um ambiente isolado)
3. `RUN pip install poetry`: instala o Poetry, nosso gerenciador de pacotes.
4. `WORKDIR app/`: define o diretório em que executaremos os comandos a seguir.
5. `COPY . .`: copia todos os arquivos do diretório atual para o contêiner.
6. `RUN poetry config installer.max-workers 10`: configura o Poetry para usar até 10 workers ao instalar pacotes.
7. `RUN poetry install --no-interaction --no-ansi`: instala as dependências do nosso projeto sem interação e sem cores no output.
8. `EXPOSE 8000`: informa ao Docker que o contêiner escutará na porta 8000.
9. `CMD poetry run uvicorn --host 0.0.0.0 fast_zero.app:app`: define o comando que será executado quando o contêiner for iniciado.

0 comments on commit c7b2160

Please sign in to comment.