Devriez-vous exécuter une base de données dans Docker?
La conteneurisation des charges de travail des serveurs est de plus en plus populaire et il est de plus en plus courant de voir des déploiements de serveurs Web s'exécuter dans des conteneurs. Les mêmes avantages peuvent-ils être appliqués aux bases de données?
Docker peut gérer des charges de travail avec état
Il est préférable de commencer par poser une autre question: Cune vous exécutez même une base de données dans Docker? En général, Docker n'est pas conçu pour les services avec état. L'un des principaux arguments de vente des conteneurs est qu'ils peuvent être arrêtés et démarrés à volonté, généralement en se connectant à une source de données faisant autorité, comme une base de données, pour stocker leur état. Toutes les données du conteneur sont éphémères et sont détruites lorsque le conteneur est supprimé.
Cela rend l'exécution des charges de travail avec état particulièrement difficile, mais heureusement, Docker dispose de quelques outils pour gérer les montages d'état: volume et liaison. Ceux-ci vous permettent de monter un emplacement sur la machine hôte à un emplacement dans le conteneur, qui stockera des données même lorsque le conteneur s'arrête. De cette façon, vous pouvez exécuter des conteneurs à long terme sans vous soucier de la perte de données.
Les montages de volume sont le moyen préféré de gérer la plupart des scénarios. Ils vous permettent de créer un volume, qui est géré par Docker…
docker volume create my-volume
… Pour monter ce volume à un emplacement cible à l'intérieur du conteneur:
docker run --mount source=my-volume,target=/app
Les montures de liaison sont plus simples. Ce sont les volumes utilisés sous le capot, mais ils vous permettent de définir manuellement l'emplacement sur le disque hôte plutôt que de le gérer via Docker.
docker run ~/nginxlogs:/var/log/nginx
En pratique, l'utilisation de ces supports peut être un peu plus compliquée. De nombreux services Docker gérés, tels que ECS d'AWS ou Kubernetes gérés, ne vous donnent pas un accès direct au serveur sous-jacent et, par conséquent, vous ne pourrez pas établir directement des connexions de montage de liaison. Habituellement, cela est résolu avec un service comme EFS, qui permet le montage sur des conteneurs ECS, ou avec une banque de données externe, comme une base de données.
Devez-vous choisir Docker pour votre base de données?
Docker n'est généralement pas idéal pour gérer l'état. Les charges de travail basées sur Docker sous-traitent généralement ce problème aux bases de données. Une base de données étant la solution au problème, est-il pratique de mettre votre base de données dans Docker?
Dans l'ensemble, la réponse est «généralement pas». Docker a parcouru un long chemin depuis sa création, et ce n'est plus une idée terrible ou «fausse» de conteneuriser des bases de données. Cela peut certainement être fait et présente certains avantages. Cependant, pour la plupart des charges de travail générales, les avantages ne l'emportent pas sur les complications.
Pour comprendre pourquoi, examinons les avantages que Docker apporte à la table:
- Mise à l'échelle facile: les serveurs peuvent être créés et détruits rapidement pour répondre à la demande
- Outils CI / CD plus faciles: les constructions automatisées sont triviales
- Codification de votre infrastructure: toutes les bibliothèques sous-jacentes et la configuration sont gérées dans le Dockerfile
La plupart de ceux-ci ne se transforment pas exactement en charges de travail de base de données, qui sont souvent des efforts à long terme qui favorisent avant tout l’intégrité des données. Vous ne souhaitez généralement pas effectuer une mise à l'échelle automatique de la plupart des bases de données; ils ne reçoivent généralement pas eux-mêmes des mises à jour régulières du code et, en tant que tels, ne bénéficient pas autant de l'exécution dans des conteneurs. Et, si vous ne montez de toute façon qu'un disque de stockage local, pourquoi ne pas l'exécuter en dehors de Docker?
Si vous cherchez à vous libérer des complexités de la gestion des bases de données, Docker n’est pas l’outil idéal. C’est tout simplement une complication inutile pour une charge de travail qui peut facilement s’exécuter sur un VPS standard. Vous ferez probablement beaucoup mieux d'utiliser une base de données en tant que service entièrement gérée, comme le RDS d'AWS. Cela apporte une grande partie de l'automatisation pour laquelle Docker est bon, sans le mal de tête de le faire vous-même.
Le principal endroit où Docker peut être utile pour les charges de travail de base de données est dans les environnements de développement. Docker facilite la création de nouvelles bases de données avec une configuration différente, ce qui permet des tests rapides. En production, cependant, les règles sont généralement plus strictes.