{"id":28991,"date":"2019-02-27T00:00:00","date_gmt":"2019-02-26T23:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=28991"},"modified":"2021-05-21T20:18:00","modified_gmt":"2021-05-21T18:18:00","slug":"chi-ha-detto-che-docker-serve-solo-in-produzione","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/","title":{"rendered":"Chi ha detto che Docker serve solo in produzione?"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"28992\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/attachment\/ba762668-ed5b-4eed-be79-9f937226d50a\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-title=\"ba762668-ed5b-4eed-be79-9f937226d50a\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-28992\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nell&#8217;ultimo anno mi sono interessato a Docker e a tutto l&#8217;ecosistema che ci gira intorno, fino ad arrivare a Kubernetes per l&#8217;orchestrazione dei container. Devo dire che, contro ogni iniziale aspettativa, mi sono molto appassionato alla cosa ed ho cominciato, come&nbsp;mio solito, a condividere la mia esperienza agli eventi in cui tengo delle sessioni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Faccio una premessa sul &#8220;contro ogni iniziale aspettativa&#8221;: ero partito pensando che Docker &amp; company fossero strumenti che supportano solo la fase di rilascio delle applicazioni. Quindi, per evitare di fare lo stesso errore di&nbsp;chi, come me, pensa che preparare ambienti di produzione sia noioso, volevo raccontare la felice scoperta che i container sono una fantastica risorsa anche per la fase di sviluppo dell&#8217;applicazione, oltre a semplificare sensibilmente tutte le fasi successive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Partiamo dal perch\u00e9, come sviluppatore, dovrei utilizzare i container:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Velocizzano l&#8217;ingresso di un nuovo elemento nel team;<\/li><li>Eliminano i conflitti nelle applicazioni;<\/li><li>Permetteno rilasci pi\u00f9 semplici e veloci;<\/li><li>Si.. ok&#8230; rendono sostenibile la gestione dei &#8220;microservizi&#8221;.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Per capire da dove viene fuori questa lista, diciamoci velocemente che cosa \u00e8 Docker. Stiamo parlando di una piattaforma open source per la gestione del ciclo di vita di un affare chiamato &#8220;container&#8221;, il cui scopo \u00e8 semplificare la creazione, il rilascio e l&#8217;esecuzione di applicazioni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Di base, partiamo da un\u00a0template in sola lettura chiamato &#8220;immagine&#8221; che \u00e8 sostanzialmente un file system a livelli, usato per condividere i file comuni. Se siete degli sviluppatori, pensate alla definizione di una classe:\u00a0una classe definisce un &#8220;template&#8221; da cui create degli oggetti. Stessa cosa qui: parto da un&#8217;immagine Docker e &#8220;istanziandola&#8221; creo un container. Per continuare con il parallelismo, un container \u00e8 un oggetto istanza di una immagine con il suo stato interno e il suo ciclo di vita.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"442\" data-attachment-id=\"28996\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/attachment\/image01-22\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-22.png?fit=1600%2C690&amp;ssl=1\" data-orig-size=\"1600,690\" data-comments-opened=\"0\" data-image-title=\"image01-22\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-22.png?fit=1024%2C442&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-22.png?resize=1024%2C442&#038;ssl=1\" alt=\"\" class=\"wp-image-28996\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-22-980x423.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-22-480x207.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Giusto per essere sicuri che ci stiamo capendo, avrete sicuramente dimestichezza con il concetto di macchine virtuale, dove, in buona sostanza, potete far girare su un sistema operativo a vostro piacere installato su una macchina fisica, un altro (o lo stesso) sistema operativo su un&#8217;astrazione virtualizzata dello stesso hardware. E,&nbsp;probabilmente, sapete anche il perch\u00e9 le virtual machine sono utili: ambienti isolati che possono girare sullo stesso hardware, facilmente&nbsp;<em>backuppabili<\/em>&nbsp;e ripristinabili, su cui potete installare qualsiasi cosa volete.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Purtroppo il loro vantaggio \u00e8 anche il loro principale limite: dovete installarci dentro il sistema operativo con un consumo di spazio e memoria, oltre che con\u00a0tempi di avvio molto alti. In ambienti di produzione, sono una soluzione molto conveniente per risparmiare &#8220;ferro&#8221; e avere controllo sulle singole applicazioni. In ambiente di sviluppo, lavorare con le virtual machine richiede tanto spazio e tanta memoria e anche solamente copiare un VM pu\u00f2 richiedere tempo. Un container risolve esattamente questo problema: avere un ambiente isolato e veloce, che consumi meno spazio e memoria perch\u00e9 condivide il sistema operativo che lo\u00a0ospita.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"629\" data-attachment-id=\"28999\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/attachment\/image02-21\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-21.png?fit=1488%2C914&amp;ssl=1\" data-orig-size=\"1488,914\" data-comments-opened=\"0\" data-image-title=\"image02-21\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-21.png?fit=1024%2C629&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-21.png?resize=1024%2C629&#038;ssl=1\" alt=\"\" class=\"wp-image-28999\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-21-980x602.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02-21-480x295.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I container nascono in ambiente Linux e, fino a poco tempo fa, avevate bisogno di una virtual machine Linux per poterli usare, ma essendo diventato il trend del momento (per una volta non per moda ma perch\u00e9 risolve un problema), anche Microsoft si \u00e8 attivata per fornire su Windows gli strumenti nativi per far girare i container.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"526\" data-attachment-id=\"29001\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/attachment\/image02a\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02a.png?fit=1530%2C786&amp;ssl=1\" data-orig-size=\"1530,786\" data-comments-opened=\"0\" data-image-title=\"image02a\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02a.png?fit=1024%2C526&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image02a.png?resize=1024%2C526&#038;ssl=1\" alt=\"\" class=\"wp-image-29001\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02a-980x503.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image02a-480x247.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"velocizza-lingresso-di-un-nuovo-elemento-nel-team\">Velocizzano l&#8217;ingresso di un nuovo elemento nel team<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Supponente di avere un&#8217;applicazione che, per funzionare, ha bisogno di uno o pi\u00f9 database, una cache, un backend e un frontend. Stiamo quindi parlando del minimo sindacale. Arriva un nuovo elemento nel team e, al giorno zero, al di l\u00e0 delle sue competenze, avr\u00e0 tre possibilit\u00e0:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Installare tutto sul proprio PC e configurarlo;<\/li><li>Copiarsi le VM e configurarle;<\/li><li>Scaricare i sorgenti, lanciare un comando del tipo &#8220;docker-compose up&#8221; e aspettare un po&#8217; la prima volta (deve tirare gi\u00f9 le immagini) per vedere la propria applicazione partire..<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Penso di aver reso l&#8217;idea, sottolineando che il terzo punto \u00e8 lo scenario che vi implementa Docker.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"elimare-i-conflitti-nelle-applicazioni\">Eliminano i conflitti nelle applicazioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se il mio codice e le librerie che uso sono in un ambiente isolato, che condivide il sistema operativo, ho risolto il problema delle dipendenze alle stesse librerie di diverse applicazioni o delle diverse parti di una stessa applicazione. Se non avete pensato WOW, non avete mai lavorato con JavaScript e NPM. Ma anche in ambienti come .NET&nbsp;la situazione non \u00e8 delle pi\u00f9 rosee.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"permette-rilasci-pi\u00f9-semplici-e-veloci\">Permetteno rilasci pi\u00f9 semplici e veloci<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ricreare in locale l&#8217;ambiente di produzione che ha generato un problema con i container \u00e8 molto pi\u00f9 semplice, semplificando enormemente tutti i rilasci che faremo delle applicazioni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"si-ok-redono-sostenibile-la-gestione-dei-microservizi\">Si.. ok&#8230; rendono sostenibile la gestione dei &#8220;microservizi&#8221;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nella speranza che quello che intendete per microservizio sia la giusta definizione e che avete scelto un architettura a microservizi perch\u00e9 vi risolve un problema invece di crearne, allora l&#8217;unico modo sostenibile di gestirli in tutti gli ambienti \u00e8&nbsp;proprio con i container.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"facciamo-un-esempio\">Facciamo un esempio<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Giusto per capire di cosa stiamo parlando, creiamo insieme un ambiente di SVILUPPO con Docker, concentrandoci per questa volta sul frontend.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create una applicazione Angular con la CLI (ng new frontend) in una cartella a vostro piacere. Nella root del progetto (la cartella frontend per intenderci) create un nuovo file il cui nome sar\u00e0 Dockerfile. Un Dockerfile vi permette di scriptare le operazioni necessarie alla creazione di un&#8217;immagine Docker. Si parte sempre da un&#8217;immagine di base, che contiene gli strumenti che ci servono per lavorare.\u00a0Nel nostro caso, ci serve Node.JS, quindi la prima riga dello script sar\u00e0 la seguente:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nFROM node:10-alpine\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">L&#8217;istruzione FROM, come dice la parola stessa, indica l&#8217;immagine da cui vogliamo partire, che sar\u00e0 scaricata da un registro pubblico chiamato Docker Hub, se la stessa non \u00e8 gi\u00e0 presente localmente. A partire da questa immagine creiamoci una cartella che chiameremo &#8220;app&#8221;. Per eseguire un comando dentro un container durante la creazione di una immagine viene utilizzata l&#8217;istruzione RUN:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nRUN mkdir app\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Dato che tutte le operazioni che faremo saranno fatte in questa cartella impostiamo la cartella &#8220;app&#8221; come cartella corrente, utilizzando l&#8217;istruzione WORKDIR:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nWORKDIR \/app\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A questo punto, copiamo il nostro codice nella cartella utilizzando l&#8217;istruzione COPY, dalla cartella locale corrente alla cartella locale del container:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nCOPY . .\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Se lasciamo le cose cos\u00ec, tutta la folder di Angular sar\u00e0 copiata nel container, ma ci sono alcune cartelle che non ci interessano:\u00a0in particolare la cartella node_modules, perch\u00e9 vogliamo che le librerie che scarichiamo siano compatibili con il sistema operativo su cui girer\u00e0 il container e non il nostro locale. Se avete dimestichezza con il mondo Node\/JavaScript\/NPM, sapete bene che questo non \u00e8 un dettaglio. Andiamoci quindi a creare un file chiamato .dockerignore, che ci permette di elencare le cartelle che non vogliamo che siano copiate nella nostra immagine. Dentro questo file, almeno inizialmente, ci andiamo a mettere solo node_module:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n\/node_modules\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Tornando al nostro Dockerfile, dobbiamo eseguire il download delle librerie che servono al progetto:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nRUN npm install\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Siamo quasi pronti. Arrivati a questo punto la nostra immagine conterr\u00e0 tutti i file che ci servono. Andiamo, come ultima istruzione, a indicare il comando che vogliamo venga eseguito quando la nostra immagine viene utilizzata per creare un container, utilizzando l&#8217;istruzione CMD:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nCMD $(npm bin)\/ng serve --host 0.0.0.0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">L&#8217;istruzione $(npm bin) serve a farsi restituire il path della cartella che contiene le nostre dipendenze e, come probabilmente saprete, la CLI di Angular \u00e8 una dipendenza di sviluppo definita nel package.json. L&#8217;opzione &#8211;host serve a evitare che l&#8217;applicazione risponda su localhost, perch\u00e9 sarebbe il localhost del container e non il nostro. Indicando 0.0.0.0 possiamo re-indirizzare (sulla giusta porta) le richieste che vengono dalla nostra macchina host al server http di sviluppo che esegue la nostra applicazione con la CLI nel container.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ricapitolando ecco il nostro Dockerfile di sviluppo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nFROM node:10-alpine\nRUN mkdir app\nWORKDIR \/app\nCOPY . .\nRUN npm install\nCMD $(npm bin)\/ng serve --host 0.0.0.0\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Creiamo la nostra immagine da questo script con il seguente comando:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\ndocker build -t frontend:dev-v1 .\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Il comando docker build serve a costruire un&#8217;immagine docker, l&#8217;opzione -t ci permette di taggare l&#8217;immagine con una nome a nostra scelta nella forma nome:versione (nel nostro caso stiamo dicendo che \u00e8 un&#8217;immagine di frontend di sviluppo con numero di versione v1, ma siete liberi di adottare la nomenclatura che volete). Come vedete, non abbiamo indicato il nome del Dockerfile perch\u00e9 abbiamo usato il nome standard.&nbsp;Se decidete di usare un nome custom, vi basta&nbsp;indicarlo con l&#8217;opzione -f. Infine c&#8217;\u00e8 un punto, che indica il contesto corrente a cui si riferisce l&#8217;esecuzione dei comandi presenti nello script. Con il punto state dicendo che il contesto corrente \u00e8 la cartella da cui state eseguendo il comando docker build, potete indicare ovviamente una cartella differente se ne avete bisogno.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il risultato dell&#8217;esecuzione sar\u00e0 il seguente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1002\" height=\"1020\" data-attachment-id=\"29006\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/attachment\/image03-19\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-19.png?fit=1002%2C1020&amp;ssl=1\" data-orig-size=\"1002,1020\" data-comments-opened=\"0\" data-image-title=\"image03-19\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-19.png?fit=1002%2C1020&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-19.png?resize=1002%2C1020&#038;ssl=1\" alt=\"\" class=\"wp-image-29006\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-19.png 1002w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-19-980x998.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image03-19-480x489.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1002px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Come vedete, per ogni istruzione viene creato un container temporaneo per eseguire il comando fino ad arrivare all&#8217;immagine finale. Con l&#8217;immagine creata potete avviare il vostro container con il seguente comando:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\ndocker run frontend:dev-v1\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Lanciato cos\u00ec, per\u00f2, il container non vi da l&#8217;interattivit\u00e0 che vi serve durante lo sviluppo, specie se vogliamo che, quando modifichiamo il codice localmente, la modifica si propaghi nel container. Inoltre, l&#8217;applicazione Angular non \u00e8 nemmeno raggiungibile perch\u00e9 \u00e8 eseguita su una porta (la 4200) che non \u00e8 esposta dal container.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"251\" data-attachment-id=\"29009\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/attachment\/image04-18\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-18.png?fit=1128%2C276&amp;ssl=1\" data-orig-size=\"1128,276\" data-comments-opened=\"0\" data-image-title=\"image04-18\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-18.png?fit=1024%2C251&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-18.png?resize=1024%2C251&#038;ssl=1\" alt=\"\" class=\"wp-image-29009\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-18-1024x251.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-18-980x240.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image04-18-480x117.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;esposizione della porta \u00e8 molto semplice:\u00a0basta indicare l&#8217;opzione -p 4200:4200 (la 4200 locale verso la 4200 del container, ovviamente quella locale pu\u00f2 essere qualsiasi). Condividere il codice sul vostro file system con quello del container richiede la creazione di un oggetto che in Docker \u00e8 chiamato Volume, e lo potete fare sullo stesso comando utilizzando l&#8217;opzione -v:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\ndocker run -it -p 4200:4200 -v $(pwd)\/src:\/app\/src frontend:dev-v1\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"251\" data-attachment-id=\"29011\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/attachment\/image05-16\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-16.png?fit=1132%2C277&amp;ssl=1\" data-orig-size=\"1132,277\" data-comments-opened=\"0\" data-image-title=\"image05-16\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-16.png?fit=1024%2C251&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-16.png?resize=1024%2C251&#038;ssl=1\" alt=\"\" class=\"wp-image-29011\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-16-1024x251.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-16-980x240.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image05-16-480x117.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;opzione -it vi permette di avere una modalit\u00e0 interattiva con terminale TTY, molto comodo per lanciare comandi nel container come il CTRL+C.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Grazie a questa configurazione, avrete la stessa esperienza di sviluppo che avreste localmente, ma con tutti i vantaggi dell&#8217;utilizzo dei container! Nei prossimi post vedremo come aggiungere il backend e creare uno script docker-compose che fa tutto il lavoro sporco per noi!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Happy coding!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Vediamo insieme perch\u00e9, come sviluppatori, dovremmo utilizzare i container.<\/p>\n","protected":false},"author":196716248,"featured_media":28992,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637387,688637545],"class_list":["post-28991","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-angular","tag-docker"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Chi ha detto che Docker serve solo in produzione? - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chi ha detto che Docker serve solo in produzione? - Blexin\" \/>\n<meta property=\"og:description\" content=\"Vediamo insieme perch\u00e9, come sviluppatori, dovremmo utilizzare i container.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-26T23:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-21T18:18:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i2.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Michele Aponte\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michele Aponte\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/\"},\"author\":{\"name\":\"Michele Aponte\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/cdc5540c3b6edcacd8d760669e797005\"},\"headline\":\"Chi ha detto che Docker serve solo in produzione?\",\"datePublished\":\"2019-02-26T23:00:00+00:00\",\"dateModified\":\"2021-05-21T18:18:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/\"},\"wordCount\":1635,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"Angular\",\"Docker\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/\",\"name\":\"Chi ha detto che Docker serve solo in produzione? - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2019-02-26T23:00:00+00:00\",\"dateModified\":\"2021-05-21T18:18:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/cdc5540c3b6edcacd8d760669e797005\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/chi-ha-detto-che-docker-serve-solo-in-produzione\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chi ha detto che Docker serve solo in produzione?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/cdc5540c3b6edcacd8d760669e797005\",\"name\":\"Michele Aponte\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g\",\"caption\":\"Michele Aponte\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/michele-aponteblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Chi ha detto che Docker serve solo in produzione? - Blexin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/","og_locale":"it_IT","og_type":"article","og_title":"Chi ha detto che Docker serve solo in produzione? - Blexin","og_description":"Vediamo insieme perch\u00e9, come sviluppatori, dovremmo utilizzare i container.","og_url":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/","og_site_name":"Blexin","article_published_time":"2019-02-26T23:00:00+00:00","article_modified_time":"2021-05-21T18:18:00+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i2.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Michele Aponte","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Michele Aponte","Tempo di lettura stimato":"8 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/"},"author":{"name":"Michele Aponte","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/cdc5540c3b6edcacd8d760669e797005"},"headline":"Chi ha detto che Docker serve solo in produzione?","datePublished":"2019-02-26T23:00:00+00:00","dateModified":"2021-05-21T18:18:00+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/"},"wordCount":1635,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1","keywords":["Angular","Docker"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/","url":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/","name":"Chi ha detto che Docker serve solo in produzione? - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1","datePublished":"2019-02-26T23:00:00+00:00","dateModified":"2021-05-21T18:18:00+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/cdc5540c3b6edcacd8d760669e797005"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/chi-ha-detto-che-docker-serve-solo-in-produzione\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Chi ha detto che Docker serve solo in produzione?"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/cdc5540c3b6edcacd8d760669e797005","name":"Michele Aponte","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32138aff568f2063b34d27a23cef27e09f3159bfcadea5ea05599c499cf4342f?s=96&d=identicon&r=g","caption":"Michele Aponte"},"url":"https:\/\/blexin.com\/it\/author\/michele-aponteblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_likes_enabled":false,"jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7xB","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/ba762668-ed5b-4eed-be79-9f937226d50a.png?fit=1024%2C608&ssl=1","_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716248"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=28991"}],"version-history":[{"count":7,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28991\/revisions"}],"predecessor-version":[{"id":29013,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28991\/revisions\/29013"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/28992"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=28991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=28991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=28991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}