Vous vous êtes finalement rendu à la merci des conteneurs et vous avez constaté qu'ils résolvent beaucoup de problèmes et présentent de nombreux avantages:
- Les conteneurs sont immuables: OS, bibliothèques, dossiers et applications - puisque tout cela est stocké directement dans le conteneur, vous êtes sûr à 100% que l'image testée en QA ira toujours en production. Et cela fonctionnera exactement de la même manière.
- Conteneurs légers: Un conteneur ne perd pas de mémoire. Au lieu de centaines de mégaoctets et gigaoctets, un conteneur n'a besoin que de mémoire pour le processus principal.
- Les conteneurs sont rapides: un conteneur démarre aussi rapidement qu'un processus Linux normal. Pas des minutes, mais littéralement des secondes.

Cependant, beaucoup croient encore que les conteneurs sont des machines virtuelles et oublient leur propriété la plus importante ...
Conteneurs éphémères
La jetabilité est la raison pour laquelle vous devriez changer votre approche sur la façon de manipuler les conteneurs.
Et voici ce qu'il ne faut en aucun cas faire pour ne pas perdre les avantages des conteneurs:1. Pas besoin de stocker des données à l'intérieur du conteneur. Pendant le cycle de vie, les conteneurs peuvent être suspendus, détruits, remplacés. Si l'application s'exécute dans un conteneur, la version 1.0 de cette application devrait facilement passer à la version 1.1 sans perte de données et autres problèmes. Par conséquent, si vous souhaitez enregistrer des données, elles doivent être écrites dessus. Cependant, vous devez alors vous assurer que les deux conteneurs n'écrivent pas au même endroit afin de ne pas endommager les données. Vérifiez donc que les applications écrivent correctement les données sur le stockage partagé.
2. Pas besoin de fractionner la livraison des applications. Certaines personnes pensent qu'un conteneur est la même machine virtuelle. Et la plupart d'entre eux pensent que les applications doivent être déployées dans des conteneurs existants. En fait, cela est également possible, en particulier dans la phase de développement, lorsque le débogage et le déploiement sont constants. Mais ils ne doivent saisir le CD-ROM de livraison continue pour transfert au service AQ ou production que dans le cadre de leur propre image. N'oubliez pas: les conteneurs sont inébranlables.
3. Pas besoin de créer de grandes images. Une grande image est plus difficile à diffuser. Par conséquent, l'image ne doit inclure que les fichiers et les bibliothèques qui sont vraiment nécessaires pour démarrer le processus de demande. Pas besoin d'installer des packages inutiles ou d'exécuter des mises à jour (mise à jour yum), qui créent une nouvelle couche dans l'image et y écrivent beaucoup de fichiers.
4. N'utilisez pas de conteneurs à une seule couche. Pour utiliser efficacement les systèmes de fichiers multicouches (multiniveaux), créez toujours des couches distinctes pour le système d'exploitation, pour la définition du nom d'utilisateur, pour la configuration et, enfin, pour l'application elle-même. Il sera donc plus facile de recréer, de maintenir et de distribuer des images.
5. Pas besoin de créer des images à partir de conteneurs en cours d'exécution. En d'autres termes, n'utilisez pas la commande docker commit pour créer une image, car ces images ne seront pas reproductibles. À la place, utilisez toujours un Dockerfile ou d'autres outils S2I (source-à-image) qui offrent une reproductibilité. De plus, dans Dockerfile, vous pouvez facilement suivre les modifications si vous les stockez dans le référentiel source (git).
6. Pas besoin d'utiliser uniquement la dernière balise. Cette balise est quelque chose comme INSTANTANÉ pour les utilisateurs de Maven. En raison de la nature multicouche du système de fichiers conteneur, les balises sont très utiles. Cependant, vous pouvez vous attendre à une surprise désagréable lorsque, par exemple, après une pause de plusieurs mois, vous décidez de collecter une image et constatez soudainement que l'application ne démarre plus car la couche parent (FROM dans le langage Dockerfile) a été remplacée par une nouvelle version qui ne prend pas en charge la compatibilité descendante. Ou parce que la mauvaise version a été récupérée du cache de génération que vous attendiez. En outre, la dernière balise doit également être évitée lors du déploiement de conteneurs en production, car vous ne pourrez pas suivre la version de l'image qui est lancée.
7. Pas besoin d'exécuter plus d'un processus dans un conteneur. Les conteneurs sont parfaitement adaptés à un seul processus (démon http daemon, serveur d'applications, SGBD). Sinon, vous pouvez rencontrer toutes sortes de problèmes, tels que creuser dans les journaux ou mettre à jour les processus séparément.
8. Pas besoin de stocker les informations d'identification dans une image - utilisez des variables d'environnement pour cela. Ne prescrire aucun identifiant et mot de passe dans l'image. Utilisez plutôt des variables d'environnement pour extraire les données pertinentes de sources externes au conteneur. L'image Postgres est un excellent exemple de la façon de procéder correctement.
9. Pas besoin d'exécuter des processus en tant que root. «Par défaut, les conteneurs Docker s'exécutent en tant que root. (...) Cependant, à mesure que la technologie évolue, d'autres options de démarrage par défaut plus sûres peuvent apparaître. Dans les conditions actuelles, l'exigence racine peut être considérée comme une menace et peut ne pas être fournie dans tous les environnements. Pour spécifier un utilisateur autre que root, pour le compte duquel le conteneur sera lancé, la directive USER est utilisée »(Extrait de Guidance for Docker Image Authors)
10. Pas besoin de se fier aux adresses IP. Chaque conteneur a sa propre adresse IP interne, qui peut changer après le redémarrage du conteneur. Si l'application ou le microservice doit communiquer avec un autre conteneur, utilisez des variables d'environnement pour transférer le nom d'hôte souhaité vers le numéro de port d'un conteneur à un autre.
Tu te souviens? Vous pouvez désormais l'utiliser en toute sécurité. Et des conseils pratiques pour l'utilisation des conteneurs peuvent être trouvés sur notre blog.