Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Executando migrações com Rails em um contêiner do Docker com várias instâncias de contêiner


Especialmente com Rails eu não tenho nenhuma experiência, mas vamos olhar do ponto de vista do docker e da engenharia de software.

A equipe do Docker defende, às vezes de forma bastante agressiva, que os contêineres são sobre aplicativos de envio. Em essa declaração realmente ótima , Jerome Petazzoni diz que é tudo uma questão de separação de interesses. Eu sinto que este é exatamente o ponto que você já descobriu.

A execução de um contêiner Rails que inicia uma migração ou configuração pode ser bom para implantação inicial e provavelmente necessário durante o desenvolvimento. No entanto, ao entrar em produção, você realmente deve considerar separar as preocupações.

Assim, eu diria ter uma imagem, que você usa para executar o contêiner N rails e adicionar ferramentas/migração/configuração de qualquer contêiner, que você usa para fazer tarefas administrativas. Dê uma olhada no que os desenvolvedores da imagem oficial do Rails dizer sobre isso:

Quando você olha para essa imagem, não há comando de configuração ou migração. É totalmente até o usuário como usá-lo. Então, quando você precisar executar vários contêineres, vá em frente.

Da minha experiência com mysql isso funciona bem. Você pode executar um contêiner somente de dados para hospedar os dados, executar um contêiner com o servidor mysql e, finalmente, executar um contêiner para tarefas administrativas como backup e restauração. Para todos os três contêineres, você pode usar a mesma imagem. Agora você está livre para acessar seu banco de dados de, digamos, vários Wordpress containers. Isso significa uma separação clara de interesses. Quando você usa docker-compose não é tão difícil gerenciar todos esses contêineres. Certamente já existem muitos contêineres e ferramentas de terceiros para também ajudá-lo a configurar um aplicativo complexo composto por vários contêineres.

Finalmente, você deve decidir se o docker e a arquitetura de microsserviço é certo para o seu problema. Conforme descrito este artigo há algumas razões contra. Um dos principais problemas é que ele adiciona uma nova camada de complexidade. No entanto, esse é o caso de muitas soluções e acho que você está ciente disso e disposto a excluí-lo.