{"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 panoramica sulla storia e le principali astrazioni","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Il 10 agosto \u00e8 iniziato <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">un videocorso su Docker<\/a><\/noindex>, in cui esaminiamo ogni aspetto \u2014 dalle astrazioni di base ai parametri 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 destinata ai principianti, quindi difficilmente sar\u00e0 interessante per gli utenti esperti. Non ci saranno elementi estremi, appendici o immersioni profonde. Solo le basi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Che cos&#039;\u00e8 Docker: una breve panoramica sulla 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\">Cos'\u00e8 Docker<\/h2>\n<p><\/p>\n<p>Diamo un'occhiata alla definizione di Docker tratta da Wikipedia.<\/p>\n<p><\/p>\n<blockquote><p>Docker \u00e8 un software per l'automazione della distribuzione e gestione delle applicazioni in ambienti che supportano la containerizzazione.<\/p><\/blockquote>\n<p>Da questa definizione non si capisce molto. Non \u00e8 chiaro, in particolare, cosa significhi 'in ambienti che supportano la containerizzazione'. Per chiarire, torniamo indietro nel tempo. Iniziamo con l'epoca che definisco '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 era lungo. All'epoca non c'erano molti server, li conoscevamo tutti per nome e li monitoravamo. C'\u00e8 un confronto divertente:<\/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=\"Guarda il 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>Gli animali domestici sono come animali da compagnia. Nell'era monolitica trattavamo i nostri server come animali domestici, li curavamo e li coccolavamo, spolverando ogni particella. 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>Tutti hanno certamente sentito parlare dei sistemi di virtualizzazione: VMware, VirtualBox, Hyper-V, Qemu KVM, ecc. Questi forniscono isolamento delle applicazioni e gestione delle risorse, ma hanno anche degli svantaggi. Per implementare la virtualizzazione \u00e8 necessario un hypervisor. E un hypervisor comporta un overhead delle risorse. Inoltre, la macchina virtuale stessa \u00e8 generalmente piuttosto pesante \u2014 un'immagine grande, con un sistema operativo, Nginx, Apache, e magari anche MySQL. L'immagine \u00e8 grande, e la macchina virtuale \u00e8 scomoda da gestire. 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 chiaro esempio di tale virtualizzazione \u00e8 LXC (Linux Containers). <\/p>\n<p><\/p>\n<p>LXC \u00e8 un sistema di virtualizzazione a livello di sistema operativo per eseguire pi\u00f9 istanze isolate del sistema operativo Linux su un unico nodo. LXC non utilizza macchine virtuali, ma crea un ambiente virtuale con uno spazio di processi e uno stack di rete propri.<\/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 panoramica sulla 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 sono state trovate vulnerabilit\u00e0 che consentono di uscire dal contenitore verso l'host. Pertanto, se hai bisogno di isolare qualcosa, \u00e8 meglio utilizzare una virtual machine.<\/p>\n<p><\/p>\n<p>Le differenze tra virtualizzazione e containerizzazione possono essere viste in uno schema.<br \/>\nCi sono hypervisor hardware, hypervisor sopra i sistemi operativi e contenitori. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Che cos&#039;\u00e8 Docker: una breve panoramica sulla 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 ottimi se desideri davvero isolare qualcosa, perch\u00e9 offrono la possibilit\u00e0 di isolare a livello di pagine di memoria e CPU.<\/p>\n<p><\/p>\n<p>Ci sono hypervisor come programmi e ci sono contenitori, di cui parleremo di seguito. Nei sistemi di containerizzazione non c'\u00e8 hypervisor, ma c'\u00e8 il Container Engine che crea e gestisce i contenitori. Questa \u00e8 una soluzione 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 ci concentreremo su questi.<\/p>\n<p>Il PID Namespace limita i processi. Quando, ad esempio, creiamo un PID Namespace e ci mettiamo un processo, esso ottiene il PID 1. Di solito, nel sistema, il PID 1 \u00e8 systemd o init. Pertanto, quando mettiamo un processo in un nuovo namespace, riceve anch'esso il PID 1.<\/p>\n<p>Il Networking Namespace consente di limitare\/isolare la rete e di gestire le proprie interfacce al suo interno. Mount \u00e8 una limitazione sulla filesystem. User \u00e8 una limitazione sugli utenti.<\/p>\n<p>Control Groups: Memoria, CPU, IOPS, Rete \u2014 ci sono circa 12 impostazioni. Sono anche chiamati Cgroups ('C-gruppi').<\/p>\n<p>I Control Groups gestiscono le risorse per il contenitore. Attraverso i Control Groups possiamo specificare che un contenitore non deve consumare pi\u00f9 di una certa quantit\u00e0 di risorse.<\/p>\n<p>Affinch\u00e9 la containerizzazione funzioni a pieno, vengono utilizzate tecnologie aggiuntive: Capabilities, Copy-on-write e altre.<\/p>\n<p>Capabilities sono quando diciamo a un processo cosa pu\u00f2 fare e cosa non pu\u00f2 fare. A livello di kernel, si tratta semplicemente di bitmap con una grande quantit\u00e0 di parametri. Per esempio, l'utente root ha pieni privilegi, pu\u00f2 fare tutto. Il server del tempo pu\u00f2 modificare l'ora di sistema: ha capabilities su Time Capsule, e basta. Con i privilegi, \u00e8 possibile configurare in modo flessibile le restrizioni per i processi e cos\u00ec proteggere se stessi.<\/p>\n<p>Il sistema Copy-on-write ci consente di lavorare con le immagini Docker, utilizzandole in modo pi\u00f9 efficiente.<\/p>\n<p><em>Attualmente, Docker ha problemi di compatibilit\u00e0 con Cgroups v2, quindi in questo articolo si considerano proprio 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, hanno iniziato a essere adottati attivamente. L'overhead del hypervisor \u00e8 scomparso, ma alcuni problemi sono rimasti:<\/p>\n<p><\/p>\n<ul>\n<li>immagini grandi: nella stessa OpenVZ vengono spinti il sistema operativo, le librerie e una moltitudine di software, e alla fine l'immagine risulta comunque abbastanza grande;<\/li>\n<li>non c'\u00e8 uno standard adeguato per l'imballaggio e la consegna, quindi rimane il problema delle dipendenze. Ci sono situazioni in cui due pezzi di codice utilizzano una stessa libreria, ma con versioni diverse. Tra di esse pu\u00f2 sorgere un conflitto.<\/li>\n<\/ul>\n<p><\/p>\n<p>Per risolvere tutti questi problemi, \u00e8 giunta la successiva era.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">L'era dei contenitori<\/h2>\n<p><\/p>\n<p>Quando \u00e8 arrivata l'Era dei contenitori, la filosofia di lavoro con essi \u00e8 cambiata:<\/p>\n<p><\/p>\n<ul>\n<li>Un processo \u2014 un contenitore.<\/li>\n<li>Tutte le dipendenze necessarie per il processo vengono fornite nel suo contenitore. Questo richiede di suddividere i monoliti in microservizi.<\/li>\n<li>Minore \u00e8 l'immagine, meglio \u00e8: meno potenziali vulnerabilit\u00e0, pi\u00f9 veloce il rilascio e cos\u00ec via.<\/li>\n<li>Gli istanze diventano effimere. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ricordate, parlavo di pets vs cattle? Prima, le istanze erano come animali domestici, mentre ora sono come cattle \u2014 bestiame. Prima c'era un monolite \u2014 un'applicazione. Ora ci sono 100 microservizi, 100 contenitori. Alcuni di questi contenitori possono avere 2-3 repliche. Non ci importa tanto controllare ogni contenitore. Ci\u00f2 che \u00e8 pi\u00f9 importante \u00e8 la disponibilit\u00e0 del servizio stesso: quello che fa questo insieme di contenitori. Questo cambia gli approcci nel monitoraggio.<\/p>\n<p><\/p>\n<p>Tra il 2014 e il 2015 c'\u00e8 stata l'esplosione di Docker \u2014 quella tecnologia di cui parleremo ora.<\/p>\n<p><\/p>\n<p>Docker ha cambiato la filosofia e ha standardizzato l'imballaggio delle applicazioni. Con Docker possiamo imballare un'applicazione, inviarla in un repository, scaricarla e distribuirla. <\/p>\n<p><\/p>\n<p>Nel contenitore Docker includiamo tutto il necessario, quindi il problema delle dipendenze viene risolto. Docker garantisce la riproducibilit\u00e0. Credo che molti abbiano affrontato il problema della non riproducibilit\u00e0: tutto funziona, lo carichi su produzione e l\u00ec smette di funzionare. Con Docker questo problema scompare. Se il tuo contenitore Docker si avvia e svolge ci\u00f2 che deve fare, \u00e8 molto probabile che si avvii in produzione e faccia lo stesso.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">Un accenno sull'overhead<\/h2>\n<p>Ci sono continui dibattiti sull'overhead. Alcuni ritengono che Docker non comporti un carico aggiuntivo, poich\u00e9 utilizza il kernel Linux e tutti i suoi processi necessari per la containerizzazione. Dicono che \"se dici che Docker \u00e8 overhead, allora anche il kernel Linux \u00e8 overhead\".<\/p>\n<p>D'altra parte, se approfondiamo, in Docker ci sono effettivamente alcune cose che si possono considerare, con un po' di elasticit\u00e0, come overhead.<\/p>\n<p>Il primo \u00e8 il namespace PID. Quando collochiamo un processo in un 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, \u00e8 diventato PID 1 (processo master). E sull'host ha PID 12623. Ed \u00e8 difficile dire quanto sia overhead.<\/p>\n<p>La seconda cosa \u00e8 i Cgroups. Prendiamo i Cgroups per la memoria, cio\u00e8 la possibilit\u00e0 di limitare la memoria di un contenitore. Quando \u00e8 attivata, vengono attivati i contatori, il memory accounting: il kernel deve capire quante pagine sono allocate e quante sono ancora libere per questo contenitore. Questo potrebbe essere overhead, ma non ho trovato studi precisi su come influisca sulle prestazioni, e non ho notato che un'applicazione avviata in Docker perda all'improvviso prestazioni. <\/p>\n<p>E un'altra osservazione sulle prestazioni. Alcuni parametri del kernel vengono passati dall'host al contenitore. In particolare, alcuni parametri di rete. Pertanto, se desideri eseguire in Docker qualcosa di ad alte prestazioni, ad esempio qualcosa che utilizzi attivamente la rete, dovrai almeno modificare questi parametri. Qualcosa come nf_conntrack, per esempio. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">Sulla concezione 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 del contenitore; avvia i contenitori. <\/li>\n<li>Docker CII \u2014 strumento per la gestione di Docker.<\/li>\n<li>Dockerfile \u2014 istruzioni su come costruire un'immagine.<\/li>\n<li>Image \u2014 immagine da cui viene distribuito il contenitore.<\/li>\n<li>Contenitore.<\/li>\n<li>Docker registry \u2014 deposito di immagini.<\/li>\n<\/ol>\n<p><\/p>\n<p>Schema, questo appare pi\u00f9 o meno cos\u00ec:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Che cos&#039;\u00e8 Docker: una breve panoramica sulla 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>Sul Docker_host gira il daemon Docker, che avvia i contenitori. C'\u00e8 un Client che invia comandi: costruisci un'immagine, scarica un'immagine, avvia un contenitore. Il daemon Docker va nel registry e li esegue. Il client Docker pu\u00f2 comunicare sia localmente (con un socket unix) che tramite TCP da un host remoto.<\/p>\n<p><\/p>\n<p>Diamo un'occhiata a ciascun componente.<\/p>\n<p><\/p>\n<p><u>Docker daemon (daemon)<\/u> \u2014 \u00e8 la parte server, gira sulla macchina host: scarica le immagini e avvia i contenitori, crea una rete tra i contenitori, raccoglie i registri. Quando diciamo 'crea un'immagine', anche questo \u00e8 gestito dal daemon.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2014 la parte client di Docker, strumento da riga di comando per lavorare con il daemon. Ripeto, pu\u00f2 operare 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 contenitori attualmente in esecuzione sul Docker-host.<br \/>\ndocker images \u2014 mostra le immagini scaricate localmente.<br \/>\ndocker search &lt;&gt; \u2014 ricerca di un'immagine nel registry.<br \/>\ndocker pull &lt;&gt; \u2014 scarica un'immagine dal registry sul computer.<br \/>\ndocker build &lt;&lt;\\\/path\\\/to\\\/dir&gt;&gt; \u2014 costruisce un'immagine.<br \/>\ndocker run &lt;&gt; \u2014 avvia il contenitore.<br \/>\ndocker rm &lt;&gt; \u2014 rimuove il contenitore.<br \/>\ndocker logs &lt;&gt; \u2014 registri del contenitore<br \/>\ndocker start\\\/stop\\\/restart &lt;&gt; \u2014 gestione del contenitore\n<\/p>\n<p>Se padroneggi questi comandi e li usi con sicurezza, considera di aver padroneggiato Docker al 70% a livello utente.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2014 istruzioni per la creazione di un'immagine. Quasi ogni comando delle istruzioni \u00e8 un nuovo strato. Guardiamo con un esempio.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Che cos&#039;\u00e8 Docker: una breve panoramica sulla 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 i comandi, a destra \u2014 argomenti. Ogni comando qui presente (e in generale scritto in Dockerfile) crea un nuovo strato nell'immagine. <\/p>\n<p><\/p>\n<p>Anche guardando la parte sinistra, possiamo capire pi\u00f9 o meno cosa sta succedendo. Diciamo: \u00abcrea una cartella per noi\u00bb \u2014 questo \u00e8 un livello. \u00abRendi la cartella operativa\u00bb \u2014 questo \u00e8 un altro livello, e cos\u00ec via. La torta a strati semplifica la vita. Se creo un altro Dockerfile e nell'ultima riga modifico qualcosa \u2014 non eseguir\u00f2 pi\u00f9 \"python\" \"main.py\", ma qualcosa di diverso, oppure installer\u00f2 dipendenze da un altro file \u2014 i livelli precedenti saranno riutilizzati come cache.<\/p>\n<p><\/p>\n<p><u>Immagine<\/u> \u2014 \u00e8 il pacchetto del container, da cui vengono avviati i container. Se consideriamo Docker dal punto di vista di 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 lo stesso: dai container vengono avviati, sono conservati nel Docker registry (analogamente a yum, nel 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 del Dockerfile. Ogni istruzione del Dockerfile crea un nuovo livello. I livelli possono essere riutilizzati.<\/p>\n<p><\/p>\n<p><u>Docker registry<\/u> \u2014 \u00e8 un repository di immagini Docker. Analogamente ai sistemi operativi, Docker ha un registro pubblico standard: dockerhub. Ma \u00e8 possibile costruire il proprio repository, il proprio Docker registry. <\/p>\n<p><\/p>\n<p><u>Contenitore<\/u> \u2014 \u00e8 ci\u00f2 che viene eseguito dall'immagine. Abbiamo creato l'immagine secondo le istruzioni del Dockerfile, poi la avviamo da questa immagine. Questo container \u00e8 isolato dagli altri container, deve contenere tutto il necessario per il funzionamento dell'applicazione. Un container equivale a un processo. A volte \u00e8 necessario eseguire due processi, ma ci\u00f2 \u00e8 un po' contro la filosofia di Docker.<\/p>\n<p><\/p>\n<p>Il requisito \"un container - un processo\" \u00e8 legato al PID Namespace. Quando in un Namespace viene avviato un processo con PID 1, se per caso muore, anche l'intero container muore. Se ci sono due processi in esecuzione: uno vive, mentre l'altro \u00e8 morto, il container continua a vivere. Ma questo riguarda le Best Practices, di cui parleremo in altri materiali.<\/p>\n<p><\/p>\n<p>Per studiare pi\u00f9 dettagliatamente le caratteristiche e il programma completo del corso, puoi seguire il link: \"<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: Marcell Ibraev, amministratore certificato Kubernetes, ingegnere pratico presso l'azienda Southbridge, relatore e sviluppatore di corsi Slyorm.<\/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.1.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.1.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: una breve introduzione alla storia e alle principali astrazioni | ProHoster","description":"Il 10 agosto \u00e8 iniziato un videocorso su Docker in Slyorm, in cui esaminiamo tutto in dettaglio - dalle principali astrazioni alle impostazioni della 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}]}}