{"id":91905,"date":"2020-08-20T07:42:23","date_gmt":"2020-08-20T05:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii"},"modified":"2020-08-20T07:42:23","modified_gmt":"2020-08-20T05:42:23","slug":"chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Qu'est-ce que Docker : aper\u00e7u de l'histoire et des principales abstractions","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Le 10 ao\u00fbt, un <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">cours vid\u00e9o sur Docker<\/a><\/noindex>, dans lequel nous l'explorons en profondeur \u2014 des abstractions de base aux param\u00e8tres r\u00e9seau. <\/p>\n<p><\/p>\n<p>Dans cet article, nous discuterons de l'histoire de Docker et de ses principales abstractions : Image, Cli, Dockerfile. La le\u00e7on est destin\u00e9e aux d\u00e9butants, elle ne sera donc probablement pas int\u00e9ressante pour les utilisateurs exp\u00e9riment\u00e9s. Il n'y aura pas de d\u00e9tails techniques complexes, juste les fondamentaux.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu&#039;est-ce que Docker : aper\u00e7u de l&#039;histoire et des principales abstractions\" src=\"\/wp-content\/uploads\/2020\/08\/f01af417f24c838577b09bdf90f02fb9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"chto-takoe-docker\">Qu'est-ce que Docker<\/h2>\n<p><\/p>\n<p>Voyons la d\u00e9finition de Docker sur Wikip\u00e9dia.<\/p>\n<p><\/p>\n<blockquote><p>Docker est un logiciel permettant d'automatiser le d\u00e9ploiement et la gestion des applications dans des environnements prenant en charge la containerisation.<\/p><\/blockquote>\n<p>Cette d\u00e9finition peut sembler floue. En particulier, il n'est pas clair ce que signifie \u00ab dans des environnements prenant en charge la containerisation \u00bb. Pour mieux comprendre, revenons en arri\u00e8re. Commen\u00e7ons par une \u00e9poque que j'appelle 'l'\u00e8re monolithique'.<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">L'\u00e8re monolithique<\/h2>\n<p><\/p>\n<p>L'\u00e8re monolithique correspond au d\u00e9but des ann\u00e9es 2000, lorsque toutes les applications \u00e9taient monolithiques et comportaient de nombreuses d\u00e9pendances. Le d\u00e9veloppement \u00e9tait long. Par ailleurs, nous avions peu de serveurs, et nous les connaissions tous par leur nom et les surveillons. Il existe une comparaison amusante :<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"Od7e6hqis7A\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Od7e6hqis7A\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Les animaux de compagnie \u2014 c'est comment nous d\u00e9crivons nos serveurs. \u00c0 l'\u00e8re monolithique, nous les traitions comme des animaux de compagnie, en prenant soin d'eux et en les chouchoutant. Pour mieux g\u00e9rer les ressources, nous utilisions la virtualisation : nous prenions un serveur et le portions en plusieurs machines virtuelles, assurant ainsi l'isolation de l'environnement.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">Syst\u00e8mes de virtualisation bas\u00e9s sur un hyperviseur<\/h2>\n<p><\/p>\n<p>Tout le monde a probablement entendu parler des syst\u00e8mes de virtualisation : VMware, VirtualBox, Hyper-V, Qemu KVM, etc. Ils assurent l'isolation des applications et la gestion des ressources, mais pr\u00e9sentent \u00e9galement des inconv\u00e9nients. Pour mettre en place la virtualisation, un hyperviseur est n\u00e9cessaire. Et l'hyperviseur entra\u00eene une surcharge de ressources. De plus, la machine virtuelle est souvent tr\u00e8s lourde : elle comprend un syst\u00e8me d'exploitation, Nginx, Apache, et peut-\u00eatre MySQL. L'image est volumineuse, et il est compliqu\u00e9 de travailler avec une machine virtuelle. Par cons\u00e9quent, le travail avec des machines virtuelles peut \u00eatre lent. Pour r\u00e9soudre ce probl\u00e8me, des syst\u00e8mes de virtualisation au niveau du noyau ont \u00e9t\u00e9 cr\u00e9\u00e9s.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Syst\u00e8mes de virtualisation au niveau du noyau<\/h2>\n<p><\/p>\n<p>La virtualisation au niveau du noyau est prise en charge par des syst\u00e8mes comme OpenVZ, Systemd-nspawn, LXC. Un exemple frappant de ce type de virtualisation est LXC (Linux Containers). <\/p>\n<p><\/p>\n<p>LXC \u2014 un syst\u00e8me de virtualisation au niveau du syst\u00e8me d'exploitation permettant de lancer plusieurs instances isol\u00e9es du syst\u00e8me d'exploitation Linux sur un m\u00eame n\u0153ud. LXC ne utilise pas de machines virtuelles, mais cr\u00e9e un environnement virtuel avec son propre espace de processus et sa pile r\u00e9seau.<\/p>\n<p><\/p>\n<p>En essence, LXC cr\u00e9e des conteneurs. Quelle est la diff\u00e9rence entre les machines virtuelles et les conteneurs ?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu&#039;est-ce que Docker : aper\u00e7u de l&#039;histoire et des principales abstractions\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le conteneur n'est pas adapt\u00e9 \u00e0 l'isolation des processus : dans les syst\u00e8mes de virtualisation au niveau du noyau, on trouve des vuln\u00e9rabilit\u00e9s qui permettent de sortir du conteneur vers l'h\u00f4te. Donc, si vous devez isoler quelque chose, il est pr\u00e9f\u00e9rable d'utiliser une machine virtuelle.<\/p>\n<p><\/p>\n<p>Les diff\u00e9rences entre la virtualisation et la conteneurisation peuvent \u00eatre visualis\u00e9es sur un sch\u00e9ma.<br \/>\nIl existe des hyperviseurs mat\u00e9riels, des hyperviseurs bas\u00e9s sur l'OS et des conteneurs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu&#039;est-ce que Docker : aper\u00e7u de l&#039;histoire et des principales abstractions\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Les hyperviseurs \u00ab mat\u00e9riels \u00bb sont une chose formidable si vous souhaitez r\u00e9ellement isoler quelque chose. Parce qu'ils permettent l'isolation au niveau des pages m\u00e9moire et des processeurs.<\/p>\n<p><\/p>\n<p>Il existe des hyperviseurs sous forme de programmes et des conteneurs, c'est de ces derniers que nous parlerons ensuite. Dans les syst\u00e8mes de conteneurisation, il n'y a pas d'hyperviseur, mais il y a un moteur de conteneur qui cr\u00e9e et g\u00e8re les conteneurs. C'est une solution plus l\u00e9g\u00e8re, donc, gr\u00e2ce \u00e0 son interaction avec le noyau, la surcharge est moindre, voire inexistante.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">Ce qui est utilis\u00e9 pour la conteneurisation au niveau du noyau<\/h2>\n<p>Les principales technologies permettant de cr\u00e9er un conteneur isol\u00e9 des autres processus sont les Namespaces et les Control Groups.<\/p>\n<p>Namespaces : PID, R\u00e9seau, Montage et Utilisateur. Il y en a d'autres, mais pour simplifier la compr\u00e9hension, nous allons nous concentrer sur ceux-ci.<\/p>\n<p>Le Namespace PID limite les processus. Lorsque nous cr\u00e9ons par exemple un Namespace PID, y pla\u00e7ons un processus, il devient avec PID 1. En g\u00e9n\u00e9ral, dans les syst\u00e8mes, le PID 1 est systemd ou init. Ainsi, lorsque nous pla\u00e7ons un processus dans un nouveau namespace, il re\u00e7oit \u00e9galement PID 1.<\/p>\n<p>Le Namespace R\u00e9seau permet de limiter\/isolier le r\u00e9seau et d'y placer ses propres interfaces. Le Montage est une restriction au niveau du syst\u00e8me de fichiers. Utilisateur \u2014 restriction au niveau des utilisateurs.<\/p>\n<p>Control Groups : M\u00e9moire, CPU, IOPS, R\u00e9seau \u2014 environ 12 param\u00e8tres au total. On les appelle aussi Cgroups (\u00ab groupes C \u00bb).<\/p>\n<p>Les Control Groups g\u00e8rent les ressources pour le conteneur. Gr\u00e2ce aux Control Groups, nous pouvons sp\u00e9cifier qu'un conteneur ne doit pas consommer plus d'une certaine quantit\u00e9 de ressources.<\/p>\n<p>Pour que la conteneurisation fonctionne pleinement, des technologies suppl\u00e9mentaires sont utilis\u00e9es : Capabilities, Copy-on-write et d'autres.<\/p>\n<p>Les Capabilities d\u00e9signent ce que nous disons \u00e0 un processus qu'il peut ou ne peut pas faire. Au niveau du noyau, ce ne sont que des cartes de bits avec de nombreux param\u00e8tres. Par exemple, l'utilisateur root a tous les privil\u00e8ges et peut tout faire. Un serveur de temps peut modifier le temps syst\u00e8me : il poss\u00e8de des capacit\u00e9s sur Time Capsule, c'est tout. Gr\u00e2ce aux privil\u00e8ges, il est possible de configurer de mani\u00e8re flexible les restrictions pour les processus, assurant ainsi notre s\u00e9curit\u00e9.<\/p>\n<p>Le syst\u00e8me Copy-on-write nous permet de travailler avec des images Docker, les utilisant de mani\u00e8re plus efficace.<\/p>\n<p><em>\u00c0 ce jour, Docker a des probl\u00e8mes de compatibilit\u00e9 avec Cgroups v2, c'est pourquoi cet article aborde sp\u00e9cifiquement Cgroups v1.<\/em><\/p><\/blockquote>\n<p>Mais revenons \u00e0 l'histoire. <\/p>\n<p><\/p>\n<p>Lorsque les syst\u00e8mes de virtualisation au niveau du noyau sont apparus, ils ont \u00e9t\u00e9 rapidement adopt\u00e9s. La surcharge du hyperviseur a disparu, mais certains probl\u00e8mes persistent :<\/p>\n<p><\/p>\n<ul>\n<li>de grandes images : dans OpenVZ, on pousse le syst\u00e8me d'exploitation, des biblioth\u00e8ques, plein de logiciels, et au final, l'image reste cons\u00e9quente ;<\/li>\n<li>il n'existe pas de v\u00e9ritable standard pour l'emballage et la livraison, d'o\u00f9 la probl\u00e9matique des d\u00e9pendances. Il arrive que deux morceaux de code utilisent une m\u00eame biblioth\u00e8que, mais avec des versions diff\u00e9rentes. Cela peut entra\u00eener des conflits.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pour r\u00e9soudre tous ces probl\u00e8mes, la prochaine \u00e8re est arriv\u00e9e.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">L'\u00e8re des conteneurs<\/h2>\n<p><\/p>\n<p>Lorsque l'\u00e8re des conteneurs est arriv\u00e9e, la philosophie de travail avec eux a chang\u00e9 :<\/p>\n<p><\/p>\n<ul>\n<li>Un processus \u2014 un conteneur.<\/li>\n<li>Toutes les d\u00e9pendances n\u00e9cessaires pour le processus sont livr\u00e9es dans son conteneur. Cela n\u00e9cessite de d\u00e9couper les monolithes en microservices.<\/li>\n<li>Plus l'image est petite, mieux c'est \u2014 moins de vuln\u00e9rabilit\u00e9s potentielles, un d\u00e9ploiement plus rapide, etc.<\/li>\n<li>Les instances deviennent \u00e9ph\u00e9m\u00e8res. <\/li>\n<\/ul>\n<p><\/p>\n<p>Rappelez-vous, je parlais des animaux de compagnie contre le b\u00e9tail ? Autrefois, les instances \u00e9taient comparables \u00e0 des animaux de compagnie, maintenant elles ressemblent \u00e0 du b\u00e9tail. Auparavant, il y avait un monolithe \u2014 une application. Maintenant, il y a 100 microservices, 100 conteneurs. Certains conteneurs peuvent avoir 2 \u00e0 3 r\u00e9pliques. Nous ne tenons plus \u00e0 contr\u00f4ler chaque conteneur. Ce qui est essentiel pour nous, c'est la disponibilit\u00e9 du service lui-m\u00eame : ce que fait cet ensemble de conteneurs. Cela modifie les approches en mati\u00e8re de surveillance.<\/p>\n<p><\/p>\n<p>Entre 2014 et 2015, Docker a connu un essor \u2014 cette technologie dont nous allons maintenant parler.<\/p>\n<p><\/p>\n<p>Docker a transform\u00e9 la philosophie et standardis\u00e9 l\u2019emballage des applications. Avec Docker, nous pouvons emballer une application, l\u2019envoyer dans un d\u00e9p\u00f4t, puis la t\u00e9l\u00e9charger et la d\u00e9ployer. <\/p>\n<p><\/p>\n<p>Dans un conteneur Docker, nous int\u00e9grons tout ce qui est n\u00e9cessaire, ce qui r\u00e9sout le probl\u00e8me des d\u00e9pendances. Docker garantit la reproductibilit\u00e9. Je pense que beaucoup ont rencontr\u00e9 des probl\u00e8mes de reproductibilit\u00e9 : tout fonctionne pour vous, puis vous le poussez en production et cela cesse de fonctionner. Avec Docker, ce probl\u00e8me dispara\u00eet. Si votre conteneur Docker se lance et effectue les t\u00e2ches requises, il y a de fortes chances qu'il fonctionne en production et y fasse la m\u00eame chose.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">Une digression sur l\u2019overhead<\/h2>\n<p>Concernant l\u2019overhead, il y a des d\u00e9bats constants. Certains estiment que Docker ne g\u00e9n\u00e8re pas de charge suppl\u00e9mentaire, car il utilise le noyau Linux et tous ses processus n\u00e9cessaires \u00e0 la containerisation. En d\u2019autres termes, \u00ab si vous dites que Docker est un overhead, alors le noyau Linux en est un aussi \u00bb.<\/p>\n<p>D'autre part, si l'on approfondit, il y a effectivement quelques aspects dans Docker qui peuvent \u00eatre qualifi\u00e9s d\u2019overhead avec un peu de rigueur.<\/p>\n<p>Le premier est l\u2019espace de noms PID. Lorsque nous pla\u00e7ons un processus dans un espace de noms, il re\u00e7oit le PID 1. En m\u00eame temps, ce processus a un autre PID, qui se trouve dans l\u2019espace de noms de l\u2019h\u00f4te, en dehors du conteneur. Par exemple, nous avons lanc\u00e9 Nginx dans un conteneur, il est devenu le PID 1 (processus ma\u00eetre). Et sur l\u2019h\u00f4te, il a le PID 12623. Il est donc difficile de d\u00e9terminer dans quelle mesure cela constitue un overhead.<\/p>\n<p>Le second aspect concerne les Cgroups. Prenons les Cgroups pour la m\u00e9moire, c'est-\u00e0-dire la possibilit\u00e9 de limiter la m\u00e9moire d\u2019un conteneur. Lorsque cette option est activ\u00e9e, des compteurs se mettent en route, la comptabilit\u00e9 m\u00e9moire : le noyau doit comprendre combien de pages sont allou\u00e9es et combien sont encore libres pour ce conteneur. Cela peut \u00eatre un overhead, mais je n'ai pas trouv\u00e9 d'\u00e9tudes pr\u00e9cises sur son impact sur les performances, et je n'ai pas remarqu\u00e9 que l'application ex\u00e9cut\u00e9e dans Docker perdait soudainement des performances. <\/p>\n<p>Et encore une remarque sur les performances. Certains param\u00e8tres du noyau sont transf\u00e9r\u00e9s de l\u2019h\u00f4te au conteneur. En particulier, certains param\u00e8tres r\u00e9seau. Donc, si vous souhaitez ex\u00e9cuter quelque chose de haute performance dans Docker, par exemple quelque chose qui va utiliser activement le r\u00e9seau, vous devez au minimum ajuster ces param\u00e8tres. Par exemple, un param\u00e8tre comme nf_conntrack. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">Sur le concept de Docker<\/h2>\n<p><\/p>\n<p>Docker se compose de plusieurs composants : <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2014 c'est le moteur de conteneurs qui ex\u00e9cute les conteneurs. <\/li>\n<li>Docker CII \u2014 outil de gestion de Docker.<\/li>\n<li>Dockerfile \u2014 instruction sur la mani\u00e8re de construire une image.<\/li>\n<li>Image \u2014 image \u00e0 partir de laquelle le conteneur est d\u00e9ploy\u00e9.<\/li>\n<li>Conteneur.<\/li>\n<li>Docker registry \u2014 d\u00e9p\u00f4t d'images.<\/li>\n<\/ol>\n<p><\/p>\n<p>Sch\u00e9matiquement, cela ressemble \u00e0 peu pr\u00e8s \u00e0 ceci :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu&#039;est-ce que Docker : aper\u00e7u de l&#039;histoire et des principales abstractions\" src=\"\/wp-content\/uploads\/2020\/08\/73ccc02c14485f72cfd7c64e3074f3b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sur Docker_host fonctionne le d\u00e9mon Docker, qui lance les conteneurs. Il y a un client qui envoie des commandes : construire une image, t\u00e9l\u00e9charger une image, ex\u00e9cuter un conteneur. Le d\u00e9mon Docker interroge le registre et ex\u00e9cute les commandes. Le client Docker peut communiquer \u00e9galement localement (avec un socket Unix) ou via TCP \u00e0 partir d'un h\u00f4te distant.<\/p>\n<p><\/p>\n<p>Passons en revue chaque composant.<\/p>\n<p><\/p>\n<p><u>Docker daemon (d\u00e9mon)<\/u> \u2014 c'est la partie serveur, elle fonctionne sur la machine h\u00f4te : elle t\u00e9l\u00e9charge des images et lance des conteneurs \u00e0 partir de celles-ci, cr\u00e9e un r\u00e9seau entre les conteneurs, collecte les journaux. Lorsque nous disons \u00ab cr\u00e9e une image \u00bb, c'est \u00e9galement le travail du d\u00e9mon.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2014 la partie client de Docker, un utilitaire en console pour interagir avec le d\u00e9mon. Je le r\u00e9p\u00e8te, il peut fonctionner non seulement localement, mais aussi sur le r\u00e9seau. <\/p>\n<p><\/p>\n<p><strong>Commandes de base :<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2014 afficher les conteneurs actuellement en cours d'ex\u00e9cution sur le Docker-h\u00f4te.<br \/>\ndocker images \u2014 afficher les images t\u00e9l\u00e9charg\u00e9es localement.<br \/>\ndocker search  \u2014 rechercher une image dans le registre.<br \/>\ndocker pull  \u2014 t\u00e9l\u00e9charger une image depuis le registre sur la machine.<br \/>\ndocker build &lt;&gt; \u2014 construire une image.<br \/>\ndocker run  \u2014 lancer un conteneur.<br \/>\ndocker rm  \u2014 supprimer un conteneur.<br \/>\ndocker logs  \u2014 journaux du conteneur.<br \/>\ndocker start\/stop\/restart  \u2014 gestion du conteneur.\n<\/p>\n<p>Si vous ma\u00eetrisez ces commandes et que vous les utilisez avec assurance, consid\u00e9rez que vous avez ma\u00eetris\u00e9 Docker \u00e0 70 % au niveau utilisateur.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2014 instruction pour cr\u00e9er une image. Presque chaque commande dans l'instruction cr\u00e9e une nouvelle couche. Regardons avec un exemple.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Qu&#039;est-ce que Docker : aper\u00e7u de l&#039;histoire et des principales abstractions\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un Dockerfile ressemble \u00e0 cela : \u00e0 gauche les commandes, \u00e0 droite \u2014 les arguments. Chaque commande pr\u00e9sente ici (et g\u00e9n\u00e9ralement celle \u00e9crite dans le Dockerfile) cr\u00e9e une nouvelle couche dans l'image. <\/p>\n<p><\/p>\n<p>M\u00eame en regardant la partie gauche, on peut comprendre ce qui se passe. Nous disons : \u00ab cr\u00e9e un dossier pour nous \u00bb \u2014 c'est une couche. \u00ab Rends le dossier actif \u00bb \u2014 c'est une autre couche, et ainsi de suite. Le g\u00e2teau en couches simplifie la vie. Si je cr\u00e9e un autre Dockerfile et que je change quelque chose \u00e0 la derni\u00e8re ligne \u2014 je ne lancerai pas \"python\" \"main.py\", mais autre chose, ou j'installerai des d\u00e9pendances \u00e0 partir d'un autre fichier \u2014 les couches pr\u00e9c\u00e9dentes seront r\u00e9utilis\u00e9es comme cache.<\/p>\n<p><\/p>\n<p><u>Image<\/u> \u2014 c'est un conteneur d'image \u00e0 partir duquel des conteneurs sont lanc\u00e9s. Si l'on consid\u00e8re Docker comme un gestionnaire de paquets (comme si nous travaillions avec des paquets deb ou rpm), alors l'image est essentiellement un paquet rpm. Avec yum install, nous pouvons installer une application, la supprimer, la rechercher dans le d\u00e9p\u00f4t, la t\u00e9l\u00e9charger. Ici, c'est \u00e0 peu pr\u00e8s la m\u00eame chose : des conteneurs sont lanc\u00e9s \u00e0 partir de l'image, ils sont stock\u00e9s dans le Docker registry (par analogie avec yum, dans le d\u00e9p\u00f4t), et chaque image a un hachage SHA-256, un nom et une balise.<\/p>\n<p><\/p>\n<p>L'image est construite selon les instructions du Dockerfile. Chaque instruction du Dockerfile cr\u00e9e une nouvelle couche. Les couches peuvent \u00eatre r\u00e9utilis\u00e9es.<\/p>\n<p><\/p>\n<p><u>Docker registry<\/u> \u2014 c'est un d\u00e9p\u00f4t d'images Docker. \u00c0 l'instar des syst\u00e8mes d'exploitation, Docker a un registre standard public \u2014 dockerhub. Mais il est possible de cr\u00e9er son propre d\u00e9p\u00f4t, son propre Docker registry. <\/p>\n<p><\/p>\n<p><u>Conteneur<\/u> \u2014 c'est ce qui est lanc\u00e9 \u00e0 partir de l'image. Nous avons construit l'image selon les instructions du Dockerfile, puis nous la lan\u00e7ons \u00e0 partir de cette image. Ce conteneur est isol\u00e9 des autres conteneurs, il doit contenir tout ce qui est n\u00e9cessaire au fonctionnement de l'application. De plus, un conteneur correspond \u00e0 un processus. Il arrive qu'il faille cr\u00e9er deux processus, mais cela va \u00e0 l'encontre de l'id\u00e9ologie de Docker.<\/p>\n<p><\/p>\n<p>L'exigence \u00ab un conteneur \u2014 un processus \u00bb est li\u00e9e au PID Namespace. Lorsqu'un processus avec PID 1 est lanc\u00e9 dans le Namespace, s'il meurt, tout le conteneur meurt aussi. Si deux processus sont lanc\u00e9s : l'un vit, l'autre meurt, le conteneur survivra quand m\u00eame. Mais cela concerne les meilleures pratiques, dont nous parlerons dans d'autres documents.<\/p>\n<p><\/p>\n<p>Pour explorer plus en d\u00e9tail les caract\u00e9ristiques et le programme complet du cours, vous pouvez suivre ce lien : \u00ab<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Cours vid\u00e9o sur Docker<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>Auteur : Marsel Ibraev, administrateur Kubernetes certifi\u00e9, ing\u00e9nieur praticien chez Southbridge, conf\u00e9rencier et d\u00e9veloppeur de cours chez Slurm.<\/em><\/p>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/515508\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f Docker \u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u0445: Image, Cli, Dockerfile. \u041b\u0435\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u043e\u0432\u0438, \u0430\u043f\u043f\u0435\u043d\u0434\u0438\u043a\u0441\u0430 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91906,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Qu'est-ce que Docker : un aper\u00e7u de l'histoire et des principales abstractions | ProHoster","description":"Le 10 ao\u00fbt, Slurm a lanc\u00e9 un cours vid\u00e9o sur Docker, dans lequel nous le traitons en profondeur \u2014 des abstractions de base aux param\u00e8tres r\u00e9seau.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster","og:description":"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-20T05:42:23+00:00","article:modified_time":"2020-08-20T05:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91905","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:18:28","updated":"2022-10-01 05:09:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/91905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}