Docker est très populaire maintenant, et la technologie des conteneurs semble être omnipotente, mais c'est en fait un malentendu. Ne soyez pas fasciné par la bulle de battage médiatique. Cet article jette le battage médiatique et répertorie rationnellement les cinq malentendus actuels de Docker du point de vue des programmeurs Java pour vous aider à mieux comprendre les avantages et les problèmes de Docker.
En mettant de côté le battage médiatique et des fabricants, comment pouvons-nous utiliser Docker mieux et plus rationnellement?
Docker a récemment attiré l'attention et les raisons sont évidentes. Comment livrer avec succès le code a toujours troublé tout le monde. La technologie traditionnelle des conteneurs est chaotique parmi de nombreux besoins et modèles. Docker peut créer des conteneurs simplement et à plusieurs reprises. L'utilisation de Docker permet la livraison de code plus rapide et plus naturelle que les autres conteneurs. Duang, Docker est populaire! Il y a aussi quelques malentendus et malentendus. Ne faites pas confiance aux autres pour dire que Docker est facile à utiliser ou non. Penser à Docker de manière rationnelle et globale par vous-même vous aidera à vraiment comprendre si vous en avez vraiment besoin.
Cet article énumère cinq erreurs de lecture majeure Docker du point de vue de Java. Mais introduisez d'abord quelques connaissances de base. Pour mieux comprendre Docker, nous avons consulté Avishai Ish-Shalom de FewBytes, qui possède une vaste expérience Docker et est également l'organisateur de la conférence DevOps Days. Nous avons inscrit ces malentendus avec lui.
Malentendu principal
1. Docker est une machine virtuelle légère
C'est le principal malentendu lorsque vous êtes débutant Docker. Ce malentendu est compréhensible, Docker ressemble un peu à une machine virtuelle. Certaines personnes comparent même la différence entre Docker et les machines virtuelles sur le site Web de Docker. Cependant, Docker n'est pas en fait une machine virtuelle légère, mais un récipient Linux amélioré (LXC). Docker et les machines virtuelles sont complètement différentes. Si vous utilisez des conteneurs Docker comme machines virtuelles légères, vous rencontrerez de nombreux problèmes.
Avant d'utiliser Docker, vous devez comprendre qu'il existe de nombreuses différences essentielles entre les conteneurs Docker et les machines virtuelles.
Isolement des ressources: Docker ne peut pas atteindre le niveau d'isolement des ressources qu'une machine virtuelle peut fournir. Les ressources de la machine virtuelle sont très isolées et Docker a dû partager certaines ressources depuis sa création. Ces ressources ne peuvent pas être isolées et protégées par Docker, telles que le cache de page et le pool d'entropie du noyau. (Remarque: le pool d'entropie du noyau est intéressant, il collecte et stocke des bits aléatoires générés par les opérations du système. La machine utilisera ce pool lorsqu'il doit être randomisé, tel que lié au mot de passe.) Si le conteneur Docker occupe ces ressources partagées, d'autres processus ne peuvent qu'attendre que ces ressources ne soient publiées.
Aux frais généraux: La plupart des gens savent que le CPU et la RAM d'une machine virtuelle peuvent fournir des performances physiques en forme de machine, mais il y a beaucoup de frais généraux d'IO supplémentaires. Étant donné que le système d'exploitation invité des machines virtuels est abandonné, le package de Docker est plus petit et nécessite moins de frais de stockage que les machines virtuelles. Mais cela ne signifie pas que Docker n'a pas de problèmes de frais généraux. Les conteneurs Docker doivent toujours faire attention aux frais généraux IO, mais ils ne sont pas aussi sérieux que les machines virtuelles.
Utilisation du noyau: les conteneurs Docker et les machines virtuelles sont complètement différents dans l'utilisation du noyau. Chaque machine virtuelle utilise un noyau. Les conteneurs Docker partagent les grains entre tous les conteneurs. Les grains partagés apportent des gains d'efficacité, mais au détriment de la haute disponibilité et de la redondance. Si un crash du noyau se produit dans une machine virtuelle, seule la machine virtuelle de ce noyau sera affectée. Si le noyau du conteneur Docker s'écrase, tous les conteneurs seront affectés.
2. Docker rend les applications évolutives
Parce que Docker peut déployer du code sur plusieurs serveurs en très peu de temps, certaines personnes penseront naturellement que Docker peut rendre l'application elle-même évolutive. Malheureusement, c'est faux. Le code est la pierre angulaire de l'application et Docker ne réécrit pas le code. L'évolutivité d'une application dépend toujours du programmeur. L'utilisation de Docker ne facilite pas automatiquement votre code, il facilite le déploiement de serveurs.
3. Docker est largement utilisé dans les environnements de production
Parce que Docker bat son plein, de nombreuses personnes croient que Docker peut être utilisé à grande échelle dans les environnements de production. En fait, ce n'est pas juste. Notez que Docker est encore une technologie très nouvelle, immature et en croissance, ce qui signifie qu'il y a encore de nombreux bogues et fonctionnalités ennuyeux à améliorer. Il est vrai que vous êtes intéressé par les nouvelles technologies, mais il est préférable de déterminer les scénarios d'utilisation corrects et ce à quoi il faut faire attention. Désormais, Docker est facile à appliquer aux environnements de développement. L'utilisation de Docker peut facilement créer de nombreux environnements différents (au moins, cela donne aux gens le sentiment qu'ils peuvent créer des environnements différents), ce qui est très utile pour le développement.
Dans les environnements de production, l'immaturité et l'imperfection de Docker limitent également les scénarios d'utilisation. Par exemple, Docker ne prend pas directement la surveillance des réseaux et des ressources pour plusieurs machines, ce qui rend presque impossible à utiliser dans les environnements de production. Bien sûr, il existe de nombreux domaines potentiels, tels que le déploiement directement du même package de l'environnement de développement à l'environnement de production. Il existe également certaines fonctionnalités d'exécution Docker qui sont également utiles pour les environnements de production. Mais en général, dans l'environnement de production, il n'y a actuellement pas plus d'avantages que d'avantages. Cela ne signifie pas qu'il ne peut pas être appliqué avec succès à l'environnement de production, mais maintenant il ne peut plus mûrir et parfait à la fois.
4. Docker est Cross-OS
Un autre malentendu est que Docker travaille sur n'importe quel système d'exploitation et environnement. Cela peut provenir d'une analogie des conteneurs pour le chargement et le déchargement des marchandises, mais la relation entre les logiciels et les systèmes d'exploitation n'est pas aussi simple et directe que la position du navire.
En fait, Docker n'est qu'une technologie sur Linux. De plus, Docker s'appuie sur des fonctionnalités spécifiques du noyau et doit avoir la dernière version du noyau. Sur la base des différences entre les différentes OS, si vous n'utilisez pas les fonctionnalités les plus basses de la Sose, vous rencontrerez de nombreux problèmes gênants. Ces problèmes ne peuvent avoir qu'une incidence de 1%, mais lorsque vous déployez sur plusieurs serveurs, 1% est également fatal.
Bien que Docker s'exécute uniquement sur Linux, il peut également être utilisé sur OS X ou Windows. L'utilisation de boot2docker exécutera une machine virtuelle Linux sur une machine OS X ou Windows, afin que Docker puisse s'exécuter dans cette machine virtuelle.
5. Docker améliore la sécurité des applications
C'est également un malentendu que Docker puisse améliorer la sécurité du code et du processus de livraison. C'est également la différence entre un réel conteneur et un conteneur sur un logiciel. Docker est une technologie de contenerisation qui ajoute des méthodes d'orchestration. Cependant, les conteneurs Linux ont des vulnérabilités de sécurité qui peuvent être attaquées. Docker n'ajoute aucune couche de sécurité ou correctif à ces vulnérabilités. Ce n'est pas une chemise à pantalon qui peut protéger les applications.
Du point de vue Java
Certains développeurs Java ont commencé à utiliser Docker. Certaines fonctionnalités de Docker nous permettent de construire plus facilement des contextes évolutifs. Contrairement à Uber-Jar, Docker peut vous aider à emballer toutes vos dépendances (y compris JVM) dans une image prête à la sortie. C'est aussi la chose la plus fascinante à propos de Docker pour les développeurs. Cependant, cela apportera également des dangers cachés. D'une manière générale, les programmeurs doivent le surveiller de différentes manières et coder de manière interactive, le déboguer, le connecter, le régler ... Si vous utilisez Docker, ceux-ci nécessiteront un travail supplémentaire.
Par exemple, nous voulons utiliser JConsole, qui repose sur les fonctions JMX, car JMX a besoin de réseaux pour utiliser RMI. Ce n'est pas très direct si vous utilisez Docker et que vous avez besoin de compétences pour ouvrir le port requis. Nous avons d'abord découvert que le problème était que lorsque nous voulions créer une application Docker pour Takipi, nous avons dû exécuter un programme d'arrière-plan en dehors du JVM dans le conteneur. Solution détaillée sur github.
Un autre problème grave est que le réglage des performances des conteneurs Docker est assez difficile. Lorsque vous utilisez des conteneurs, vous ne savez pas combien de mémoire chaque conteneur alloue. Si vous avez 20 conteneurs, la mémoire leur sera allouée d'une manière dont vous êtes incertain. Si vous prévoyez de régler le tas avec le paramètre -xmx, il est difficile car le traitement du JVM dans le conteneur Docker dépend de la possibilité d'obtenir automatiquement la mémoire allouée au conteneur. Le réglage des performances est presque impossible si vous ne savez pas combien de mémoire est allouée.
en conclusion
Docker est une technologie très intéressante et possède des scénarios d'utilisation réels et efficaces. En tant que technologie émergente, il faut également beaucoup de temps pour résoudre les fonctionnalités manquantes et les bogues connus. Cependant, il y a en effet beaucoup de battage médiatique dans ce domaine maintenant. Mais rappelez-vous, le battage médiatique n'est pas un succès ~
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!