web-dev-qa-db-fra.com

Est-il judicieux de docker (conteneuriser) des bases de données?

Je peux comprendre les avantages de la dockingisation des services sans état, tels que les serveurs Web, les serveurs d'applications, les équilibreurs de charge, etc. Ce que je ne comprends pas, c'est le but de la conteneurisation des bases de données? les bases de données sont connectées à un volume de données persistant sur un disque dur spécifique. En raison de l'état, il n'est pas facile et pas efficace de déplacer le conteneur de base de données. Alors, quelqu'un peut-il voir pourquoi la dockingisation d'une base de données peut être utile?

40
Keeto

"Alors, quelqu'un peut-il voir pourquoi l'ancrage d'une base de données peut être utile?"

Bonne question Keeto. L'une des principales raisons de la conteneurisation de vos bases de données est que vous puissiez avoir le même environnement cohérent pour l'ensemble de votre application, pas seulement les parties sans état, à travers le développement, la mise en scène et la production. Un environnement cohérent est l'une des promesses de docker, mais lorsque votre base de données vit en dehors de ce modèle, il y a une grande différence qui ne peut pas être prise en compte dans vos tests. De plus, en conteneurisant votre base de données ainsi que le reste de votre application, vous êtes plus susceptible de pouvoir déplacer l'intégralité de votre application entre les fournisseurs d'hébergement (par exemple d'AWS vers Google Compute). Si vous utilisez Amazon RDS, par exemple, même si vous pouvez déplacer vos nœuds Web vers Google, vous ne pourrez pas déplacer votre base de données, ce qui signifie que vous dépendez fortement de votre fournisseur de cloud.

Les performances sont une autre raison de conteneuriser les services de données. Cela est particulièrement vrai pour les fournisseurs de services (toute la base de données en tant qu'offre de services - par exemple bases de données cloud d'espace de stockage - exécutées dans des conteneurs), car les conteneurs vous permettent de fournir des garanties de service qui ne sont pas possibles à l'aide de la virtualisation, et exécuter une base de données par machine physique n'est pas financièrement viable. Il est probable que vous n'exécutiez pas un service d'hébergement de bases de données, mais cette analogie est tout aussi logique si vous exécutez sur du métal nu et que vous souhaitez utiliser des conteneurs pour l'isolation des processus, au lieu des machines virtuelles. Vous obtiendrez de meilleures performances pour vos bases de données en raison du hit d'E/S bien connu que vous prenez lors de l'exécution d'une base de données dans une machine virtuelle.

Je ne dis pas que vous devez conteneuriser votre base de données, mais ce sont quelques-unes des raisons pour lesquelles cela aurait du sens.

Divulgation complète, je travaille pour clusterhq, ce nouveau projet que Mark O'connor a mentionné dans sa réponse. Nous avons un projet open source appelé Flocker qui facilite la migration des bases de données et de leurs volumes entre les hôtes afin que les avantages que j'ai mentionnés ci-dessus ne soient pas complètement compensés par les points négatifs que vous avez soulevés dans votre question.

28
ferrantim

Je ne suis pas sûr d'être d'accord avec votre commentaire sur l'efficacité ... Il est beaucoup plus facile de télécharger et d'exécuter un conteneur de base de données que de l'installer en mode natif. La documentation du docker décrit comment implémenter une séparation logique propre entre un conteneur avec état et ses données:

Mais ... vous avez raison de penser qu'un conteneur avec état serait lié à son serveur hôte, à moins qu'il n'y ait un mécanisme pour porter les données également.

Une solution évidente consiste à monter un volume de stockage partagé sur tous les hôtes susceptibles d'exécuter votre base de données.

L'article suivant présente une solution très innovante dans laquelle un client de type bittorrent est utilisé pour répliquer un conteneur de données entre des hôtes.

Enfin, un nouveau projet appelé flocker tente de résoudre ce problème en gérant à la fois les conteneurs avec état et leurs volumes ZFS associés:

12
Mark O'Connor

Il s'agit d'un bon fil de discussion et les progrès récents du clonage SQL Server ajouteraient des capacités supplémentaires à l'utilisation de conteneurs avec des clones. Cela résout certains des problèmes de workign avec de grands ensembles de données. Divulgation complète, je travaille pour Windocks, où nous avons publié 2.0 avec des conteneurs SQL Server avec clonage de base de données intégré.

0
paul stanton