Geralmente, quando estamos começando uma aplicação, ou quando queremos rodar a aplicação de alguém localmente, precisamos configurar o banco de dados, sendo necessário instalar ele na máquina. Há também casos em que já temos algum banco rodando localmente e precisamos criar um novo, isso acaba dificultando a configuração.
E por falar em configuração, oque acontece quando fazemos muitas configurações em nosso banco local e depois temos que rodar ele em outra máquina? Temos que configurar tudo novamente?
Felizmente, com o surgimento dos containers, isso se torna muito mais fácil, uma vez que nosso banco de dados se resume a uma imagem, que roda em um container juntamente com todas as configurações e dependências. Isso permite rodar nosso banco em diferentes ambientes, sem ter que se preocupar com configuração, compatibilidade, etc.
Neste exemplo, irei mostrar como rodar um banco de dados Postgres utilizando o Docker, no final, mostrarei como mapear um volume para que nossos dados fiquem gravados na máquina.
Primeiramente, para que possamos iniciar, é necessário instalar o Docker na sua máquina. Caso ainda não tenha ele instalado, clique neste link e veja como prosseguir.
Feito isso, vamos baixar a imagem do Postgres, para isto, abra o terminal e execute o seguinte comando.
docker pull postgres
Para conferir se o download foi efetuado com sucesso.
docker images
Se tudo estiver certo, podemos executar nosso container.
Por padrão, o Postgres roda na porta 5432, mas isso fica disponível apenas dentro do container, para permitir que ele acessado pela máquina local, precisamos um mapping da porta interna, para porta externa. Fazemos isso com o parametro -p, logo após, indicamos uma porta local e para qual porta deve redirecionar, por exemplo, -p 5432:5432.
Para definirmos qual a senha do banco, devemos alterar uma variável de ambiente, -e POSTGRES_PASSWORD=suasenha.
Isso é o suficiente para podermos rodar nosso banco, agora, iremos subir o container com o comando run, passando as configurações que vimos acima.
docker run -p 5432:5432 -e POSTGRES_PASSWORD=1234 postgres
Ao fazer isso, temos nosso container rodando. Ele estará disponível na porta 5432, o usuário padrão será postgres e a senha 1234.
Executando o comando visto acima, temos nosso banco rodando, o problema é que por padrão, todos os dados são armazenados internamente dentro do container, e quando paramos ele, perdemos tudo. Para que possamos gravar os dados permanente, utilizaremos os volumes do docker, iremos definir uma pasta da máquina que será responsável pelo armazenamento, no meu caso, criei uma pasta com o nome database no diretório “/tmp/database”. Feito isto, vamos mapear a pasta de armazenamento dentro do container, para nossa pasta que criamos.
docker run -p 5432:5432 -v /tmp/database:/var/lib/postgresql/data -e POSTGRES_PASSWORD=1234 postgres
Agora temos nosso banco de dados rodando em um container e gravando os dados na máquina.
Para quando executarmos nosso container, não ficarmos com o terminal travado, podemos executa-lo no modo detached usando a flag -d.
docker run -p 5432:5432 -v /tmp/database:/var/lib/postgresql/data -e POSTGRES_PASSWORD=1234 -d postgres
Agora para conferir se o container está em execução.
docker ps
Conclusão
Este foi um exemplo simples de como subir um banco de dados utilizando Docker, nele, aprendemos alguns comandos básicos, como criar volumes, alterar variáveis de ambiente, fazer mapping das portas. Caso você esteja começando com Docker, sugiro começar lendo a documentação, pois há vários outros recursos e casos de uso interessante.
Para quem tiver interesse, gravei um vídeo mostrando na prática como funciona, lá também falo sobre o docker compose, que é outra abordagem que facilita ainda mais a nossa vida.