Você deve executar um banco de dados no Docker?

A colocação de cargas de trabalho de servidores em contêineres está se tornando cada vez mais popular e está se tornando cada vez mais comum ver implantações de servidores da web em execução em contêineres. Os mesmos benefícios podem ser aplicados a bancos de dados?
Docker pode lidar com cargas de trabalho com estado
É melhor começar fazendo uma pergunta diferente: você consegue executar um banco de dados no Docker? Em geral, o Docker não é projetado para serviços com estado. Um dos principais argumentos de venda dos contêineres é que eles podem ser interrompidos e iniciados à vontade, geralmente conectando-se a uma fonte de dados autorizada, como um banco de dados, para armazenar seu estado. Todos os dados do contêiner são efêmeros e destruídos quando o contêiner é excluído.
Isso torna a execução de cargas de trabalho com estado particularmente desafiadora, mas felizmente o Docker tem algumas ferramentas para lidar com o estado: volume e montagens de ligação. Isso permite que você monte um local na máquina host em um local no contêiner, que armazenará dados mesmo quando o contêiner for encerrado. Dessa forma, você pode executar contêineres de longo prazo sem se preocupar com a perda de dados.
Montagens de volume são a forma preferida de lidar com a maioria dos cenários. Eles permitem que você crie um volume, que é gerenciado pelo Docker & # 8230;
volume do docker criar meu-volume
& # 8230; Em seguida, monte esse volume em um local de destino dentro do contêiner:
docker run --mount source = my-volume, target = / app
As montagens Bind são mais simples. Eles são os volumes usados em segundo plano, mas permitem que você defina manualmente o local no disco host em vez de gerenciá-lo por meio do Docker.
docker executado ~ / nginxlogs: / var / log / nginx
Na prática, usar essas montagens pode ser um pouco mais complicado. Muitos serviços gerenciados do Docker, como o ECS da AWS ou o Kubernetes gerenciado, não fornecem acesso direto ao servidor subjacente e, como tal, você não será capaz de fazer conexões de montagem vinculadas diretamente. Normalmente, isso é resolvido com um serviço como o EFS, que permite a montagem em contêineres ECS, ou com um armazenamento de dados externo, como um banco de dados.
Você deve escolher o Docker para seu banco de dados?
O Docker geralmente não é ótimo para lidar com o estado. As cargas de trabalho baseadas em Docker geralmente terceirizam esse problema para bancos de dados. Com um banco de dados sendo a solução para o problema, é prático colocar seu banco de dados no Docker?
Em grande parte, a resposta é “ normalmente não. ” O Docker já percorreu um longo caminho desde o seu início e não é tão terrível ou “ errado ” idéia de contentor de bancos de dados mais. Certamente pode ser feito e tem alguns benefícios. No entanto, para a maioria das cargas de trabalho gerais, os benefícios não superam as complicações.
Para ver por quê, vamos examinar os benefícios que o Docker traz para a mesa:
- Escalonamento fácil: servidores podem ser criados e destruídos rapidamente para atender à demanda
- Ferramentas de CI / CD mais fáceis: compilações automatizadas são triviais
- Codificação de sua infraestrutura: todas subjacentes bibliotecas e configuração são tratadas no Dockerfile
A maioria deles não transfere exatamente bem para cargas de trabalho de banco de dados, que geralmente são empreendimentos de longo prazo que favorecem a integridade dos dados acima de tudo. Geralmente, você não deseja escalonar automaticamente a maioria dos bancos de dados; eles normalmente não recebem atualizações regulares de código e, como tal, não se beneficiam tanto com a execução em contêineres. E, se você está apenas montando uma unidade de armazenamento local, por que não executá-la fora do Docker?
Se você está procurando se livrar das complexidades do gerenciamento de bancos de dados, o Docker não é a ferramenta para o trabalho. É uma complicação simplesmente desnecessária para uma carga de trabalho que pode ser executada facilmente em um VPS padrão. Você provavelmente ficará muito melhor usando um banco de dados como serviço totalmente gerenciado, como o RDS da AWS. Isso traz muito da automação para a qual o Docker é bom, sem a dor de cabeça de fazer você mesmo.
O principal lugar onde o Docker pode ser útil para cargas de trabalho de banco de dados é em ambientes de desenvolvimento. O Docker facilita a criação de novos bancos de dados com configurações diferentes, o que torna o teste rápido. Na produção, entretanto, as regras são geralmente mais rígidas.
Nenhum comentário