{"id":42175,"date":"2019-03-18T00:00:00","date_gmt":"2019-03-17T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem"},"modified":"2020-02-18T13:45:00","modified_gmt":"2020-02-18T10:45:00","slug":"evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","title":{"rendered":"L'evoluzione dei mezzi di distribuzione, o riflessioni su Docker, deb, jar e altro","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"L&#039;evoluzione dei mezzi di distribuzione, o riflessioni su Docker, deb, jar e altro\" src=\"\/wp-content\/uploads\/2019\/03\/3c677d0628824497039901c0179a8749.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn un momento ho deciso di scrivere un articolo sulla distribuzione in forma di container Docker e pacchetti deb, ma quando ho iniziato, mi sono trovato a pensare ai tempi lontani dei primi computer personali e persino delle calcolatrici. Insomma, invece di un'analisi secca tra Docker e deb, sono venute fuori alcune riflessioni sull'evoluzione, che ora vi presento per il vostro giudizio.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nQualsiasi prodotto, qualunque esso sia, deve in qualche modo arrivare ai server di produzione, deve essere configurato e avviato. Questa sar\u00e0 la questione centrale dell'articolo.<\/p>\n<p>Rifletter\u00f2 nel contesto storico, \"quello che vedo - su quello canto\", ci\u00f2 che ho visto quando ho iniziato a programmare e cosa osservo ora, cosa usiamo attualmente e perch\u00e9. L'articolo non ambisce a essere una ricerca completa, alcuni aspetti sono stati trascurati, \u00e8 il mio punto di vista personale su ci\u00f2 che c'era e su ci\u00f2 che c'\u00e8 ora.<\/p>\n<p>Quindi, nei bei tempi di un tempo... il modo pi\u00f9 primitivo di distribuzione che ho conosciuto erano le cassette dei registratori. Avevo un computer BK-0010.01...<\/p>\n<h2>L'era delle calcolatrici<\/h2>\n<p>\nNo, c'era un momento ancora pi\u00f9 antico, c'era una calcolatrice <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-61\">MK-61<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-52\">MK-52<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;evoluzione dei mezzi di distribuzione, o riflessioni su Docker, deb, jar e altro\" src=\"\/wp-content\/uploads\/2019\/03\/ea68507cd83b4da3038cea7329ff1813.jpg\" style=\"display:block;margin: 0 auto;\" \/> Dunque, quando avevo <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-61\">MK-61<\/a><\/noindex>, il modo per trasferire il programma era un normale foglio di carta a quadretti su cui era scritta la programmazione, che per necessit\u00e0 veniva inserita manualmente nella calcolatrice. Vuoi giocare (s\u00ec, s\u00ec, anche su quella calcolatrice preistorica c'erano dei giochi) \u2014 ti siedi e digiti il programma nella calcolatrice. Naturalmente, spegnendo la calcolatrice il programma andava nel nulla. Oltre ai codici scritti manualmente su carta, i programmi venivano pubblicati nelle riviste \"Radio\" e \"Tecnica dei giovani\", e stampati nei libri dell'epoca.<\/p>\n<p>La modifica successiva era una calcolatrice <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%9C%D0%9A-52\">MK-52<\/a><\/noindex>, che gi\u00e0 aveva una sorta di memoria non volatile. Ora non era pi\u00f9 necessario inserire manualmente il gioco o il programma, ma, eseguendo alcune magie con i tasti, si caricava da solo.<\/p>\n<p>La dimensione del programma pi\u00f9 grande nella calcolatrice era di 105 istruzioni, e la memoria permanente del MK-52 era di 512 istruzioni.<\/p>\n<p>A proposito, se ci sono fan di queste calcolatrici che leggono questo articolo \u2014 mentre scrivevo l'articolo ho trovato un emulatore di calcolatrice per Android, e programmi per essa. Avanti, nel passato!<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.cax.pmk.ext\">Emulatore MK-61 per Android<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xvadim.github.io\/xbasoft\/pmk\/pmk.html\">Catalogo dei programmi per MK-61<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><b>Una piccola digressione su MK-52<\/b> <i>(da wikipedia)<\/i><\/p>\n<p>MK-52 \u00e8 volato nello spazio a bordo della navetta \"Soyuz TM-7\". Doveva essere utilizzato per il calcolo della traiettoria di atterraggio nel caso in cui il computer di bordo si fosse guastato.<\/p>\n<p>MK-52 con il modulo di espansione della memoria \"Elettronica-Astro\" \u00e8 stato fornito alle navi della Marina Militare a partire dal 1988 come parte del complesso di calcolo per timonieri. <\/p><\/blockquote>\n<h2>I primi computer personali<\/h2>\n<p><img decoding=\"async\" alt=\"L&#039;evoluzione dei mezzi di distribuzione, o riflessioni su Docker, deb, jar e altro\" src=\"\/wp-content\/uploads\/2019\/03\/5d443c3919023854c53c83ac2265cea3.jpg\" style=\"display:block;margin: 0 auto;\" \/> Torniamo indietro nel tempo <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%9A_(%D1%81%D0%B5%D0%BC%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%BE_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BE%D0%B2)\">BK-0010<\/a><\/noindex>. \u00c8 chiaro che anche la memoria \u00e8 aumentata, e inserire il codice da un foglio di carta non era pi\u00f9 un'opzione (anche se inizialmente lo facevo, perch\u00e9 non c'era altro supporto disponibile). Il principale mezzo di archiviazione e distribuzione del software diventano le audiocassette per i registratori.<\/p>\n<p><br clear=\"all\"><br \/>\n<br clear=\"all\"><br \/>\n<img decoding=\"async\" alt=\"L&#039;evoluzione dei mezzi di distribuzione, o riflessioni su Docker, deb, jar e altro\" src=\"\/wp-content\/uploads\/2019\/03\/988316eac02a95a16e15502a826f0653.jpg\" style=\"display:block;margin: 0 auto;\" \/>Il caricamento su cassetta avveniva solitamente sotto forma di uno o due file binari, mentre tutto il resto era contenuto all'interno. L'affidabilit\u00e0 era molto bassa, era necessario mantenere 2-3 copie del programma. Anche il tempo di caricamento non era affatto soddisfacente, gli appassionati sperimentavano con diversi codificatori di frequenza per superare questi inconvenienti. A quel tempo non mi occupavo ancora di sviluppo software professionale (a parte semplici programmi in BASIC), quindi purtroppo non posso raccontare nei dettagli come fosse strutturato tutto internamente. Il fatto che ci fosse solo RAM sul computer definiva per lo pi\u00f9 la semplicit\u00e0 del sistema di archiviazione dei dati.<\/p>\n<h2>L'emergere di supporti informatici affidabili e di grandi dimensioni<\/h2>\n<p>\nPi\u00f9 tardi arrivano i dischetti, semplificando il processo di copia e aumentando l'affidabilit\u00e0.<br \/>\nMa la situazione cambia radicalmente solo quando compaiono supporti locali sufficientemente grandi sotto forma di HDD.<\/p>\n<p>Cambia radicalmente il tipo di distribuzione: emergono programmi di installazione che gestiscono il processo di configurazione del sistema e la pulizia dopo la disinstallazione, poich\u00e9 i programmi non vengono pi\u00f9 semplicemente letti nella memoria, ma vengono gi\u00e0 copiati nell'archiviazione locale, dalla quale \u00e8 necessario anche eliminare i dati non necessari quando necessario.<\/p>\n<p>Parallelamente, aumenta la complessit\u00e0 del software fornito.<br \/>\nIl numero di file nella distribuzione cresce da uno a centinaia e migliaia, iniziano i conflitti di versione delle librerie e altre gioie, quando diversi programmi utilizzano gli stessi dati.<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;evoluzione dei mezzi di distribuzione, o riflessioni su Docker, deb, jar e altro\" src=\"\/wp-content\/uploads\/2019\/03\/48af8fca591a1061df45cd619854a59a.jpg\" style=\"display:block;margin: 0 auto;\" \/> In quei tempi non avevo ancora scoperto l'esistenza di Linux, vivevo nel mondo di MS DOS e, successivamente, Windows, e scrivevo in Borland Pascal e Delphi, dando a volte uno sguardo al C++. Per la distribuzione dei prodotti in quel periodo, molti utilizzavano InstallShield <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/InstallShield\">ru.wikipedia.org\/wiki\/InstallShield<\/a><\/noindex>, che risolveva con successo tutte le questioni relative al deployment e alla configurazione del software.<\/p>\n<p><br clear=\"all\"><br \/>\n<br clear=\"all\"><\/p>\n<h2>L'era di Internet<\/h2>\n<p>\nGradualmente la complessit\u00e0 dei sistemi software \u00e8 aumentata, passando da applicazioni monolitiche e desktop a sistemi distribuiti, thin client e microservizi. Ora non \u00e8 pi\u00f9 necessario configurare un solo programma, ma un insieme di essi, in modo che funzionino bene insieme.<\/p>\n<p>La concezione \u00e8 cambiata completamente, \u00e8 arrivato Internet, \u00e8 iniziata l'era dei servizi cloud. Fino a quel momento eravamo ancora solo agli inizi, sotto forma di siti web, e nessuno sognava particolarmente i servizi. Ma questo \u00e8 stato un momento di svolta nell'industria sia dello sviluppo che della distribuzione delle applicazioni.<\/p>\n<p>Ho notato che in quel momento si \u00e8 verificato un cambio di generazione tra gli sviluppatori (o era solo nel mio ambiente), e ho avuto l'impressione che tutti i vecchi metodi di distribuzione fossero stati dimenticati in un attimo e che tutto fosse ricominciato da capo: tutta la distribuzione \u00e8 iniziata a essere fatta con script improvvisati e hanno chiamato questa pratica con orgoglio 'Continuous delivery'. Di fatto, \u00e8 iniziato un certo periodo di confusione, in cui il vecchio \u00e8 stato dimenticato e non utilizzato, e il nuovo semplicemente non esisteva.<\/p>\n<p>Ricordo i tempi in cui nella nostra azienda, dove lavoravo (non dir\u00f2 il nome), invece di fare una build tramite ant (maven all'epoca non era ancora popolare o non esisteva), la gente semplicemente compilava jar nell'IDE e lo committava serenamente in SVN. Di conseguenza, il deployment consisteva nel recuperare il file da SVN e copiarlo tramite SSH sulla macchina desiderata. Cos\u00ec semplice e rudimentale.<\/p>\n<p>In quello stesso periodo, la distribuzione di semplici siti PHP avveniva in modo estremamente primitivo, copiando il file corretto tramite FTP sulla macchina di destinazione. A volte nemmeno ci\u00f2: si modificava il codice direttamente sul server di produzione, e era un vero lusso avere dei backup da qualche parte.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Pacchetti RPM e DEB<\/h4>\n<p>\n<img decoding=\"async\" alt=\"L&#039;evoluzione dei mezzi di distribuzione, o riflessioni su Docker, deb, jar e altro\" src=\"\/wp-content\/uploads\/2019\/03\/8590e7db6c67cad4b97654465ba5e946.jpg\" style=\"display:block;margin: 0 auto;\" \/>D'altra parte, con lo sviluppo di Internet, i sistemi simili a UNIX hanno cominciato a guadagnare popolarit\u00e0, in particolare, proprio in quel periodo ho scoperto RedHat Linux 6, intorno al 2000. Naturalmente, anche l\u00ec c'erano determinati strumenti per la distribuzione del software; secondo Wikipedia, RPM come principale gestore di pacchetti \u00e8 apparso nel 1995 con la versione RedHat Linux 2.0. E da allora e fino ai nostri giorni, il sistema \u00e8 distribuito sotto forma di pacchetti RPM e continua ad esistere e svilupparsi con successo.<\/p>\n<p>Le distribuzioni della famiglia Debian hanno seguito un percorso simile e hanno implementato la distribuzione sotto forma di pacchetti deb, il che \u00e8 rimasto invariato fino ai giorni nostri.<\/p>\n<p>I gestori di pacchetti consentono di distribuire i prodotti software, configurarli durante l'installazione, gestire le dipendenze tra diversi pacchetti e effettuare la rimozione dei prodotti e la pulizia degli elementi superflui durante la disinstallazione. Cio\u00e8, per la maggior parte, \u00e8 tutto ci\u00f2 che serve; per questo motivo sono rimasti in uso per diversi decenni praticamente senza modifiche.<\/p>\n<p>Il cloud ha aggiunto ai gestori di pacchetti la possibilit\u00e0 di installare non solo da supporti fisici, ma anche da repository cloud, ma fondamentalmente \u00e8 cambiato poco.<\/p>\n<p>Vale la pena notare che attualmente ci sono alcuni tentativi di allontanarsi da deb e passare ai pacchetti snap, ma ne parleremo pi\u00f9 tardi.<\/p>\n<p>Quindi, questa nuova generazione di sviluppatori cloud, che non conosceva n\u00e9 DEB n\u00e9 RPM, stava anche crescendo lentamente, acquisendo esperienza; i prodotti diventavano pi\u00f9 complessi e servivano modi di distribuzione pi\u00f9 ragionevoli rispetto a FTP, a script bash e a simili lavori da studenti. <br \/>\nE qui entra in gioco Docker, una sorta di miscela di virtualizzazione, isolamento delle risorse e metodo di distribuzione. \u00c8 attualmente di moda, giovanile, ma \u00e8 davvero necessario per tutto? \u00c8 una panacea?<\/p>\n<p>Dalle mie osservazioni, molto spesso Docker viene proposto non come una scelta ragionevole, ma semplicemente perch\u00e9, da un lato, se ne parla nella comunit\u00e0 e coloro che lo propongono lo conoscono solamente. Dall'altro lato, i sistemi di packaging buoni e vecchi sono in gran parte ignorati: esistono e svolgono il loro lavoro silenziosamente e senza attirare troppo l'attenzione. In una situazione del genere, non c'\u00e8 molta scelta \u2014 la scelta \u00e8 ovvia: Docker.<\/p>\n<p>Prover\u00f2 a condividere l'esperienza di come abbiamo implementato Docker e cosa ne \u00e8 derivate.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Script personalizzati<\/h4>\n<p>\nInizialmente c'erano script bash che distribuivano archivi jar sulle macchine necessarie. Questo processo era gestito da Jenkins. Ha funzionato con successo, dato che l'archivio jar stesso \u00e8 gi\u00e0 una build che contiene classi, risorse e persino configurazioni. Se si accumulano il massimo di elementi, \u00e8 relativamente semplice estrarlo con uno script, non \u00e8 la cosa pi\u00f9 complicata da fare.<\/p>\n<p>Ma gli script hanno alcuni svantaggi:<\/p>\n<ul>\n<li> Gli script di solito sono scritti in fretta e quindi sono cos\u00ec primitivi da contenere solo il pi\u00f9 semplice dei casi. Questo \u00e8 favorito dal fatto che lo sviluppatore \u00e8 interessato a una rapida consegna, mentre uno script ben fatto richiede un notevole investimento di risorse.<\/li>\n<li> Di conseguenza, gli script non contengono procedure di disinstallazione.<\/li>\n<li> Non c'\u00e8 una procedura di upgrade stabilita.<\/li>\n<li> Con l'arrivo di un nuovo prodotto, \u00e8 necessario scrivere un nuovo script.<\/li>\n<li> Non c'\u00e8 supporto per le dipendenze.<\/li>\n<\/ul>\n<p>\nCerto, si pu\u00f2 scrivere uno script complesso, ma, come ho detto prima, questo richiede tempo di sviluppo, e non poco, e come sappiamo, il tempo \u00e8 sempre scarso.<\/p>\n<p>Tutto ci\u00f2 limita ovviamente l'uso di questo modo di distribuzione solo a sistemi molto semplici. \u00c8 arrivato il momento di cambiare.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Docker<\/h4>\n<p>\n<img decoding=\"async\" alt=\"L&#039;evoluzione dei mezzi di distribuzione, o riflessioni su Docker, deb, jar e altro\" src=\"\/wp-content\/uploads\/2019\/03\/f9c6180a2775513ce88c5425727817d1.jpg\" style=\"display:block;margin: 0 auto;\" \/>A un certo punto, abbiamo iniziato a ricevere nuovi programmatori pieni di idee e appassionati di Docker. Bene, prendi la bandiera e andiamo! Ci sono state due tentativi. Entrambi non riusciti, diciamo cos\u00ec, a causa di grandi ambizioni, ma poca esperienza reale. Era necessario forzare e completare le cose con ogni mezzo? Probabilmente no: il team deve evolversi fino al livello necessario prima di poter utilizzare gli strumenti appropriati. Inoltre, utilizzando immagini Docker pronte, abbiamo spesso riscontrato problemi con la rete che non funzionava correttamente (il che, forse, era dovuto alla giovent\u00f9 di Docker stesso) o era difficile espandere contenitori altrui.<\/p>\n<p>Quali inconvenienti abbiamo riscontrato?<\/p>\n<ul>\n<li> Problemi di rete in modalit\u00e0 bridge.<\/li>\n<li> Difficolt\u00e0 a visualizzare i log nel contenitore (se non sono stati esportati separatamente nel file system della macchina host).<\/li>\n<li> Frequente blocco anomalo di ElasticSearch all'interno del contenitore, la causa non \u00e8 stata mai identificata, contenitore ufficiale.<\/li>\n<li> Scomodo usare la shell all'interno del contenitore: molte funzionalit\u00e0 sono limitate, mancano strumenti familiari.<\/li>\n<li> Le grandi dimensioni dei contenitori raccolti rendono costoso lo stoccaggio<\/li>\n<li> A causa delle grandi dimensioni dei contenitori, \u00e8 difficile mantenere pi\u00f9 versioni<\/li>\n<li> Assemblaggio pi\u00f9 lungo, diversamente da altri metodi (script o pacchetti deb)<\/li>\n<\/ul>\n<p>\nD'altra parte, in cosa \u00e8 peggio distribuire un servizio Spring in forma di archivio jar tramite lo stesso deb? \u00c8 davvero necessaria l'isolamento delle risorse? Vale la pena rinunciare agli strumenti comodi del sistema operativo, mettendo il servizio in un contenitore seriamente ridotto?<\/p>\n<p>Come ha dimostrato la pratica, in realt\u00e0 questo non \u00e8 necessario, un pacchetto deb \u00e8 sufficiente nel 90% dei casi.<\/p>\n<p>Quando il vecchio e caro deb non funziona e quando avevamo davvero bisogno di Docker?<\/p>\n<p>Per noi \u00e8 stato il dispiegamento di servizi in Python. Molte librerie necessarie per l'apprendimento automatico mancavano nella fornitura standard del sistema operativo (e quelle che c'erano non erano le versioni giuste), hack di configurazione, necessit\u00e0 di versioni diverse per servizi diversi, che vivono sullo stesso sistema host, hanno portato al fatto che l'unico modo ragionevole per fornire questa miscela fondamentale si \u00e8 rivelato essere Docker. Il lavoro necessario per costruire un contenitore Docker si \u00e8 rivelato inferiore all'idea di impacchettare tutto in pacchetti deb separati con dipendenze, e in effetti, nessuno in sano spirito si sarebbe preso cura di questo.<\/p>\n<p>Il secondo punto in cui si prevede di utilizzare Docker \u00e8 per il dispiegamento di servizi con schema blue-green. Ma qui si desidera una crescente complessit\u00e0: prima si assemblano i pacchetti deb, e poi da essi si costruisce il contenitore Docker.<\/p>\n<p><br clear=\"all\"><\/p>\n<h4>Pacchetti Snap<\/h4>\n<p>\n<img decoding=\"async\" alt=\"L&#039;evoluzione dei mezzi di distribuzione, o riflessioni su Docker, deb, jar e altro\" src=\"\/wp-content\/uploads\/2019\/03\/8c9001b28757f8427c85e54bca5b4e73.jpg\" style=\"display:block;margin: 0 auto;\" \/> Torniamo ai pacchetti Snap. Sono apparsi ufficialmente per la prima volta in Ubuntu 16.04. A differenza dei tradizionali pacchetti deb e rpm, gli snap includono tutte le dipendenze. Da un lato, questo consente di evitare conflitti tra librerie, dall'altro lato, le dimensioni del pacchetto risultante sono maggiori. Inoltre, questo pu\u00f2 influenzare la sicurezza del sistema: nel caso dell'offerta di snap, tutte le modifiche alle librerie incluse devono essere monitorate dallo stesso sviluppatore che crea il pacchetto. Insomma, non \u00e8 tutto cos\u00ec semplice e la felicit\u00e0 generale dal loro utilizzo non si materializza. Tuttavia, \u00e8 comunque un'alternativa ragionevole se Docker viene utilizzato solo come mezzo di imballaggio e non di virtualizzazione.<\/p>\n<p><br clear=\"all\"><br \/>\nAlla fine, attualmente utilizziamo una combinazione ragionevole di pacchetti deb e container Docker, che, in alcuni casi, potremmo sostituire con pacchetti snap.<\/p>\n<p class=\"for_users_only_msg\">Solo gli utenti registrati possono partecipare al sondaggio. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Accedi<\/a><\/noindex>, per favore.<\/p>\n<h2 class=\"default-block__polling-title\">E voi, cosa usate per le consegne?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Script personalizzati<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Copiamo manualmente su FTP<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pacchetti deb<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pacchetti rpm<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pacchetti snap<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    immagini Docker<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    immagini di macchine virtuali<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Cloniamo l'HDD per intero<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    puppet<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    ansible<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Altro<\/p>\n<\/li>\n<\/ul>\n<p>    Hanno votato 109 utenti. 32 utenti si sono astenuti.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/srg\/blog\/444102\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0434\u043e\u043a\u0435\u0440 \u0438 deb-\u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0430\u043b, \u043c\u0435\u043d\u044f \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043f\u043e\u043d\u0435\u0441\u043b\u043e \u0432 \u0434\u0430\u043b\u0435\u043a\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0443\u0445\u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0434\u043e\u043a\u0435\u0440\u0430 \u0438 deb \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u0442 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0442\u0435\u043c\u0443 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438, \u043a\u043e\u0438 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u043d\u0430 \u0412\u0430\u0448 \u0441\u0443\u0434. \u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-42175","post","type-post","status-publish","format-standard","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=\"\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.\" \/>\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\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem\" \/>\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\u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043e Docker, deb, jar \u0438 \u043f\u0440\u043e\u0447\u0435\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem\" \/>\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=\"2019-03-17T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:45:00+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\udd47Evoluzione dei metodi di consegna, o riflessioni su Docker, deb, jar e altro | ProHoster","description":"In un certo momento.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","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\u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438, \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043e Docker, deb, jar \u0438 \u043f\u0440\u043e\u0447\u0435\u043c | ProHoster","og:description":"\u041a\u0430\u043a-\u0442\u043e \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/evolyutsiya-sredstv-postavki-ili-razmyshleniya-o-docker-deb-jar-i-prochem","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":"2019-03-17T21:00:00+00:00","article:modified_time":"2020-02-18T10:45:00+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"42175","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":"2026-01-22 07:30:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:04:29","updated":"2026-01-22 07:30:19","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\/42175","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=42175"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/42175\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=42175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=42175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=42175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}