{"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\/it\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Che cos'\u00e8 Docker: una breve storia e le principali astrazioni","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Il 10 agosto \u00e8 iniziato su Sljorm <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">un videocorso su Docker<\/a><\/noindex>, in cui lo esploriamo completamente: dalle astrazioni di base alle configurazioni di rete. <\/p>\n<p><\/p>\n<p>In questo articolo parleremo della storia di Docker e delle sue principali astrazioni: Image, Cli, Dockerfile. La lezione \u00e8 rivolta ai principianti, quindi difficilmente sar\u00e0 interessante per gli utenti esperti. Qui non ci saranno elementi scioccanti, appendici o immersioni profonde. Solo le basi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Che cos&#039;\u00e8 Docker: una breve storia e le principali astrazioni\" 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\">Che cos'\u00e8 Docker<\/h2>\n<p><\/p>\n<p>Diamo un'occhiata alla definizione di Docker da Wikipedia.<\/p>\n<p><\/p>\n<blockquote><p>Docker \u00e8 un software per automatizzare la distribuzione e la gestione delle applicazioni in ambienti che supportano la containerizzazione.<\/p><\/blockquote>\n<p>Da questa definizione non si capisce molto. In particolare, non \u00e8 chiaro cosa significhi 'in ambienti che supportano la containerizzazione'. Per comprenderlo, torniamo indietro nel tempo. Iniziamo dall'epoca che chiamerei 'Era Monolitica'.<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">Era Monolitica<\/h2>\n<p><\/p>\n<p>L'era monolitica \u00e8 l'inizio degli anni 2000, quando tutte le applicazioni erano monolitiche, con molte dipendenze. Lo sviluppo richiedeva molto tempo. All'epoca, i server non erano cos\u00ec tanti, li conoscevamo tutti per nome e li monitoravamo. C'\u00e8 un divertente confronto:<\/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=\"Riproduci video\" 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>I pets \u2014 sono animali domestici. Nell'era monolitica, trattavamo i nostri server come animali domestici, coccolandoli e curandoli, spolverando via la polvere. Per una migliore gestione delle risorse, utilizzavamo la virtualizzazione: prendevamo un server e lo suddividevamo in pi\u00f9 macchine virtuali, garantendo cos\u00ec l'isolamento dell'ambiente.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">Sistemi di virtualizzazione basati su hypervisor<\/h2>\n<p><\/p>\n<p>Di sicuro tutti hanno sentito parlare dei sistemi di virtualizzazione: VMware, VirtualBox, Hyper-V, Qemu KVM e cos\u00ec via. Essi garantiscono isolamento delle applicazioni e gestione delle risorse, ma presentano anche degli svantaggi. Per implementare la virtualizzazione, \u00e8 necessario un hypervisor. E l'hypervisor comporta un overhead di risorse. Inoltre, la macchina virtuale stessa \u00e8 generalmente un processo complesso: un'immagine pesante, su cui \u00e8 installato un sistema operativo, Nginx, Apache e forse anche MySQL. L'immagine \u00e8 grande e operare con una macchina virtuale pu\u00f2 risultare scomodo. Di conseguenza, lavorare con le virtual machine pu\u00f2 essere lento. Per risolvere questo problema, sono stati creati sistemi di virtualizzazione a livello di kernel.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Sistemi di virtualizzazione a livello di kernel<\/h2>\n<p><\/p>\n<p>La virtualizzazione a livello di kernel \u00e8 supportata da sistemi come OpenVZ, Systemd-nspawn, LXC. Un esempio lampante di questa virtualizzazione \u00e8 LXC (Linux Containers). <\/p>\n<p><\/p>\n<p>LXC \u2014 un sistema di virtualizzazione a livello di sistema operativo per eseguire pi\u00f9 istanze isolate del sistema operativo Linux su un singolo nodo. LXC non utilizza macchine virtuali, ma crea un ambiente virtuale con il proprio spazio di processo e stack di rete.<\/p>\n<p><\/p>\n<p>In sostanza, LXC crea contenitori. Qual \u00e8 la differenza tra macchine virtuali e contenitori?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Che cos&#039;\u00e8 Docker: una breve storia e le principali astrazioni\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il contenitore non \u00e8 adatto per isolare i processi: nei sistemi di virtualizzazione a livello di kernel si trovano vulnerabilit\u00e0 che consentono di uscire dal contenitore verso l'host. Pertanto, se hai bisogno di isolare qualcosa, \u00e8 meglio utilizzare una macchina virtuale.<\/p>\n<p><\/p>\n<p>Le differenze tra virtualizzazione e containerizzazione possono essere viste nello schema.<br \/>\nCi sono hypervisor hardware, hypervisor sopra il sistema operativo e contenitori. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Che cos&#039;\u00e8 Docker: una breve storia e le principali astrazioni\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gli hypervisor 'bare-metal' sono una grande cosa se desideri davvero isolare qualcosa. Perch\u00e9 l\u00ec hai la possibilit\u00e0 di isolare a livello di pagine di memoria e processori.<\/p>\n<p><\/p>\n<p>Esistono hypervisor sia come programma, sia come contenitori; di quest'ultimi parleremo in seguito. Nei sistemi di containerizzazione non ci sono hypervisor, ma esiste un Container Engine che crea e gestisce i contenitori. Questa soluzione \u00e8 pi\u00f9 leggera, quindi, grazie al lavoro con il kernel, l'overhead \u00e8 minore o addirittura assente.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">Cosa viene utilizzato per la containerizzazione a livello di kernel<\/h2>\n<p>Le principali tecnologie che consentono di creare un contenitore isolato dagli altri processi sono Namespaces e Control Groups.<\/p>\n<p>Namespaces: PID, Networking, Mount e User. Ce ne sono altri, ma per semplificare il discorso ci concentreremo su questi.<\/p>\n<p>Il PID Namespace limita i processi. Quando, ad esempio, creiamo un PID Namespace e ci inseriamo un processo, questo riceve PID 1. Di solito nei sistemi, PID 1 \u00e8 systemd o init. Pertanto, quando inseriamo un processo in un nuovo namespace, anche questo riceve PID 1.<\/p>\n<p>Il Networking Namespace consente di limitare\/isolare la rete e gi\u00e0 al suo interno di collocare le proprie interfacce. Mount \u00e8 una restrizione a livello di filesystem. User \u00e8 una limitazione sugli utenti.<\/p>\n<p>Control Groups: Memoria, CPU, IOPS, Rete \u2014 circa 12 impostazioni in totale. Altrimenti sono chiamati Cgroups (\"C gruppi\").<\/p>\n<p>I gruppi di controllo gestiscono le risorse per il container. Attraverso i gruppi di controllo possiamo specificare che il container non deve consumare pi\u00f9 di una certa quantit\u00e0 di risorse.<\/p>\n<p>Per una corretta funzionamento della containerizzazione, vengono utilizzate tecnologie aggiuntive: Capabilities, Copy-on-write e altre.<\/p>\n<p>Le Capabilities definiscono ci\u00f2 che un processo pu\u00f2 e non pu\u00f2 fare. A livello del kernel, si tratta di semplici bitmap con molti parametri. Ad esempio, l'utente root ha privilegi completi e pu\u00f2 fare qualsiasi cosa. Un server del tempo pu\u00f2 modificare l'ora di sistema: ha capabilities su Time Capsule, e cos\u00ec via. Grazie ai privilegi, \u00e8 possibile impostare flessibilmente le limitazioni per i processi, aumentando la sicurezza.<\/p>\n<p>Il sistema Copy-on-write ci permette di lavorare con le immagini Docker in modo pi\u00f9 efficiente.<\/p>\n<p><em>Attualmente, Docker ha problemi di compatibilit\u00e0 con Cgroups v2, quindi in questo articolo si discutono specificamente i Cgroups v1.<\/em><\/p><\/blockquote>\n<p>Ma torniamo alla storia. <\/p>\n<p><\/p>\n<p>Quando sono emersi i sistemi di virtualizzazione a livello di kernel, sono stati adottati attivamente. Il sovraccarico sull'hypervisor \u00e8 scomparso, ma alcuni problemi sono rimasti:<\/p>\n<p><\/p>\n<ul>\n<li>immagini grandi: nello stesso OpenVZ si trasferiscono il sistema operativo, le librerie, una miriade di software, e alla fine l'immagine risulta comunque piuttosto grande;<\/li>\n<li>non esiste uno standard adeguato per l'imballaggio e la consegna, quindi persiste il problema delle dipendenze. Ci sono situazioni in cui due pezzi di codice utilizzano la stessa libreria, ma con versioni diverse. Tra di loro pu\u00f2 verificarsi un conflitto.<\/li>\n<\/ul>\n<p><\/p>\n<p>Per risolvere tutti questi problemi, \u00e8 iniziata una nuova era.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">L'era dei container<\/h2>\n<p><\/p>\n<p>Con l'arrivo dell'era dei container, \u00e8 cambiata la filosofia di lavoro con essi:<\/p>\n<p><\/p>\n<ul>\n<li>Un processo \u2014 un container.<\/li>\n<li>Tutte le dipendenze necessarie per il processo vengono fornite nel suo container. Questo richiede di suddividere i monoliti in microservizi.<\/li>\n<li>Pi\u00f9 piccolo \u00e8 l'immagine, meglio \u00e8 \u2014 meno vulnerabilit\u00e0 potenziali, si distribuisce pi\u00f9 rapidamente e cos\u00ec via.<\/li>\n<li>Gli istanze diventano effimere. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ricordi quando parlavo di pets vs cattle? Prima gli istanze erano simili a animali domestici, ora sono diventati come il bestiame. Prima c'era un monolite - un'unica applicazione. Ora ci sono 100 microservizi, 100 container. Alcuni di questi container possono avere 2-3 repliche. Non \u00e8 pi\u00f9 cos\u00ec importante controllare ogni container. \u00c8 pi\u00f9 importante garantire la disponibilit\u00e0 del servizio stesso: ci\u00f2 che fa questo insieme di container. Questo cambia gli approcci nel monitoraggio.<\/p>\n<p><\/p>\n<p>Nel 2014-2015 c'\u00e8 stata l'ascesa di Docker - quella tecnologia di cui parleremo ora.<\/p>\n<p><\/p>\n<p>Docker ha cambiato la filosofia e standardizzato il packaging delle applicazioni. Con Docker possiamo imballare un'applicazione, inviarla a un repository, scaricarla da l\u00ec e distribuirla. <\/p>\n<p><\/p>\n<p>Nel container Docker includiamo tutto il necessario, quindi si risolve il problema delle dipendenze. Docker garantisce la riproducibilit\u00e0. Penso che molti abbiano affrontato problemi di riproducibilit\u00e0: tutto funziona, lo si pubblica in produzione e l\u00ec smette di funzionare. Con Docker questo problema scompare. Se il tuo container Docker si avvia e fa quello che deve fare, \u00e8 molto probabile che si avvii anche in produzione e faccia la stessa cosa.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">Riflessione sull'overhead<\/h2>\n<p>Ci sono costanti dibattiti sull'overhead. Alcuni sostengono che Docker non comporti un carico aggiuntivo, poich\u00e9 utilizza il kernel Linux e tutti i suoi processi necessari per la containerizzazione. Si potrebbe dire: \"se affermate che Docker \u00e8 un overhead, allora anche il kernel Linux \u00e8 un overhead\".<\/p>\n<p>D'altra parte, se si approfondisce, ci sono effettivamente alcune cose in Docker che si possono giustificare come overhead, anche se con un certo sforzo.<\/p>\n<p>La prima \u00e8 il namespace PID. Quando poniamo un processo all'interno del namespace, gli viene assegnato il PID 1. Allo stesso tempo, questo processo ha un altro PID che si trova nel namespace host, al di fuori del contenitore. Ad esempio, abbiamo avviato Nginx nel contenitore, che \u00e8 diventato PID 1 (processo master). Ma sul host ha il PID 12623. E non \u00e8 facile dire quanto questo rappresenti un overhead.<\/p>\n<p>La seconda cosa sono i Cgroups. Prendiamo i Cgroups per la memoria, ovvero la possibilit\u00e0 di limitare la memoria a un contenitore. Quando \u00e8 attivata, si attivano i contatori, il memory accounting: il kernel deve capire quante pagine sono state allocate e quante ne rimangono disponibili per quel contenitore. Questo pu\u00f2 comportare un overhead, ma non ho trovato studi precisi su come influisca sulle prestazioni, e non ho notato che un'applicazione avviata in Docker improvvisamente perdesse drasticamente prestazioni. <\/p>\n<p>E un'ulteriore nota sulle prestazioni. Alcuni parametri del kernel vengono passati dall'host al container. In particolare, alcuni parametri di rete. Quindi, se desideri eseguire qualcosa di ad alte prestazioni in Docker, ad esempio qualcosa che utilizza intensamente la rete, dovrai almeno modificare questi parametri. Qualcosa come nf_conntrack, per esempio. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">Sull'idea di Docker<\/h2>\n<p><\/p>\n<p>Docker \u00e8 composto da diversi componenti: <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2014 il motore dei container; avvia i container. <\/li>\n<li>Docker CLI \u2014 l'utility per gestire Docker.<\/li>\n<li>Dockerfile \u2014 le istruzioni su come creare un'immagine.<\/li>\n<li>Image \u2014 l'immagine da cui viene creato il container.<\/li>\n<li>Container.<\/li>\n<li>Docker registry \u2014 il repository delle immagini.<\/li>\n<\/ol>\n<p><\/p>\n<p>In modo schematico, appare pi\u00f9 o meno cos\u00ec:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Che cos&#039;\u00e8 Docker: una breve storia e le principali astrazioni\" src=\"\/wp-content\/uploads\/2020\/08\/73ccc02c14485f72cfd7c64e3074f3b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Su Docker_host gira il daemon Docker, che avvia i container. C'\u00e8 un Client che invia comandi: crea un'immagine, scarica un'immagine, avvia un container. Il daemon Docker accede al registry e esegue le operazioni. Il client Docker pu\u00f2 interagire sia localmente (con il socket Unix) sia tramite TCP da un host remoto.<\/p>\n<p><\/p>\n<p>Passiamo in rassegna ciascun componente.<\/p>\n<p><\/p>\n<p><u>Docker daemon (daemon)<\/u> \u2014 \u00e8 la parte server, funziona sulla macchina host: scarica le immagini e avvia i container, crea una rete tra i container e raccoglie i log. Quando diciamo \u00abcrea immagine\u00bb, anche questo \u00e8 compito del demone.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2014 \u00e8 la parte client di Docker, un'utilit\u00e0 da console per lavorare con il demone. Ripeto, pu\u00f2 funzionare non solo localmente, ma anche in rete. <\/p>\n<p><\/p>\n<p><strong>Comandi di base:<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2014 mostra i container attualmente in esecuzione sull'host Docker.<br \/>\ndocker images \u2014 mostra le immagini scaricate localmente.<br \/>\ndocker search &lt;&gt; \u2014 ricerca un'immagine nel registry.<br \/>\ndocker pull &lt;&gt; \u2014 scarica un'immagine dal registry sulla macchina.<br \/>\ndocker build &lt;&lt;\/path\/to\/dir&gt;&gt; \u2014 costruisce un'immagine.<br \/>\ndocker run &lt;&gt; \u2014 avvia un container.<br \/>\ndocker rm &lt;&gt; \u2014 elimina un container.<br \/>\ndocker logs &lt;&gt; \u2014 log del container<br \/>\ndocker start\/stop\/restart &lt;&gt; \u2014 gestione del container\n<\/p>\n<p>Se padroneggi questi comandi e li utilizzi con sicurezza, puoi considerarti aver acquisito il 70% delle competenze di Docker a livello utente.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2014 istruzioni per creare un'immagine. Quasi ogni comando dell'istruzione rappresenta un nuovo layer. Guardiamo un esempio.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Che cos&#039;\u00e8 Docker: una breve storia e le principali astrazioni\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ecco come appare un Dockerfile: a sinistra ci sono i comandi, a destra gli argomenti. Ogni comando presente qui (e in generale in un Dockerfile) crea un nuovo strato nell'immagine. <\/p>\n<p><\/p>\n<p>Anche guardando a sinistra, \u00e8 possibile avere un'idea di cosa sta succedendo. Diciamo: \"crea una cartella per noi\" \u2014 questo \u00e8 un livello. \"Rendi la cartella attiva\" \u2014 questo \u00e8 un altro livello, e cos\u00ec via. La combinazione a strati semplifica la vita. Se creo un altro Dockerfile e modifico qualcosa nell'ultima riga \u2014 avvier\u00f2 non \"python\" \"main.py\", ma qualcos'altro, o installer\u00f2 dipendenze da un altro file \u2014 i livelli precedenti verranno riutilizzati come cache.<\/p>\n<p><\/p>\n<p><u>Image<\/u> \u2014 \u00e8 l'imballaggio del contenitore, dai quali vengono avviati i contenitori. Se guardiamo a Docker come a un gestore di pacchetti (come se stessimo lavorando con pacchetti deb o rpm), l'immagine \u00e8 essenzialmente un pacchetto rpm. Tramite yum install possiamo installare un'applicazione, rimuoverla, trovarla nel repository, scaricarla. Qui \u00e8 pi\u00f9 o meno la stessa cosa: dai l'immagine vengono avviati i contenitori, che sono conservati nel Docker registry (analogamente a yum, in un repository), e ogni immagine ha un hash SHA-256, un nome e un tag.<\/p>\n<p><\/p>\n<p>L'immagine viene creata secondo le istruzioni nel Dockerfile. Ogni istruzione del Dockerfile genera un nuovo strato. Gli strati possono essere riutilizzati.<\/p>\n<p><\/p>\n<p><u>Docker registry<\/u> \u00e8 un repository di immagini Docker. Analogamente ai sistemi operativi, Docker ha un registro pubblico standard \u2014 dockerhub. Tuttavia, \u00e8 possibile creare il proprio repository, il proprio Docker registry. <\/p>\n<p><\/p>\n<p><u>Contenitore<\/u> \u00e8 ci\u00f2 che viene eseguito dall'immagine. Secondo le istruzioni del Dockerfile, abbiamo costruito un'immagine, quindi la eseguiamo da quest'immagine. Questo contenitore \u00e8 isolato dagli altri contenitori e deve contenere tutto il necessario per il funzionamento dell'applicazione. In un contenitore c'\u00e8 un solo processo. A volte \u00e8 necessario avere due processi, ma questo \u00e8 un po' in contraddizione con la filosofia di Docker.<\/p>\n<p><\/p>\n<p>Il requisito \"un contenitore \u2014 un processo\" \u00e8 legato al PID Namespace. Quando un processo con PID 1 viene avviato nel Namespace, se per caso muore, anche il contenitore termina. Se invece ci sono due processi attivi: uno vive e l'altro muore, il contenitore continuer\u00e0 a vivere. Ma questo riguarda le Best Practices, di cui parleremo in altri materiali.<\/p>\n<p><\/p>\n<p>Per approfondire le caratteristiche e il programma completo del corso, puoi seguire il link: \u00ab<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Corso video su Docker<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>Autore: Marcel Ibraev, amministratore Kubernetes certificato, ingegnere praticante presso Southbridge, relatore e sviluppatore di corsi su Slurm.<\/em><\/p>\n<p>Fonte: <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.0.1 - 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\/it\/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.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Cos'\u00e8 Docker: un breve excursus nella storia e nelle principali astrazioni | ProHoster","description":"Il 10 agosto a Slurm \u00e8 iniziato un corso video su Docker, in cui esaminiamo tutto \u2014 dalle astratti fondamentali alle impostazioni di rete.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/91905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}