{"id":4019,"date":"2022-01-07T13:58:00","date_gmt":"2022-01-07T12:58:00","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=4019"},"modified":"2022-01-05T16:12:52","modified_gmt":"2022-01-05T15:12:52","slug":"deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/","title":{"rendered":"Deep dive in Docker: trucchi e suggerimenti per costruire immagini Docker ottimizzate per sicurezza e dimensioni."},"content":{"rendered":"\n

Una Breve Introduzione<\/h2>\n\n\n\n

Oggigiorno abbiamo sempre pi\u00f9 workload basati su Docker ed \u00e8 di grande importanza tenere le nostre immagini Docker sicure ed ottimizzate per il cloud. Abbiamo gi\u00e0 discusso su Docker nel nostro blog, potete approfondire l\u2019argomento con le origini di Docker<\/a> o con un caso d\u2019uso con WordPress<\/a>.<\/p>\n\n\n\n

Nei prossimi paragrafi vedremo alcuni suggerimenti e trucchi su come evitare le falle di sicurezza pi\u00f9 comuni e come ottimizzare le dimensioni delle nostre immagini Docker.<\/p>\n\n\n\n

Ma prima dobbiamo capire uno dei concetti chiave di Docker: il sistema di layering.<\/p>\n\n\n\n

Il Dockerfile \u00e8 il file principale che definisce il modo in cui un\u2019immagine Docker \u00e8 costruita. In esso viene definita l\u2019immagine di base da cui partire, il modo in cui l\u2019applicativo viene pacchettizzato e come viene eseguito.<\/p>\n\n\n\n

Quando avviamo il processo di build a partire da un Dockerfile, il motore di Docker crea una serie di layer, uno per ciascun comando nel Dockerfile. Ogni volta che eseguiamo un comando all\u2019interno del Dockerfile, un nuovo layer viene creato al di sopra del precedente. Il motore di Docker esegue i comandi in modo sequenziale e infine unisce tutti i layer per creare l\u2019immagine finale.<\/p>\n\n\n\n

Come posso ridurre le dimensioni?<\/h2>\n\n\n\n

Usa un\u2019immagine di base piccola. Alpine \u00e8 una buona scelta<\/strong><\/h3>\n\n\n\n

Generalmente, avere un\u2019immagine piccola velocizza la fase di build, deploy ed esecuzione. Per ottenere questo, una buona idea \u00e8 partire da un\u2019immagine di base che \u00e8 essa stessa piccola. Puoi usare `alpine:3.15` che \u00e8 di circa 5.6 MB invece di `ubuntu:20.04` che \u00e8 (al momento di scrittura di questo articolo) di 72 MB.<\/p>\n\n\n\n

Alpine<\/a> \u00e8 una distribuzione Linux costruita con musl libc e BusyBox che punta alla semplicit\u00e0, sicurezza e all\u2019efficienza delle risorse. Essa contiene soltanto i pacchetti assolutamente necessari perch\u00e9\u2026 se una cosa non c\u2019\u00e8, non pu\u00f2 rompersi<\/em>.<\/p>\n\n\n\n

Bisogna tenere in mente che ha anche alcuni svantaggi. Per esempio, visto che Alpine \u00e8 basata sulla libreria C musl, invece che sulla libreria pi\u00f9 diffusa GNU C Library, ci possono essere problemi con alcune dipendenze in C.<\/p>\n\n\n\n

Usa i Dockerfile multi-stage<\/strong><\/h3>\n\n\n\n

Oltre a usare Alpine come immagine di base, un altro metodo per ridurre le dimensioni delle immagini Docker \u00e8 l\u2019uso delle build multistage. Una build multistage consiste in un unico Dockerfile in cui definiamo pi\u00f9 istruzioni FROM, ed ognuna di esse \u00e8 uno stage.<\/p>\n\n\n\n

In ogni FROM possiamo partire da uno stage precedente per trarre vantaggio dagli artefatti di build in cache oppure possiamo partire da un\u2019immagine di base totalmente diversa e copiare solamente alcuni artefatti dallo stage precedente.<\/p>\n\n\n\n

Vediamo un veloce esempio:<\/p>\n\n\n\n

# Base image with dependencies\nFROM node:17.3.0-alpine3.12 AS base\nWORKDIR \/app\n# Copy package.json and package-lock.json\nCOPY package*.json .\/\n# Install dependencies\nRUN npm install\n \n \n# Build Stage\nFROM base AS build\nWORKDIR \/app\nCOPY . .\/\n# Build and bundle static files\nRUN npm run build\n \n \n# Release Stage\nFROM node:17.3.0-alpine3.12 AS release\nWORKDIR \/app\nCOPY --from=base \/app\/package.json .\/\n# Install app dependencies\nRUN npm install --only=production\nCOPY --from=build \/app\/dist\/ .\/\nCMD [ \"npm\", \"run\", \"start\" ]<\/code><\/pre>\n\n\n\n

In questo Dockerfile multistage abbiamo creato un\u2019immagine di base che ha tutte le dipendenze della nostra applicazione, abbiamo creato uno stage per fare la build dell\u2019applicazione e infine, per l\u2019immagine di runtime, abbiamo usato un\u2019immagine di base pulita, ci abbiamo installato le dipendenze di produzione e copiato gli artefatti necessari.<\/p>\n\n\n\n

Di default vengono costruiti tutti gli stage ma possiamo specificarne uno in particolare con il flag `–target <stage-name>`<\/p>\n\n\n\n

`docker build –target release –tag image .`<\/p>\n\n\n\n

Puoi fare riferimento alla documentazione<\/a> ufficiale per ulteriori dettagli.<\/p>\n\n\n\n

Sfrutta il caching<\/strong><\/h3>\n\n\n\n

Per trarre pieno vantaggio dal caching dei layer, scrivi il Dockerfile in modo tale che i comandi che non cambiano spesso vengano eseguiti prima degli altri. In questo modo i layer che vengono creati prima saranno tenuti in cache e riutilizzati. Sebbene questo non cambi la dimensione finale dell\u2019immagine, far\u00e0 in modo che le build siano pi\u00f9 veloci.<\/p>\n\n\n\n

Usa .dockerignore <\/strong><\/h3>\n\n\n\n

Aggiungi i file temporanei, gli artefatti di build intermedi, i file di sviluppo locale e le informazioni sensibili nel .dockerignore per escluderli. La prossima volta che farai partire una build sar\u00e0 pi\u00f9 veloce perch\u00e8 il `build context` di Docker sar\u00e0 pi\u00f9 piccolo.<\/p>\n\n\n\n

Comunque non dovresti avere informazioni sensibili nella tua repository \ud83d\ude42<\/p>\n\n\n\n

Tieni un occhio sui layer \u2013 Dive<\/h2>\n\n\n\n

Dive<\/a> \u00e8 uno strumento a linea di comando che ti permette di ispezionare il contenuto di ciascun layer in un\u2019immagine Docker. Pu\u00f2 essere molto utile vedere cosa \u00e8 cambiato ad ogni step nel Dockerfile, perch\u00e8 in questo modo puoi vedere se ci sono ridondanze o file non necessari nell\u2019immagine.<\/p>\n\n\n\n

Per vederlo in azione esegui `dive <image-name>`<\/p>\n\n\n\n

<\/p>\n\n\n\n

\"Dive<\/figure><\/div>\n\n\n\n

<\/p>\n\n\n\n

Le feature principali di Dive sono:<\/p>\n\n\n\n

Mostrare il contenuto di ciascun layer: <\/strong>Fornisce una vista ad albero di tutto il contenuto dell\u2019immagine in uno specifico layer.<\/p>\n\n\n\n

Filtra per file nuovi, modificati, rimossi:<\/strong> con i comodi shortcut puoi abilitare\/disabilitare la visualizzazione di specifici file.<\/p>\n\n\n\n

Stimare l\u2019efficienza dell\u2019immagine:<\/strong> Una feature sperimentale che ti mostra quanto spazio viene sprecato.<\/p>\n\n\n\n

Bonus: automa<\/strong>tizziamo!<\/h2>\n\n\n\n

Puoi mettere la variabile di ambiente `CI=true` per disabilitare la visualizzazione interattiva e integrare Dive con una pipeline CI\/CD.<\/p>\n\n\n\n

Puoi creare un file .dive-ci file per personalizzare  3 parametri per l\u2019accettazione dei test:<\/p>\n\n\n\n

`lowestEfficiency`, `highestWastedBytes` e `highestUserWastedPercent`.<\/p>\n\n\n\n

.dive-ci file:<\/p>\n\n\n\n

rules:\n # Lowest allowed efficiency percentage (value range between 0-1).\n lowestEfficiency: 0.95\n \n # If the amount of wasted space is at least X or larger than X, mark as failed.\n # Expressed in B, KB, MB, and GB.\n highestWastedBytes: 20MB\n \n # If the amount of wasted space makes up for X% or more of the image, mark as failed.\n # Note: the base image layer is NOT included in the total image size.\n # Expressed as a ratio between 0-1; fails if the threshold is met or crossed.\n highestUserWastedPercent: 0.10\n \n \n<\/code><\/pre>\n\n\n\n
\"Dive<\/figure><\/div>\n\n\n\n

<\/p>\n\n\n\n

Regole di base per la sicurezza<\/h2>\n\n\n\n


Una regola del pollice base \u00e8 partire dalla versione stabile pi\u00f9 recente<\/strong> dell\u2019immagine.<\/p>\n\n\n\n

In questo modo, sarai sicuro di avere le ultime patch di sicurezza per gli strumenti e le librerie native. La stessa regola \u00e8 applicabile anche alle dipendenze a livello di applicazione.<\/p>\n\n\n\n

Un’altra regola di base \u00e8 ridurre al minimo la superficie di attacco<\/strong> assicurandoti di avere esclusivamente il set minimo e strettamente necessario di strumenti e librerie per eseguire l\u2019applicazione. Per far ci\u00f2, puoi iniziare da un’immagine di base molto piccola (qualcosa come Alpine) e, quindi, installare le dipendenze applicative su di essa.<\/p>\n\n\n\n

Un’altra buona pratica consiste nel sfruttare gli strumenti di scansione delle vulnerabilit\u00e0<\/strong> per verificare la presenza di criticit\u00e0 note nelle immagini Docker. Per farlo AWS mette a disposizione il servizio Elastic Container Registry, il quale consente di scansionare le immagini senza costi aggiuntivi!<\/p>\n\n\n\n

AWS ECR Scan<\/h2>\n\n\n\n

Amazon’s Elastic Container Registry (ECR) \u00e8 un registro di container completamente gestito che, tra le numerose feature, offre la possibilit\u00e0 di identificare vulnerabilit\u00e0 attraverso la scansione delle immagini.<\/p>\n\n\n\n

Amazon ECR offre due opzioni di scansione<\/p>\n\n\n\n

Basic scanning<\/strong><\/h3>\n\n\n\n

Questa opzione, completamente gratuita, permette la scansione sia automatica, che manuale delle immagini basandosi sul database Common Vulnerabilities and Exposures (CVEs) del progetto open-source Clair<\/em>.<\/p>\n\n\n\n

Enhanced scanning<\/strong><\/h3>\n\n\n\n

Integrandosi con il servizio Amazon Inspector, Amazon ECR \u00e8 in grado di scansionare in modo automatico i repository, in modo che le immagini dei container vengano continuamente analizzate. In caso di nuove vulnerabilit\u00e0 rilevate, Amazon Inspector ci notificher\u00e0 attraverso il servizio Amazon EventBridge.<\/p>\n\n\n\n

\u00c8 anche possibile scansionare manualmente un\u2019immagine direttamente dalla console AWS, oppure eseguendo il seguente comando da CLI:<\/p>\n\n\n\n

aws ecr start-image-scan --repository-name nginx-test --image-id imageTag=base\n{\n\t\"registryId\": \"424242424242\",\n\t\"repositoryName\": \"nginx-test\",\n\t\"imageId\": {\n    \t\"imageDigest\": \"sha256:61191087790c31e43eb37caa10de1135b002f10c09fdda7fa8a5989db74033aa\",\n    \t\"imageTag\": \"base\"\n\t},\n\t\"imageScanStatus\": {\n    \t\"status\": \"IN_PROGRESS\"\n\t}\n}\n\n\nEseguiamo poi il seguente comando per verificare lo stato della scansione:\n\naws ecr describe-image-scan-findings --repository-name nginx-test --image-id imageTag=base\n{\n\t\"imageScanFindings\": {\n    \t\"findings\": [...],\n    \t\"imageScanCompletedAt\": \"2021-12-22T11:44:55+01:00\",\n    \t\"vulnerabilitySourceUpdatedAt\": \"2021-12-22T01:26:43+01:00\",\n    \t\"findingSeverityCounts\": {\n        \t\"HIGH\": 8,\n        \t\"MEDIUM\": 41,\n        \t\"LOW\": 23,\n        \t\"UNDEFINED\": 1,\n        \t\"INFORMATIONAL\": 67\n    \t}\n\t},\n\t\"registryId\": \"4242424242424242\",\n\t\"repositoryName\": \"nginx-test\",\n\t\"imageId\": {\n    \t\"imageDigest\": \"sha256:61191087790c31e43eb37caa10de1135b002f10c09fdda7fa8a5989db74033aa\",\n    \t\"imageTag\": \"base\"\n\t},\n\t\"imageScanStatus\": {\n    \t\"status\": \"COMPLETE\",\n    \t\"description\": \"The scan was completed successfully.\"\n\t}\n}\n<\/code><\/pre>\n\n\n\n

Scan on push<\/h2>\n\n\n\n

Puoi configurare una repository per eseguire la scansione delle immagini  al momento del push attivando la feature `ScanOnPush`. In alternativa puoi abilitare questa feature su tutti i repository attraverso questo settaggio sulla Console:<\/p>\n\n\n\n

 `Amazon ECR > Private registry > Scanning configuration > Basic scanning`<\/p>\n\n\n\n

Abilitando questa funzione si potr\u00e0 beneficiare anche dell\u2019Integrazione con Amazon EventBridge: dato che ogni scansione triggerer\u00e0 un evento, questo potr\u00e0 essere facilmente intercettato utilizzando EventBridge. Saremo cos\u00ec in grado di costruire un sistema di notifica event-driven in grado di avvisarci ogniqualvolta venga rilevata una criticit\u00e0 di sicurezza nelle immagini.<\/p>\n\n\n\n

In conclusione<\/h1>\n\n\n\n

In questo articolo abbiamo analizzato le fasi fondamentali del processo di build in Docker fornendo consigli e best practices per ottimizzare la creazione e il mantenimento delle immagini, con particolare attenzione a performance, costi e sicurezza.<\/p>\n\n\n\n

Per quanto riguarda la dimensione delle immagini e la durata del processo di build, abbiamo svelato alcuni trucchi e suggerimenti relativi ai Dockerfile. <\/p>\n\n\n\n

Abbiamo poi visto come utilizzare Dive per ispezionare i layer e come integrarlo in una pipeline. <\/p>\n\n\n\n

Infine, ci siamo focalizzati sul servizio Amazon ECR per automatizzare la scansione delle nostre immagini.<\/p>\n\n\n\n

Se siete ancora curiosi sull\u2019argomento e volete approfondire ulteriormente uno o pi\u00f9 punti trattati nell\u2019articolo, ecco alcuni link utili:<\/p>\n\n\n\n

Alpine Linux<\/a><\/p>\n\n\n\n

AWS ECR<\/a><\/p>\n\n\n\n

Docker Multi Stage Build<\/a><\/p>\n\n\n\n

Clair Project<\/a><\/p>\n\n\n\n

Dive<\/a><\/p>\n\n\n\n

Se invece \u201cvi siete gi\u00e0 sporcati le mani\u201d con Docker e volete condividere le vostre considerazioni, commentate o scriveteci! Saremo felici di discuterne con voi! \ud83d\ude09 <\/p>\n\n\n\n

A presto su Proud2beCloud con molti nuovi articoli per veri Cloud-addicted!<\/p>\n","protected":false},"excerpt":{"rendered":"

Una Breve Introduzione Oggigiorno abbiamo sempre pi\u00f9 workload basati su Docker ed \u00e8 di grande importanza tenere le nostre immagini […]<\/p>\n","protected":false},"author":17,"featured_media":4035,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[477],"tags":[553,375,373],"yoast_head":"\nDeep dive in Docker: trucchi e suggerimenti per costruire immagini Docker ottimizzate per sicurezza e dimensioni. - Proud2beCloud Blog<\/title>\n<meta name=\"description\" content=\"Trucchi e best practices da adottare per ottimizzare il processo di costruzione delle immagini in Docker, con focus alla sicurezza.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deep dive in Docker: immagini ottimizzate per sicurezza e dimensioni.\" \/>\n<meta property=\"og:description\" content=\"Trucchi e best practices da adottare per ottimizzare il processo di costruzione delle immagini in Docker, con focus alla sicurezza.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/\" \/>\n<meta property=\"og:site_name\" content=\"Proud2beCloud Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-07T12:58:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-05T15:12:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/01\/Copertina-blog-07-01-22_07-01-22-social-ita.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mehmed Dourmouch\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Deep dive in Docker: immagini ottimizzate per sicurezza e dimensioni.\" \/>\n<meta name=\"twitter:description\" content=\"Trucchi e best practices da adottare per ottimizzare il processo di costruzione delle immagini in Docker, con focus alla sicurezza.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/01\/Copertina-blog-07-01-22_07-01-22-social-ita.png\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mehmed Dourmouch\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/\",\"url\":\"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/\",\"name\":\"Deep dive in Docker: trucchi e suggerimenti per costruire immagini Docker ottimizzate per sicurezza e dimensioni. - Proud2beCloud Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\"},\"datePublished\":\"2022-01-07T12:58:00+00:00\",\"dateModified\":\"2022-01-05T15:12:52+00:00\",\"author\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/78fb370d0b81a13b4d125ff596518191\"},\"description\":\"Trucchi e best practices da adottare per ottimizzare il processo di costruzione delle immagini in Docker, con focus alla sicurezza.\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.besharp.it\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deep dive in Docker: trucchi e suggerimenti per costruire immagini Docker ottimizzate per sicurezza e dimensioni.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\",\"url\":\"https:\/\/blog.besharp.it\/it\/\",\"name\":\"Proud2beCloud Blog\",\"description\":\"il blog di beSharp\",\"alternateName\":\"Proud2beCloud Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.besharp.it\/it\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/78fb370d0b81a13b4d125ff596518191\",\"name\":\"Mehmed Dourmouch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c88fc04e52b5db309092da7fba855aee?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c88fc04e52b5db309092da7fba855aee?s=96&d=mm&r=g\",\"caption\":\"Mehmed Dourmouch\"},\"description\":\"DevOps Engineer. Very Dev, not so Ops. I like to break things and see what happens, I also automate everything. I often participate in cybersecurity CTFs and in my free time I produce cacophony with my guitar.\",\"url\":\"https:\/\/blog.besharp.it\/it\/author\/mehmed-dourmouch\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Deep dive in Docker: trucchi e suggerimenti per costruire immagini Docker ottimizzate per sicurezza e dimensioni. - Proud2beCloud Blog","description":"Trucchi e best practices da adottare per ottimizzare il processo di costruzione delle immagini in Docker, con focus alla sicurezza.","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:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/","og_locale":"it_IT","og_type":"article","og_title":"Deep dive in Docker: immagini ottimizzate per sicurezza e dimensioni.","og_description":"Trucchi e best practices da adottare per ottimizzare il processo di costruzione delle immagini in Docker, con focus alla sicurezza.","og_url":"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/","og_site_name":"Proud2beCloud Blog","article_published_time":"2022-01-07T12:58:00+00:00","article_modified_time":"2022-01-05T15:12:52+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/01\/Copertina-blog-07-01-22_07-01-22-social-ita.png","type":"image\/png"}],"author":"Mehmed Dourmouch","twitter_card":"summary_large_image","twitter_title":"Deep dive in Docker: immagini ottimizzate per sicurezza e dimensioni.","twitter_description":"Trucchi e best practices da adottare per ottimizzare il processo di costruzione delle immagini in Docker, con focus alla sicurezza.","twitter_image":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2022\/01\/Copertina-blog-07-01-22_07-01-22-social-ita.png","twitter_misc":{"Scritto da":"Mehmed Dourmouch","Tempo di lettura stimato":"9 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/","url":"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/","name":"Deep dive in Docker: trucchi e suggerimenti per costruire immagini Docker ottimizzate per sicurezza e dimensioni. - Proud2beCloud Blog","isPartOf":{"@id":"https:\/\/blog.besharp.it\/it\/#website"},"datePublished":"2022-01-07T12:58:00+00:00","dateModified":"2022-01-05T15:12:52+00:00","author":{"@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/78fb370d0b81a13b4d125ff596518191"},"description":"Trucchi e best practices da adottare per ottimizzare il processo di costruzione delle immagini in Docker, con focus alla sicurezza.","breadcrumb":{"@id":"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.besharp.it\/it\/deep-dive-in-docker-trucchi-e-suggerimenti-per-costruire-immagini-docker-ottimizzate-per-sicurezza-e-dimensioni\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.besharp.it\/it\/"},{"@type":"ListItem","position":2,"name":"Deep dive in Docker: trucchi e suggerimenti per costruire immagini Docker ottimizzate per sicurezza e dimensioni."}]},{"@type":"WebSite","@id":"https:\/\/blog.besharp.it\/it\/#website","url":"https:\/\/blog.besharp.it\/it\/","name":"Proud2beCloud Blog","description":"il blog di beSharp","alternateName":"Proud2beCloud Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.besharp.it\/it\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/78fb370d0b81a13b4d125ff596518191","name":"Mehmed Dourmouch","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c88fc04e52b5db309092da7fba855aee?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c88fc04e52b5db309092da7fba855aee?s=96&d=mm&r=g","caption":"Mehmed Dourmouch"},"description":"DevOps Engineer. Very Dev, not so Ops. I like to break things and see what happens, I also automate everything. I often participate in cybersecurity CTFs and in my free time I produce cacophony with my guitar.","url":"https:\/\/blog.besharp.it\/it\/author\/mehmed-dourmouch\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/4019"}],"collection":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/comments?post=4019"}],"version-history":[{"count":0,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/4019\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media\/4035"}],"wp:attachment":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media?parent=4019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/categories?post=4019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/tags?post=4019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}