FS
Como configurar o Docker na sua aplicação.
Tudo sobre o Docker, como funciona e com qual objetivo.
Docker pode parecer um conceito confuso às vezes, como para mim muitas vezes eu não conseguia entender a utilidade do Docker e como ele iria me ajudar nas minhas aplicações. Então hoje vim detalhar como ele funciona, como utilizá-lo, o passo a passo da sua configuração.
Como instalar
O Docker utiliza de configurações específicas do Linux que o Windows não possui, assim a instalação para esse sistema operacional possui mais etapas e pode até ser um pouco difícil de instalar. Portanto, recomendo olhar o passo a passo de como o instalar, caso esteja utilizando Windows clicando aqui!
O que é o Docker?
Vamos usar comparações com situações do cotidiano para simplificar o entendimento. Docker é como se fosse uma caixa onde colocamos tudo o que nosso programa precisa para funcionar, tanto arquivos e bibliotecas como até o sistema operacional em si, todo isolado do seu computador.
Imagine que você vai participar de uma festa e ficou emcubido de levar o bolo, mas não sabe se na casa do seu amigo possui forno, talheres, espátula, etc. Por garantia você leva uma caixa com tudo pronto: o bolo já assado, a faca para cortar, os pratos e até os talheres. Não importa onde a festa aconteça, você sabe que tudo vai funcionar.
No Docker, essa "caixa" é chamada de container
Por que usar o Docker?
O Docker vai garantir que o programa funcione em qualquer lugar, seja no seu computador, no de outras pessoas. Vai te prevenir de precisar dizer aquela famosa frase "Mas na minha máquina funciona!".
Seria como um jogo de tabuleiro, onde para você jogar em qualquer lugar é preciso levar o jogo completo, como as regras, os dados, as peças e o tabuleiro. Você tem certeza que levando a caixa vai ter tudo o que precisa.
Como ele funciona?
- Imagens: São como uma receita de bolo. Elas dizem ao container o que ele precisa para funcionar.
- Containers: São as caixas prontas que você pode rodar em qualquer lugar e são feitas a partir da receita (imagem). Seria o bolo pronto e embalado para ser entregue.
Voltando para a parte de programação, seria como se você pudesse rodar um banco de dados postgreSQL ou até o Node sem precisar instalar nada além do Docker no seu computador e nem localmente no seu projeto. Os containers do Docker já vão conter tudo o que o projeto precisa para funcionar. Agora vamos para a prática:
PostgreSQL com Docker
Vamos juntos configurar o banco PostgreSQL ao Docker.
Primeiramente precisamos da receita, no caso a imagem, que vai explicar ao container o que ele precisa para funcionar. O Docker possui uma página com todas as suas imagens disponíveis para uso; basta acessar o Docker Hub e pesquisar pela imagem bitnami/postgresql. Usaremos a imagem da Bitnami e não a oficial do Postgres, pois ela é uma empresa que já possui um cuidado maior de simplificação de scripts e maior segurança para utilização dessa imagem, mas ambos são o mesmo banco de dados.
Acesse a imagem bitnami/postgresql aqui!
Para rodar o Docker com essa imagem, só precisamos usar o comando no terminal:
docker run --name nome-do-banco nome-da-imagem
- Nome do banco: o nome que você quer dar ao container na sua máquina.
- Nome da imagem: Especifica a imagem Docker que será usada. No nosso exemplo, seria bitnami/postgresql, que é o nome informado no link que eu citei acima, lá tem tudo explicado.
Além disso, podemos adicionar configurações adicionais antes de executar o comando e ele ficaria assim:
docker run --name banco-pg -e POSTGRES_USERNAME=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DATABASE=minhaapi bitnami/postgresql
-e POSTGRES_USERNAME=docker: Define a variável de ambientePOSTGRES_USERNAME, configurando o usuário do banco como "docker".-e POSTGRES_PASSWORD=docker: Define a senha do usuário como "docker".-e POSTGRES_DATABASE=minhaapi: Cria automaticamente um banco de dados chamado "minhaapi" ao iniciar o container.
A última configuração seria a porta, que no Docker é usada para mapear portas do container para portas da sua máquina host (o computador onde o Docker está rodando). Exemplo:
-p 5432:5432
O primeiro
5432: É a porta da sua máquina host que estará acessível. Por exemplo, se você conectar emlocalhost:5432, estará se conectando ao PostgreSQL rodando no container.O segundo
5432: É a porta do container onde o PostgreSQL está rodando internamente. No caso do PostgreSQL, a porta padrão dele é 5432.
Aqui quero dizer que quando eu acessar a porta 5432 na minha máquina (seria o http://localhost:5432), eu quero acessar a porta 5432 do container, por isso usamos o mesmo valor. Simples assim.
Se você não usar o -p, o banco de dados vai funcionar somente dentro do container e não estará acessível pela sua máquina ou outros serviços externos.
O resultado seria:
docker run --name banco-pg -e POSTGRES_USERNAME=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DATABASE=minhaapi -p 5432:5432 bitnami/postgresql
PS: Esteja com o Docker aberto antes de executar o comando.
Receberá esta resposta do Docker:
databse system is ready to accept connections
Agora o container Docker está pronto para ser utilizado.
Inicializar o projeto em outra máquina: Docker Compose
Sempre que um novo usuário for executar a nossa aplicação em sua máquina, ele vai precisar rodar todo o comando de criação do container novamente. Para que isso não seja contra-produtivo, existe o Docker Compose, que é um arquivo de configuração dos nossos containers (pode haver vários), que basicamente guia a instalação e configuração do nosso projeto. Normalmente o nomeamos como docker-compose.yml, ele possui a extensão yml e possui basicamente essa estrutura:
version: "3"
services:
nome-do-container:
image: bitnami/postgresql
ports:
- 5432:5432
environment:
- POSTGRESQL_USERNAME=docker
- POSTGRESQL_PASSWORD=docker
- POSTGRESQL_DATABASE=mydatabase- version: a versão do docker compose, para que ele sabia qual sintaxe está sendo utilizada
- services: a lista de containers estamos usando na nossa aplicação.
- image: a imagem do container, no caso usamos o exemplo do bitnami/postgresql
- ports: as posrtas que estarão vinculadas, no caso a porta do container (5432) e a porta do host da nossa máquina (5432, que seria o localhost:5432)
- environment: Nossas variáveis ambiente necessárias para execução do projeto.
Por fim, só precisamos executar o comando docker compose up -d para que o arquivo docker-compose.yml seja lido e o container criado. Muito mais simples. O -d somente esconde alguns logs para que seja de mais simples execução.
Lista de comandos docker
docker run: Com as configurações que explicamos, cria um novo container.docker ps: Mostre todos os containers em execução.- Mostra dados como ID, imagem, commando, data de criação, status, portas e nomes do container.
docker ps -a: Mostre todos os containers já criados por você.docker start id-ou-nome-do-container: Executa o container para que possa estar pronto para uso.docker stop nome-ou-id-do-container: Encerra a execução do container.docker rm nome-ou-id-do-container: Exclui um container permanentemente.docker logs nome-ou-id-do-container: Exibe os logs gerados por um container, mostrando informações como mensagens de erro, saída do aplicativo e eventos do sistema.docker compose up -d: Executa o arquivo docker-compose.yml para criação do container e escondendo os logs da criação (-d).docker compose down: Para de executar e deleta todos os containers criados nessa aplicação.docker compose stop: Para de executar todos os containers em andamento.
Post criado/atualizado em: 27/11/2024
Autor: Felipe Santiago
Trabalho com desenvolvimento web Frontend desde 2023 com foco em React e Typescript. TailwindCSS foi uma reviravolta em meus projetos, não consigo mais ficar sem ele. Evoluindo para aplicações FullStack, foquei muito para criação de APIs com Node e Fastify/Express e manutenção de banco de dados como PostgreSQL.