GNU/Linux >> Tutoriels Linux >  >> Linux

Comment conteneuriser les applications héritées

Présentation

Les organisations du monde entier adoptent une approche basée sur les microservices et axée sur les conteneurs pour la livraison de logiciels. Cependant, la plupart des logiciels ont été conçus et écrits avant l'existence de conteneurs modernes basés sur des images.

Si vous envisagez de passer à un modèle de déploiement de conteneur Docker, vous devez tenir compte des effets que la migration aura sur vos applications existantes.

Ce didacticiel décrit le travail de préparation requis et les commandes Docker de base pour la conteneurisation des applications héritées.

Pourquoi conteneuriser les anciennes applications ?

Les entreprises qui adoptent le déploiement de logiciels de conteneurs doivent restructurer leur organisation pour refléter les processus du nouveau workflow de conteneurs. L'analyse des avantages potentiels du déploiement de conteneurs est utile pour déterminer la meilleure approche pour votre application.

Efficacité et portabilité

Le déploiement de conteneurs peut être une solution efficace car les conteneurs démarrent généralement en quelques secondes. L'image du conteneur contient tous les fichiers binaires, bibliothèques et dépendances, ce qui signifie qu'il n'est pas nécessaire d'ajouter des configurations spécifiques à l'environnement. La même image est désormais portable sur plusieurs systèmes. L'image est exempte de limitations environnementales, ce qui rend les déploiements fiables, portables et évolutifs. En conteneurisant les applications, vous séparez le système de fichiers et le runtime de son hôte.

Maintenabilité et évolutivité

Au lieu de gérer une application monolithique étendue, vous créez un modèle architectural dans lequel les applications complexes consistent en de petits processus indépendants qui communiquent entre eux à l'aide d'API.

En résolvant les conflits d'applications entre différents environnements, les développeurs peuvent partager leurs logiciels et leurs dépendances avec les opérations informatiques et les environnements de production. Les développeurs et les opérations informatiques sont étroitement liés et peuvent collaborer efficacement. Le flux de travail du conteneur offre aux Dev Ops la continuité dont ils ont besoin. La capacité d'identifier les problèmes au début du cycle de développement réduit le coût d'une refonte majeure à un stade ultérieur.

Outils de gestion des conteneurs

Les outils de gestion de conteneurs tiers fournissent un mécanisme de mise en réseau, de surveillance et de stockage persistant pour les applications conteneurisées. Les anciennes applications peuvent tirer parti des cadres d'orchestration de pointe tels que Kubernetes.

Ces outils améliorent la disponibilité, les capacités d'analyse et facilitent la surveillance de l'état des applications.

Planifier les conteneurs

Pour réussir la migration de vos applications, vous devez développer une stratégie qui examine les besoins de vos applications couplés à la nature des conteneurs. Sur le plan technique, n'importe quelle application peut être déployée dans un conteneur. Il existe plusieurs solutions possibles pour déployer une ancienne application dans un conteneur :

1. Réécrivez et reconcevez entièrement votre ancienne application.

2. Exécutez une application monolithique existante dans un seul conteneur.

3. Améliorez et remodelez les applications afin qu'elles puissent tirer parti de la nouvelle architecture distribuée.

Quel que soit le chemin choisi, il est crucial d'identifier correctement si une application est un bon candidat pour être déployée dans un environnement de conteneur en premier lieu. L'accent doit être mis sur l'architecture, les performances et la sécurité.

Architecture

Les applications doivent être déconstruites en services individuels afin qu'elles puissent être mises à l'échelle et déployées individuellement. Pour utiliser pleinement le déploiement de conteneurs, déterminez s'il est possible de diviser votre application existante en plusieurs conteneurs.

Idéalement, un seul processus devrait être affecté à un seul conteneur. Même les tâches cron doivent être externalisées dans des conteneurs séparés. Cela peut nécessiter de refaire l'architecture de votre application.

Performances

Déterminez si votre application a des exigences matérielles spécifiques. Les conteneurs utilisent des fonctionnalités Linux qui partitionnent le noyau sous-jacent. Il peut être nécessaire de configurer des conteneurs individuels avec des paramètres uniques ou de fournir des ressources spécifiques.

De plus, tenez compte du fait que Docker n'a pas de démon init pour nettoyer les processus zombies. Assurez-vous d'en fournir un comme ENTRYPOINT dans votre dockerfile. Considérez dumb.ino comme une solution légère possible.

Sécurité

Les conteneurs offrent moins d'isolation que les machines virtuelles, et il est important de définir le niveau de sécurité dont votre application a besoin. Définissez des contraintes strictes pour les comptes d'utilisateurs et de services. Gardez les secrets et les mots de passe isolés de vos images de conteneurs, respectez les principes du moindre privilège et maintenez une défense en profondeur pour sécuriser les clusters Kubernetes.

Exigences de mémoire persistante

Dans l'orchestration de conteneurs, toutes les données persistantes ne sont pas enregistrées dans la couche inscriptible des conteneurs. Au lieu de cela, les données permanentes sont enregistrées sur des volumes persistants clairement définis. Cette approche garantit que les données permanentes n'augmentent pas la taille d'un conteneur et existent indépendamment du cycle de vie du conteneur.

Si les données permanentes de votre ancienne application sont réparties dans le système de fichiers ou sont écrites dans des chemins partagés avec l'application elle-même, nous vous conseillons de restructurer l'application afin qu'elle écrive toutes les données permanentes dans un seul chemin du système de fichiers. Cela simplifiera la migration des données d'application vers un environnement conteneurisé.

Extérioriser les services

Identifiez les services locaux qui peuvent être externalisés et exécutés dans des conteneurs séparés. Recherchez les services de mise en cache et de base de données, ceux-ci peuvent être externalisés le plus facilement. Comme alternative, vous pouvez utiliser des services gérés au lieu de les configurer et de les gérer vous-même.

Préparer l'image pour plusieurs environnements

Il est prévu que vous utilisiez une seule image Docker dans un environnement de développement, d'assurance qualité et de production. Tenez compte des variables de configuration spécifiques à l'environnement. Si vous en identifiez, vous devrez écrire un script de démarrage qui mettra à jour les fichiers de configuration de l'application par défaut.

Déployer l'ancienne application sur les conteneurs

En supposant que Docker est opérationnel sur votre système, il existe plusieurs façons de créer une image Docker :

  1. Utilisez une image vide et ajoutez des calques supplémentaires en important un ensemble de fichiers externes.
  2. Utilisez la ligne de commande pour saisir de manière interactive des commandes Docker individuelles et créer une nouvelle image avec docker commit .
  3. Utilisez un outil de gestion de configuration sophistiqué (par exemple, comme Puppet et Chef) pour un déploiement complexe.
  4. Utilisez une image de base existante et spécifiez un ensemble de commandes dans un Dockerfile .

Les Dockerfiles sont un excellent point de départ pour comprendre comment utiliser un environnement d'exécution de conteneur pour créer une image. Si vous faites une erreur, vous pouvez facilement modifier le fichier et créer une nouvelle image de conteneur avec une seule commande.

Dockerfile d'application héritée

Un Dockerfile est un simple fichier texte avec un ensemble de commandes exécutées dans un ordre strict. Les Dockerfiles sont généralement basés sur des images existantes, avec seulement quelques paramètres supplémentaires. Utilisez votre interface de ligne de commande pour créer un répertoire contenant les fichiers dont vous avez besoin pour votre build :

mkdir ImageForLegacyApp
cd ImageForLegacyApp

Une fois le processus de génération démarré, les fichiers de ce répertoire sont envoyés au démon Docker. En limitant le nombre de fichiers, nous accélérons le processus de construction et économisons de l'espace disque.

Utilisez votre éditeur de texte préféré pour le codage ou la programmation (nous utilisons vim) pour créer un Dockerfile vide, dans ImageForLegacyApp répertoire :

vim Dockerfile

Les instructions de construction suivantes concernent une application PHP simple. Nous commençons par extraire un système d'exploitation avec PHP et Apache installés.

FROM php:apache

FROM est la première instruction du Dockerfile. Il définit l'image de base, dans cet exemple Debian OS avec PHP et Apache installés. Si vous souhaitez une version spécifique d'une image de base, veillez à utiliser la balise correspondante (par exemple, php:7.0-apache ).

COPY ./var/www/html

Utilisez le COPY commande pour copier votre code PHP dans l'image. Utilisez le ADD commande à la place si l'extraction tar est nécessaire.

WORKDIR /var/www/html

Cela définit le dossier de travail. Toutes les commandes suivantes s'appliqueront à ce dossier.

EXPOSE 80

Définissez le port que l'application doit écouter avec le EXPOSE commande. Une fois que vous avez lancé l'image et lié celle en cours d'exécution à un autre conteneur, le port exposé est disponible pour l'autre conteneur comme s'il se trouvait sur le même système local.

CMD [“php”, “./legacy_app.php”]

Utilisez le CMD commande pour identifier la commande par défaut à exécuter à partir de l'image, ainsi que les options que vous souhaitez lui transmettre. Vous ne pouvez avoir qu'une seule ligne CMD dans un Dockerfile.

LABEL version="1.1"

Nous utilisons le LABEL instruction d'ajouter des métadonnées à l'image. Outre l'étiquette que vous attribuez, l'image extraira toutes les étiquettes attribuées à l'image parent appelée avec le FROM commande.

Création d'une image Docker

Nous avons défini avec succès les instructions dans le Dockerfile. Démarrez le processus de génération en saisissant la commande suivante dans votre terminal de commande :

docker build -t legacyapp [location_of_Dockerfile]

Au cours du processus de construction, chaque image reçoit un identifiant unique. Pour localiser et identifier facilement l'image dans un registre, utilisez le -t commande pour nommer l'image. Dans cet exemple, l'image va s'appeler legacyapp .

docker build -t legacyapp .
  1. La docker build commande demande au démon Docker de créer une image basée sur le Dockerfile.
  2. Le chemin fourni à la docker build La commande est utilisée pour télécharger des fichiers et des répertoires.
  3. Chaque étape de construction est numérotée au fur et à mesure que le démon Docker procède à l'exécution des commandes du Dockerfile.
  1. Chaque commande génère une nouvelle image. Et l'ID de l'image s'affiche à l'écran.
  2. Chaque conteneur docker intermédiaire est supprimé avant de passer à l'étape suivante pour préserver l'espace disque.

L'image Docker est prête et vous avez reçu une référence d'identification unique. De plus, nous n'avons pas utilisé de balise de version, donc Docker a automatiquement marqué l'image comme :latest .

Exécuter une image Docker

L'image est maintenant prête à être déployée. L'exécution de docker run la sous-commande démarre le conteneur :

sudo docker run --name apache2 legacyapp

Le --name fournit au conteneur un nom unique, tandis que l'argument legacyapp l'argument représente le nom de l'image docker statique que nous avons créée.

Pour afficher une liste des conteneurs qui ont été démarrés et supprimés, saisissez la commande suivante :

docker ps -a

La sortie fournit une vue d'ensemble ainsi qu'un ID et un statut de conteneur.

Accédez à localhost pour vérifier si votre application est correctement servie par le serveur Apache.


Linux
  1. Comment utiliser Podman à l'intérieur d'un conteneur

  2. Comment changer les applications par défaut de Debian

  3. Comment installer l'application Spotify sur Linux

  4. Comment les fichiers d'applications mutuellement non fiables sont-ils protégés sous Linux ?

  5. Comment quitter un conteneur Docker

Comment ajouter une application dans la liste des applications ouvertes avec Ubuntu

Comment ajouter une application à la liste des applications ouvertes avec ?

Comment créer un conteneur d'application Django Docker

Comment se connecter en SSH à un conteneur Docker

Comment déployer rapidement des applications full-stack avec les modèles d'application Portainer

Comment gérer les conteneurs Docker