[Notez que cette réponse se concentre sur les conteneurs Linux et peut ne pas s'appliquer entièrement à d'autres systèmes d'exploitation. ]
Qu'est-ce qu'un conteneur?
C'est une application : un conteneur est un moyen d'exécuter des applications isolées les unes des autres. Plutôt que de virtualiser le matériel pour exécuter plusieurs systèmes d'exploitation, les conteneurs reposent sur la virtualisation du système d'exploitation pour exécuter plusieurs applications. Cela signifie que vous pouvez exécuter plus de conteneurs sur le même matériel que les machines virtuelles, car vous n'avez qu'une seule copie du système d'exploitation en cours d'exécution et vous n'avez pas besoin de préallouer la mémoire et les cœurs de processeur pour chaque instance de votre application. Comme toute autre application, lorsqu'un conteneur a besoin du processeur ou de la mémoire, il les alloue, puis les libère une fois terminé, permettant à d'autres applications d'utiliser ces mêmes ressources limitées plus tard.
Ils tirent parti des espaces de noms du noyau : chaque conteneur recevra par défaut un environnement dans lequel les espaces de noms suivants sont:
- Monter: les systèmes de fichiers,
/
dans le conteneur seront différents de ceux /
de l'hôte.
- PID: identifiant de processus, pid 1 dans le conteneur est votre application lancée, ce pid sera différent lorsqu'il est visualisé depuis l'hôte.
- Réseau: les conteneurs fonctionnent avec leur propre interface de bouclage (127.0.0.1) et une adresse IP privée par défaut. Docker utilise des technologies telles que les réseaux de pont Linux pour connecter plusieurs conteneurs ensemble dans leur propre réseau local.
- IPC: communication interprocessus
- UTS: cela inclut le nom d'hôte
- Utilisateur: vous pouvez éventuellement décaler tous les identifiants utilisateur pour qu'ils soient décalés de celui de l'hôte
Chacun de ces espaces de noms empêche également un conteneur de voir des éléments tels que le système de fichiers ou les processus sur l'hôte, ou dans d'autres conteneurs, sauf si vous supprimez explicitement cet isolement.
Et d'autres outils de sécurité Linux : les conteneurs utilisent également d'autres fonctionnalités de sécurité telles que SELinux, AppArmor, Capabilities et Seccomp pour empêcher les utilisateurs à l'intérieur du conteneur, y compris l'utilisateur root, de pouvoir s'échapper du conteneur ou d'avoir un impact négatif sur l'hôte.
Empaquetez vos applications avec leurs dépendances pour la portabilité : l'empaquetage d'une application dans un conteneur implique d'assembler non seulement l'application elle-même, mais toutes les dépendances nécessaires pour exécuter cette application, dans une image portable. Cette image est le système de fichiers de base utilisé pour créer un conteneur. Parce que nous isolons uniquement l'application, ce système de fichiers n'inclut pas le noyau et les autres utilitaires du système d'exploitation nécessaires pour virtualiser un système d'exploitation entier. Par conséquent, une image pour un conteneur doit être nettement plus petite qu'une image pour une machine virtuelle équivalente, ce qui accélère le déploiement sur les nœuds du réseau. En conséquence, les conteneurs sont devenus une option populaire pour le déploiement d'applications dans le cloud et les centres de données distants.
Peut-il remplacer une machine virtuelle dédiée au développement?
Cela dépend : si votre environnement de développement exécute Linux et que vous n'avez pas besoin d'accéder à des périphériques matériels, ou qu'il est acceptable d'avoir un accès direct au matériel physique, vous trouverez une migration vers un conteneur Linux assez simple. La cible idéale pour un conteneur Docker sont des applications telles que les API basées sur le Web (par exemple, une application REST), auxquelles vous accédez via le réseau.
Quel est le but, en termes simples, d'utiliser Docker dans les entreprises? L'avantage principal ?
Dev ou Ops : Docker est généralement introduit dans un environnement selon l'un des deux chemins. Les développeurs recherchant un moyen de développer et de tester localement plus rapidement leur application, et les opérations cherchant à exécuter plus de charge de travail sur moins de matériel que ce qui serait possible avec des machines virtuelles.
Ou Devops : L'une des cibles idéales est de tirer parti de Docker immédiatement à partir de l'outil de déploiement CI / CD, en compilant l'application et en créant immédiatement une image qui est déployée pour le développement, le CI, la production, etc. Les conteneurs réduisent souvent le temps de déplacement de l'application depuis l'enregistrement du code jusqu'à ce qu'il soit disponible pour les tests, ce qui rend les développeurs plus efficaces. Et lorsqu'elle est conçue correctement, la même image qui a été testée et approuvée par les développeurs et les outils CI peut être déployée en production. Étant donné que cette image inclut toutes les dépendances de l'application, le risque de rupture de la production qui a fonctionné en développement est considérablement réduit.
Évolutivité : un dernier avantage clé des conteneurs que je mentionnerai est qu'ils sont conçus pour une évolutivité horizontale à l'esprit. Lorsque vous avez des applications sans état sous une charge importante, les conteneurs sont beaucoup plus faciles et plus rapides à mettre à l'échelle en raison de leur taille d'image plus petite et de leur surcharge réduite. Pour cette raison, vous voyez des conteneurs utilisés par de nombreuses grandes entreprises basées sur le Web, telles que Google et Netflix.