7 cas où vous ne devriez pas utiliser Docker

Docker change la donne. Mais ce n’est pas une solution universelle.

Il y a beaucoup de bonnes choses à propos de Docker. Il emballe, expédie et exécute des applications comme un outil de conteneurisation léger, portable et autonome. Docker est idéal pour les entreprises de toutes tailles. Lorsque vous travaillez sur un morceau de code dans une petite équipe, cela élimine le problème «mais ça marche sur ma machine». Pendant ce temps, les entreprises peuvent utiliser Docker pour créer des pipelines de livraison de logiciels Agile afin de livrer de nouvelles fonctionnalités plus rapidement et de manière plus sécurisée.

Avec son système de conteneurisation intégré, Docker est un excellent outil pour le cloud computing. À son tour, Docker Swarm fait progresser la mise en cluster et la conception décentralisée. Cela semble trop beau pour être vrai, non? Eh bien, il y a encore plusieurs cas où ne pas utiliser Docker. En voici sept.

n'utilisez pas de docker

Passons en revue ceux-ci un par un.

N'utilisez pas Docker si vous avez besoin d'augmenter la vitesse

Les conteneurs Docker sont plus petits et nécessitent moins de ressources qu'une machine virtuelle avec un serveur et une base de données. Dans le même temps, Docker utilisera autant de ressources système que le planificateur du noyau de l'hôte le permettra. Vous ne devez pas vous attendre à ce que Docker accélère une application de quelque manière que ce soit.

De plus, Docker pourrait même le ralentir. Si vous travaillez avec, vous devez définir des limites sur la quantité de mémoire, de CPU ou d'E / S de bloc que le conteneur peut utiliser. Sinon, si le noyau détecte que la mémoire de la machine hôte est trop faible pour exécuter des fonctions système importantes, il pourrait commencer à tuer des processus importants. Si le mauvais processus est tué (y compris le Docker lui-même), le système sera instable.

Malheureusement, les ajustements de mémoire de Docker - la priorité de mémoire insuffisante sur le démon Docker - ne résolvent pas ce problème. En revanche, une couche supplémentaire entre une application et le système d'exploitation pourrait également entraîner une réduction de la vitesse. Pourtant, cette diminution sera insignifiante. Les conteneurs Docker ne sont pas entièrement isolés et ne contiennent pas de système d'exploitation complet comme n'importe quelle machine virtuelle.

N'utilisez pas Docker si vous accordez la priorité à la sécurité

Le plus grand avantage de sécurité de Docker est qu'il divise l'application en plusieurs parties. Si la sécurité d'une partie est compromise, les autres ne seront pas affectées.

Cependant, alors que les processus isolés dans les conteneurs promettent une sécurité améliorée, tous les conteneurs partagent l'accès à un système d'exploitation hôte unique. Vous risquez d'exécuter des conteneurs Docker avec une isolation incomplète. Tout code malveillant peut accéder à la mémoire de votre ordinateur.

Il existe une pratique courante pour exécuter un grand nombre de conteneurs dans un seul environnement. C'est ainsi que vous rendez votre application prédisposée au type d'attaques d'abus de ressources, sauf si vous limitez les capacités du conteneur de ressources. Pour une efficacité et une isolation maximales, chaque conteneur doit aborder un domaine de préoccupation spécifique.

Un autre problème est la configuration par défaut de Docker - les utilisateurs n'ont pas d'espace de noms. Les espaces de noms permettent aux ressources logicielles d'utiliser d'autres ressources uniquement si elles appartiennent à un espace de noms spécifique.

L'exécution d'applications avec Docker implique l'exécution du démon Docker avec les privilèges root. Tous les processus sortant du conteneur Docker auront les mêmes privilèges sur l'hôte que dans le conteneur. L'exécution de vos processus à l'intérieur des conteneurs en tant qu'utilisateur non privilégié ne peut pas garantir la sécurité. Cela dépend des fonctionnalités que vous ajoutez ou supprimez. Pour atténuer les risques de rupture de conteneur Docker, vous ne devez pas télécharger de conteneurs prêts à l'emploi à partir de sources non fiables.

N'utilisez pas Docker si vous développez une application GUI de bureau

Docker ne convient pas aux applications qui nécessitent une interface utilisateur riche. Docker est principalement destiné aux conteneurs isolés avec des applications basées sur la console. Les applications basées sur l'interface graphique ne sont pas une priorité, leur prise en charge dépendra du cas et de l'application spécifiques. Les conteneurs Windows sont basés sur Nano ou Core Server - il ne permet pas aux utilisateurs de démarrer une interface GUI ou un serveur Docker RDP dans le conteneur Docker.

Pourtant, vous pouvez toujours exécuter des applications basées sur l'interface graphique développées avec Python et le framework QT dans un conteneur Linux. De plus, vous pouvez utiliser le transfert X11, mais cette solution est quelque peu délicate.

N'utilisez pas Docker si vous souhaitez éclairer le développement et le débogage

Docker a été créé par des développeurs et pour des développeurs. Il assure la stabilité de l'environnement: un conteneur sur la machine de développement fonctionnera exactement de la même manière sur la staging, la production ou tout autre environnement. Cela élimine le problème de la gestion des versions de divers programmes dans différents environnements.

Avec l'aide de Docker, vous pouvez facilement ajouter une nouvelle dépendance à votre application. Aucun développeur de votre équipe n'aura besoin de répéter cette manipulation sur sa machine. Tout sera opérationnel dans le conteneur et distribué à toute l'équipe.

Dans le même temps, vous devez effectuer une configuration supplémentaire pour coder votre application dans Docker. De plus, avec le débogage Docker, vous devez configurer la sortie des journaux et configurer les ports de débogage. Vous devrez peut-être également mapper les ports de vos applications et services dans des conteneurs. Donc, si vous avez un processus de déploiement compliqué et fastidieux, Docker vous aidera beaucoup. Si vous avez une application simple, cela ajoute simplement une complexité inutile.

N'utilisez pas Docker si vous devez utiliser différents systèmes d'exploitation ou noyaux

Avec les machines virtuelles, l'hyperviseur peut abstraire un appareil entier. Vous pouvez utiliser Microsoft Azure pour exécuter les deux instances de Windows Server et Linux Server en même temps. L'image Docker, cependant, nécessite le même système d'exploitation pour lequel elle a été créée.

Il existe une grande base de données d'images de conteneurs Docker - Docker Hub. Pourtant, si une image a été créée sur Linux Ubuntu, elle ne fonctionnera que sur exactement le même Ubuntu.

Si une application est développée sous Windows, mais que la production s'exécute sous Linux, vous ne pourrez pas utiliser Docker efficacement. Parfois, il est plus facile de configurer un serveur si vous avez plusieurs applications statiques.

N'utilisez pas Docker si vous avez beaucoup de données précieuses à stocker

De par leur conception, tous les fichiers Docker sont créés dans un conteneur et stockés sur une couche de conteneur inscriptible. Il peut être difficile de récupérer les données du conteneur si un autre processus en a besoin. De plus, la couche inscriptible d'un conteneur est connectée à la machine hôte sur laquelle le conteneur s'exécute. Si vous devez déplacer les données ailleurs, vous ne pouvez pas le faire facilement. Plus que cela, toutes les données stockées dans un conteneur seront perdues à jamais une fois le conteneur arrêté.

Vous devez d'abord penser à des moyens de sauvegarder vos données ailleurs. Pour assurer la sécurité des données dans Docker, vous devez utiliser un outil supplémentaire: Docker Data Volumes. Pourtant, cette solution est encore assez maladroite et doit être améliorée.

N'utilisez pas Docker si vous recherchez la technologie la plus simple à gérer

Introduit en 2012, Docker est toujours une nouvelle technologie. En tant que développeur, vous devrez peut-être mettre à jour régulièrement les versions de Docker. Malheureusement, la compatibilité descendante n'est pas garantie. De plus, la documentation prend du retard sur l'avancement de la technologie. En tant que développeur, vous devrez comprendre certaines choses vous-même.

De plus, les options de surveillance offertes par Docker sont assez médiocres. Vous pouvez obtenir un aperçu rapide de quelques statistiques simples. Pourtant, si vous souhaitez voir des fonctionnalités de surveillance avancées, Docker n'a rien à offrir.

De plus, dans le cas d'une application volumineuse et complexe, la mise en œuvre de Docker a un coût. Construire et maintenir la communication entre de nombreux conteneurs sur de nombreux serveurs prendra beaucoup de temps et d'efforts. Pourtant, il existe un outil utile, qui facilite le travail avec les applications Docker multi-conteneurs, - Docker Compose. Docker Compose définit les services, les réseaux et les volumes dans un seul fichier YAML.

Néanmoins, l'écosystème Docker est assez fracturé - tous les produits de conteneurs de support ne fonctionnent pas bien les uns avec les autres. Chaque produit est soutenu par une certaine entreprise ou communauté. La concurrence acharnée entre ces derniers entraîne une incompatibilité des produits.

Envelopper

Les professionnels de KeenEthics aiment travailler avec Docker et l'utilisent souvent pour le développement d'applications. Malgré certains inconvénients, vous pouvez facilement l'utiliser pour exécuter et gérer des applications côte à côte dans des conteneurs isolés.

L'installation d'une application peut être aussi simple que d'exécuter une seule commande -. Docker fournit également un environnement d'isolation propre et original pour chaque test, ce qui en fait un outil important et utile pour les tests d'automatisation.

Les fonctionnalités de Docker offrent des avantages en termes de gestion des dépendances et de sécurité. Augmenté d'outils utiles tels que Docker Hub, Docker Swarm et Docker Compose, Docker est une solution populaire et conviviale.

Malgré tous les avantages de Docker, vous ne devez pas l'utiliser pour conteneuriser chaque application que vous développez.

N'oubliez pas: Docker change la donne. Mais ce n’est pas une solution universelle.

Docker n'est pas non plus le seul outil de ce type sur le marché. Les alternatives de Docker sont rkt, prononcé comme «rocket», Linux Containers ou OpenVZ. Chacun de ceux-ci avec ses avantages et ses inconvénients est assez similaire à Docker. La popularité croissante et les taux d'utilisation de Docker ne sont causés que par la décision des entreprises de l'adopter.

Avant de sauter aux conclusions quant à l'utilisation de Docker ou non, recherchez les exigences du projet. Parlez à vos collègues ou à vos pairs et laissez-les vous aider à décider quand utiliser Docker, quand ne pas utiliser de conteneurs et s'il s'agit de l'un de ces cas d'utilisation de Docker.

Que cela vous plaise ou non, cette technologie a un avenir. Certains développeurs et agences de développement détestent Docker et essaient de l'éliminer de tous leurs projets en cours. En même temps, il y a des spécialistes qui conteneurisent tout ce qu'ils peuvent parce qu'ils voient Docker comme une panacée. Peut-être ne devriez-vous rejoindre aucun des deux camps. Restez impartial, restez objectif et prenez une décision en fonction d'une situation particulière.

Vous avez une idée pour un projet Docker?

Mon entreprise KeenEthics est une équipe de développeurs d'applications Web expérimentés. Si vous avez besoin d'une estimation gratuite d'un projet similaire, n'hésitez pas à nous contacter .

Vous pouvez lire plus d'articles similaires sur mon blog Keen. Permettez-moi de vous suggérer de lire Pourquoi refactoriser votre code? ou modèles de développement logiciel expliqués: externalisation vs externalisation, prix fixe vs temps et matériel?

PS

Aussi, je voudrais dire "merci" à Alex Pletnov pour avoir co-écrit cet article ainsi que les lecteurs pour l'avoir fait jusqu'au bout!

L'article original publié sur le blog KeenEthics peut être trouvé ici: 7 cas où ne pas utiliser Docker.