5 étapes pour migrer votre application vers des conteneurs
Si vous êtes nouveau dans le domaine des conteneurs, ne vous laissez pas intimider par la terminologie. Ces principes clés vous aideront à migrer votre application vers le cloud.
Généralement, vous considérez que c'est une bonne chose lorsque des personnes souhaitent utiliser votre application. Cependant, lorsque l'application s'exécute sur un serveur, sa popularité a un coût. Les utilisateurs s'accompagnent d'une demande accrue en ressources et, à un moment donné, vous constaterez peut-être que vous devrez faire évoluer votre application. Une option consiste à lancer davantage de serveurs pour résoudre le problème, à établir un équilibreur de charge comme Nginx et à laisser la demande se régler d'elle-même. Cette option peut cependant être coûteuse, car il n'y a aucune économie lorsque la demande est faible et que vous exécutez des instances de votre application sur des serveurs dépourvus de trafic. Les conteneurs ont l'avantage d'être éphémères, se lançant lorsque de nouvelles instances sont disponibles et disparaissant lorsque la demande diminue. Si cela semble être une fonctionnalité dont vous avez besoin, il est peut-être temps de migrer votre application vers des conteneurs.
Migrer une application vers un conteneur peut vite devenir déroutant. Bien que l’environnement au sein d’un conteneur puisse sembler familier, de nombreuses images de conteneurs sont minimes et conçues pour être sans état. Mais d’une certaine manière, c’est l’un des points forts des conteneurs. Comme un environnement virtuel Python, il s'agit d'une page vierge qui vous permet de créer (ou de reconstruire) votre application sans les valeurs par défaut invisibles fournies par de nombreux autres environnements.
Chaque migration est unique, mais voici quelques principes importants que vous devez respecter avant de porter votre application vers des conteneurs.
1. Comprenez vos dépendances
Le portage de votre application vers un conteneur est une excellente opportunité de savoir de quoi dépend réellement votre application. Avec très peu d’installations par défaut de tous les composants système, à l’exception des composants les plus essentiels, il est peu probable que votre application s’exécute au début dans un conteneur.
Avant de refactoriser, identifiez vos dépendances. Commencez par un grep
via votre code source pour include
ou import
ou require
ou use
ou tout autre mot-clé utilisé par la langue de votre choix pour déclarer les dépendances.
$ find ~/Code/myproject -type f \
-iname ".java" \
-exec grep import {} \;
Cependant, il ne suffit peut-être pas d'identifier uniquement les bibliothèques spécifiques à la langue que vous utilisez. Auditez les dépendances, afin que vous sachiez s'il existe des bibliothèques de bas niveau requises pour que le langage lui-même s'exécute ou si un module spécifique fonctionne comme prévu.
2. Évaluez votre stockage de données
Les conteneurs sont sans état et lorsqu'un d'entre eux plante ou s'arrête de fonctionner, cette instance du conteneur disparaît pour toujours. Si vous deviez enregistrer des données dans ce conteneur, les données disparaîtraient également. Si votre application stocke les données utilisateur, tout le stockage doit avoir lieu en dehors du conteneur, dans un emplacement accessible à une instance de votre application.
Vous pouvez utiliser le stockage local mappé à un emplacement dans votre conteneur pour des fichiers de configuration d'application simples. Il s'agit d'une technique courante pour les applications Web qui nécessitent que l'administrateur fournisse des valeurs de configuration simples, telles qu'une adresse e-mail d'administrateur, un titre de site Web, etc. Par exemple:
$ podman run \
--volume /local/data:/storage:Z \
mycontainer
Cependant, vous pouvez configurer une base de données comme MariaDB ou PostgreSQL comme stockage partagé sur plusieurs conteneurs pour de grandes quantités de données. Pour les informations privées, telles que les mots de passe, vous pouvez configurer un secret
.
[ Téléchargez notre aide-mémoire MariaDB ]
Concernant la façon dont vous devez refactoriser votre code, vous devez adapter les emplacements de stockage en conséquence. Cela peut impliquer de modifier les chemins vers de nouveaux mappages de stockage de conteneurs, des ports vers différentes destinations de base de données ou même d'incorporer des modules spécifiques au conteneur.
3. Préparez votre dépôt Git
Les conteneurs extraient généralement le code source d'un référentiel Git au fur et à mesure de leur construction. Vous devez avoir un plan pour gérer votre référentiel Git une fois qu'il devient la source canonique de code prêt pour la production pour votre application. Ayez une branche de version ou de production et envisagez d'utiliser des hooks Git pour rejeter les validations accidentelles non approuvées.
4. Connaissez votre système de construction
Les applications conteneurisées n'ont probablement pas de cycles de publication traditionnels. Ils sont extraits de Git lorsqu'un conteneur est construit. Vous pouvez lancer n'importe quel nombre de systèmes de build dans le cadre de la création de votre conteneur, mais cela peut impliquer d'ajuster votre système de build pour qu'il soit plus automatisé qu'avant. Vous devez refactoriser votre processus de construction de manière à avoir la certitude totale qu'il fonctionne sans surveillance.
5. Construisez une image
Construire une image ne doit pas nécessairement être une tâche complexe. Vous pouvez utiliser des images de conteneurs existantes comme base, en les adaptant à l'aide d'un simple Dockerfile. Alternativement, vous pouvez créer le vôtre à partir de zéro en utilisant Buildah.
Le processus de création d’un conteneur fait, d’une certaine manière, autant partie du développement que la refactorisation de votre code. C'est la construction du conteneur qui obtient, assemble et exécute votre application, le processus doit donc être automatisé et robuste. Construisez une bonne image et vous construisez une base solide et fiable pour votre application.
Conteneurisez-le
Si vous êtes nouveau dans le domaine des conteneurs, ne vous laissez pas intimider par la terminologie. Un conteneur n'est qu'un autre environnement. Les contraintes perçues du développement conteneurisé peuvent en fait vous aider à concentrer votre application et à mieux comprendre comment elle fonctionne, ce dont elle a besoin pour fonctionner de manière fiable et quels sont les risques potentiels en cas de problème. À l’inverse, cela entraîne beaucoup moins de contraintes pour les administrateurs système qui installent et exécutent votre application, car les conteneurs sont, par nature, un environnement contrôlé. Examinez attentivement votre code, comprenez les besoins de votre application et refactorisez-le en conséquence.