{"id":7918,"date":"2026-02-19T23:34:53","date_gmt":"2026-02-19T23:34:53","guid":{"rendered":"\/it\/tutorial\/?p=7918"},"modified":"2026-02-19T23:38:37","modified_gmt":"2026-02-19T23:38:37","slug":"guida-docker","status":"publish","type":"post","link":"\/it\/tutorial\/guida-docker","title":{"rendered":"Tutorial Docker: guida completa all\u2019esecuzione dei container"},"content":{"rendered":"<p>Docker &egrave; una piattaforma open source progettata per semplificare lo sviluppo, la distribuzione e l&rsquo;esecuzione delle applicazioni. Semplifica la distribuzione del software grazie alla <strong>containerizzazione<\/strong>, una tecnologia che racchiude la tua applicazione e tutte le sue dipendenze in unit&agrave; isolate ed eseguibili chiamate <strong>container<\/strong>. In questo modo, il software funziona in modo coerente, indipendentemente dall&rsquo;ambiente in cui lo esegui.<\/p><p>Alla base, Docker ruota attorno ad alcuni concetti chiave: <strong>Docker Engine<\/strong>, <strong>Docker Hub<\/strong>, le <strong>immagini Docker<\/strong>, i <strong>container<\/strong>, i <strong>Dockerfile<\/strong> e <strong>Docker Compose<\/strong>. Comprendere questi componenti ti permette di creare, distribuire e gestire applicazioni containerizzate in modo efficace.<\/p><p>Puoi usare Docker tramite la riga di comando, ma la piattaforma offre anche una versione desktop con interfaccia grafica. Il processo di configurazione &egrave; diverso: puoi installare la versione desktop come una normale applicazione <strong>.dmg<\/strong> o <strong>.exe<\/strong>, mentre la CLI richiede l&rsquo;installazione tramite un gestore di pacchetti come <strong>APT<\/strong> o <strong>Homebrew<\/strong>.<\/p><p>Quando utilizzi l&rsquo;ecosistema Docker, possono verificarsi errori a diversi livelli, che riguardano l&rsquo;immagine Docker, il Dockerfile o il container stesso. Poich&eacute; questi problemi possono compromettere l&rsquo;intero sistema di containerizzazione, &egrave; importante conoscere gli errori pi&ugrave; comuni, le loro cause e le possibili soluzioni. Li analizzeremo pi&ugrave; avanti, dopo aver esaminato i concetti fondamentali di Docker.<\/p><h2 class=\"wp-block-heading\" id=\"h-what-is-containerization\">Che cos&rsquo;&egrave; la containerizzazione?<\/h2><p>La containerizzazione &egrave; una tecnologia di virtualizzazione a livello di sistema operativo che consente di eseguire le applicazioni in spazi utente isolati chiamati container.<\/p><div class=\"wp-block-image\">\n<figure data-wp-context='{\"imageId\":\"69dcf6c1bf554\"}' data-wp-interactive=\"core\/image\" class=\"aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"572\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2026\/02\/una-visualizzazione-di-come-funziona-un-container-rispetto-a-una-macchina-virtuale.png\/public\" alt=\"Una visualizzazione di come funzionano i container rispetto alle macchine virtuali tradizionali\" class=\"wp-image-7915\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2026\/02\/una-visualizzazione-di-come-funziona-un-container-rispetto-a-una-macchina-virtuale.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2026\/02\/una-visualizzazione-di-come-funziona-un-container-rispetto-a-una-macchina-virtuale.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2026\/02\/una-visualizzazione-di-come-funziona-un-container-rispetto-a-una-macchina-virtuale.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Ingrandisci\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Un container include un&rsquo;applicazione insieme a tutti i componenti necessari &mdash; codice, librerie di sistema, dipendenze e file di configurazione &mdash; creando un ambiente isolato e coerente.<\/p><p>A differenza delle macchine virtuali (VM), i container sono pi&ugrave; leggeri perch&eacute; condividono il kernel del sistema operativo dell&rsquo;host. Questa indipendenza dall&rsquo;infrastruttura sottostante permette alle applicazioni di funzionare in modo uniforme in ambienti diversi.<\/p><p>I vantaggi della containerizzazione includono:<\/p><ul class=\"wp-block-list\">\n<li><strong>Portabilit&agrave;.<\/strong> I container funzionano in modo coerente in qualsiasi ambiente, dalla tua macchina locale a un server remoto fornito da provider come Hostinger. In questo modo eviti i problemi di compatibilit&agrave; che possono verificarsi quando sposti un&rsquo;applicazione tra sistemi diversi durante la distribuzione o il lavoro in team.<\/li>\n\n\n\n<li><strong>Efficienza.<\/strong> Le VM richiedono un sistema operativo guest completo e un hypervisor, mentre i container no. Per questo rappresentano una soluzione di virtualizzazione pi&ugrave; leggera ed efficiente.<\/li>\n\n\n\n<li><strong>Isolamento.<\/strong> Ogni container esegue processi isolati, con il proprio software, la propria configurazione, il proprio stack di rete e le proprie variabili d&rsquo;ambiente. Questo aumenta la sicurezza e riduce il rischio di conflitti tra applicazioni.<\/li>\n<\/ul><h3 class=\"wp-block-heading\" id=\"h-why-should-i-use-docker\">Perch&eacute; usare Docker?<\/h3><p>Dovresti usare <a href=\"\/it\/tutorial\/cos-e-docker\">Docker<\/a> perch&eacute; offre un modo affidabile, efficiente e standardizzato per creare, condividere ed eseguire applicazioni. Ti aiuta a risolvere diversi problemi concreti legati allo sviluppo e alla distribuzione del software:<\/p><ul class=\"wp-block-list\">\n<li><strong>Il problema del &ldquo;ma sul mio computer funziona&rdquo;<\/strong>. Docker garantisce che un&rsquo;applicazione venga eseguita esattamente allo stesso modo per ogni sviluppatore e in ogni fase della produzione, eliminando i bug legati alle differenze di ambiente.<\/li>\n\n\n\n<li><strong>Sviluppo e distribuzione pi&ugrave; rapidi<\/strong>. Docker semplifica la creazione di ambienti riproducibili. Puoi integrare funzionalit&agrave; come mappe o gateway di pagamento senza doverle sviluppare da zero, risparmiando tempo.<\/li>\n\n\n\n<li><strong>Scalabilit&agrave; e portabilit&agrave;<\/strong>. Con strumenti come Docker Compose puoi definire in un unico file uno stack applicativo multi-container e condividerlo facilmente, mantenendo coerenza tra i team e scalando i servizi in base alle necessit&agrave;.<\/li>\n\n\n\n<li><strong>Efficienza delle risorse<\/strong>. Poich&eacute; i container sono leggeri e condividono il kernel del sistema operativo dell&rsquo;host, richiedono meno risorse rispetto alle macchine virtuali tradizionali.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-what-are-the-core-docker-concepts\">Quali sono i concetti fondamentali di Docker?<\/h2><p>Docker organizza la containerizzazione in un insieme di componenti fondamentali e interdipendenti. Questi elementi lavorano insieme come una piattaforma che gestisce l&rsquo;intero ciclo di vita di un&rsquo;applicazione containerizzata, dalla creazione del blueprint iniziale fino all&rsquo;esecuzione dell&rsquo;applicazione finale multi-servizio<\/p><h3 class=\"wp-block-heading\" id=\"h-docker-engine\"><strong>Docker Engine<\/strong> <\/h3><p>Docker Engine &egrave; la tecnologia open source alla base della creazione e della gestione di applicazioni containerizzate. Utilizza un&rsquo;architettura client-server per gestire tutti gli oggetti Docker, come immagini Docker, container e reti.<\/p><p>Le tre parti principali di Docker Engine sono:<\/p><ol class=\"wp-block-list\">\n<li><strong>Il server.<\/strong> Un processo daemon in esecuzione continua (dockerd) che gestisce tutte le attivit&agrave; principali, come la creazione, l&rsquo;avvio e l&rsquo;eliminazione dei container.<\/li>\n\n\n\n<li><strong>API.<\/strong> Interfacce che permettono ai programmi, inclusa la Docker CLI, di comunicare con il daemon e inviargli istruzioni.<\/li>\n\n\n\n<li><strong>Il client CLI.<\/strong> Lo strumento a riga di comando di <strong>Docker<\/strong>, che rappresenta il modo principale con cui interagisci con la piattaforma.<\/li>\n<\/ol><p>Per capire meglio questo concetto, puoi immaginare <strong>Docker Engine<\/strong> come lo chef, la cucina e il cameriere di un ristorante.<\/p><ul class=\"wp-block-list\">\n<li>Il <strong>server (dockerd)<\/strong> &egrave; lo <strong>chef<\/strong> che prepara il cibo, ovvero esegue il container nel contesto di Docker.<\/li>\n\n\n\n<li>Le <strong>API<\/strong> sono il <strong>menu e le comande<\/strong> che indicano allo chef cosa preparare.<\/li>\n\n\n\n<li>La <strong>Docker CLI<\/strong> &egrave; il <strong>cameriere<\/strong> che prende i tuoi ordini sotto forma di comandi e li trasmette alla cucina.<\/li>\n<\/ul><p>Per verificare se Docker Engine &egrave; in esecuzione e correttamente connesso al client, esegui un comando per controllare se risponde alla tua richiesta. Ad esempio:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker ps<\/pre><p>Questo comando chiede al <strong>daemon di Docker<\/strong> di elencare tutti i <strong>container attualmente in esecuzione<\/strong>. Se Docker Engine funziona correttamente, vedrai un elenco dei container attivi.<\/p><h3 class=\"wp-block-heading\" id=\"h-docker-hub\">Docker Hub<\/h3><p><strong>Docker Hub<\/strong> &egrave; il registro pubblico predefinito di Docker, ovvero un servizio di archiviazione e distribuzione delle immagini Docker. Ospita immagini ufficiali di software popolari come <strong>nginx<\/strong>, <strong>node<\/strong> e <strong>python<\/strong> e ti permette di creare repository privati per le tue immagini personalizzate.<\/p><p>Quando crei un container, devi utilizzare diversi pacchetti software basati sulle immagini. Docker Hub semplifica questo processo perch&eacute; ti consente di scaricare immagini Docker da un repository centralizzato.<\/p><p>Docker Hub utilizza i <strong>tag<\/strong> per etichettare e identificare le immagini. I tag indicano una versione specifica del pacchetto software, ad esempio <strong>latest<\/strong>. In questo modo mantieni coerenza e compatibilit&agrave; dei container tra ambienti diversi.<\/p><p>Puoi immaginare Docker Hub come una <strong>biblioteca di ricette condivisa dalla community<\/strong>. Contiene ricette gi&agrave; pronte per piatti comuni che puoi scaricare e usare per preparare un pasto. Puoi anche caricare le tue ricette, sia per condividerle sia per conservarle come backup privati.<\/p><p>Puoi interagire con Docker Hub usando la Docker CLI. Per esempio, per scaricare un&rsquo;immagine dal registro esegui:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker pull &lt;name&gt;:&lt;tag&gt;<\/pre><p>Ad esempio, per scaricare l&rsquo;ultima immagine ufficiale di Ubuntu:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker pull ubuntu:latest<\/pre><h3 class=\"wp-block-heading\" id=\"h-docker-images\">Immagini Docker<\/h3><p>Un&rsquo;immagine Docker &egrave; un modello in sola lettura che contiene tutte le istruzioni e i file necessari per creare un container Docker. Include il codice dell&rsquo;applicazione, i file di configurazione, le librerie di sistema e i file del sistema operativo di base.<\/p><p>Le immagini Docker vengono create a partire da un Dockerfile, in cui ogni istruzione genera un livello distinto e immutabile che definisce cosa l&rsquo;immagine deve contenere o fare.<\/p><p>In altre parole, un&rsquo;immagine &egrave; il progetto di una macchina. Contiene un insieme di istruzioni che descrivono esattamente cosa deve includere il prodotto finale, ma non pu&ograve; essere modificata una volta creata. Quando segui questo blueprint, ottieni un container Docker.<\/p><p>Per elencare le immagini scaricate in locale, usa:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker images<\/pre><p>Il comando seguente crea un&rsquo;immagine nella directory corrente assegnandole un nome e un tag specifici. Se l&rsquo;immagine di base non &egrave; gi&agrave; presente in locale, Docker la scaricher&agrave; automaticamente da Docker Hub:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker build -t your-image-name:latest .<\/pre><p>Una buona pratica quando lavori con le immagini Docker &egrave; scegliere un&rsquo;<a href=\"https:\/\/docs.docker.com\/build\/building\/base-images\/\" target=\"_blank\" rel=\"noopener\">immagine di base<\/a> minimale, cos&igrave; riduci le dimensioni complessive e limiti la superficie di attacco potenzialmente introdotta da pacchetti o componenti non necessari.<\/p><h3 class=\"wp-block-heading\" id=\"h-docker-containers\">Container Docker<\/h3><p>Un container &egrave; un&rsquo;istanza eseguibile di un&rsquo;immagine Docker. &Egrave; lo spazio isolato in cui viene eseguita la tua applicazione, insieme alla configurazione, alle dipendenze e ai pacchetti software necessari.<\/p><p>Quando crei un container Docker, viene aggiunto un livello scrivibile sopra i livelli in sola lettura dell&rsquo;immagine Docker, cos&igrave; puoi modificare i file nel filesystem locale del container.<\/p><p>I container sono progettati per essere effimeri o stateless, il che significa che puoi arrestarli, eliminarli, ricostruirli e sostituirli con una configurazione minima. Un singolo container si gestisce con la Docker CLI, mentre pi&ugrave; container si amministrano usando <strong>Docker Compose<\/strong> o uno strumento di orchestrazione come Kubernetes.<\/p><p>Riprendendo la stessa analogia, un container &egrave; la macchina effettivamente in esecuzione, costruita a partire dal progetto, cio&egrave; dall&rsquo;immagine. Quando crei un container Docker, assembli e avvii quella macchina per eseguire i processi definiti nell&rsquo;immagine Docker.<\/p><p>Per creare un container Docker ed eseguire un comando al suo interno, usa il comando run:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -it ubuntu \/bin\/bash<\/pre><p>Questo comando esegue l&rsquo;immagine <strong>Ubuntu<\/strong>, avvia un container interattivo ed esegue la shell <strong>\/bin\/bash<\/strong>.<\/p><h3 class=\"wp-block-heading\" id=\"h-dockerfiles\">Dockerfile<\/h3><p>Un <strong>Dockerfile<\/strong> &egrave; un file di testo semplice che contiene una sequenza di istruzioni passo per passo per creare un&rsquo;immagine Docker. Definisce tutto, dal sistema operativo di base alle variabili d&rsquo;ambiente fino al codice dell&rsquo;applicazione.<\/p><figure data-wp-context='{\"imageId\":\"69dcf6c1c1afb\"}' data-wp-interactive=\"core\/image\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"445\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2026\/02\/un-flusso-di-creazione-di-un-container-da-un-dockerfile-2.png\/public\" alt=\"Un flusso che mostra il processo di build di un container Docker a partire da un Dockerfile\" class=\"wp-image-7917\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2026\/02\/un-flusso-di-creazione-di-un-container-da-un-dockerfile-2.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2026\/02\/un-flusso-di-creazione-di-un-container-da-un-dockerfile-2.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2026\/02\/un-flusso-di-creazione-di-un-container-da-un-dockerfile-2.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Ingrandisci\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><p>Ecco alcune delle istruzioni pi&ugrave; comuni in un Dockerfile e il loro scopo:<\/p><ul class=\"wp-block-list\">\n<li><strong>FROM<\/strong>. Specifica l&rsquo;immagine di base per un nuovo stage di build.<\/li>\n\n\n\n<li><strong>RUN<\/strong>. Esegue comandi durante il processo di build dell&rsquo;immagine.<\/li>\n\n\n\n<li><strong>COPY<\/strong> o <strong>ADD<\/strong>. Copia i file dal contesto di build all&rsquo;interno dell&rsquo;immagine.<\/li>\n\n\n\n<li><strong>CMD<\/strong> o <strong>ENTRYPOINT<\/strong>. Definisce il comando eseguito all&rsquo;avvio del container.<\/li>\n\n\n\n<li><strong>ENV<\/strong>. Imposta variabili d&rsquo;ambiente disponibili durante la build e in fase di esecuzione.<\/li>\n\n\n\n<li><strong>WORKDIR<\/strong>. Imposta la directory di lavoro per le istruzioni RUN, CMD, ENTRYPOINT, COPY e ADD successive.<\/li>\n<\/ul><p>Alcune istruzioni del Dockerfile creano un <strong>layer<\/strong>, ovvero un passaggio nel processo di build dell&rsquo;immagine. Le istruzioni che impostano configurazioni o metadati, come <strong>WORKDIR<\/strong>, invece non creano un nuovo layer.<\/p><p>Ecco un esempio di Dockerfile:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">FROM python:3.9-slim\nWORKDIR \/app\nCOPY requirements.txt .\nRUN pip install -r requirements.txt\nCOPY . .\nCMD [\"python\", \"app.py\"]<\/pre><h3 class=\"wp-block-heading\" id=\"h-docker-compose\">Docker Compose<\/h3><p><strong>Docker Compose<\/strong> &egrave; uno strumento che semplifica la definizione e la gestione di <strong>applicazioni multi-container<\/strong> utilizzando un unico file di configurazione, in genere chiamato <strong>docker-compose.yml<\/strong>.<\/p><p>All&rsquo;interno del file di configurazione puoi definire tutti i container, le reti e i volumi necessari per creare uno stack applicativo complesso. Successivamente, puoi avviare e gestire tutti i container, chiamati servizi nel contesto di Docker Compose, con un unico comando.<\/p><p>Senza Docker Compose dovresti configurare manualmente ogni container e gestirli singolarmente tramite la Docker CLI. Se la tua applicazione include pi&ugrave; servizi interconnessi, questo processo diventa complesso e richiede molto tempo.<\/p><p>Se un container &egrave; un singolo elettrodomestico, Docker Compose &egrave; lo schema elettrico di un&rsquo;intera cucina. Definisce come forno, frigorifero e tostapane sono collegati e avviati insieme tramite un unico interruttore per svolgere le rispettive funzioni.<\/p><p>Ecco un esempio di file Docker Compose:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">services:\n  web:\n    build: .\/web  # Crea l&rsquo;immagine dal Dockerfile nella directory .\/web\n    ports:\n      - \"8000:8000\"  # Mappa la porta 8000 dell&rsquo;host alla porta 8000 del container\n    depends_on:\n      - db     # Attende l&rsquo;avvio del servizio db\n      - redis  # Attende l&rsquo;avvio del servizio redis\n\n  db:\n    image: postgres:15  # Usa l&rsquo;immagine ufficiale PostgreSQL 15\n    environment:\n      POSTGRES_USER: myuser       # Imposta il nome utente del database\n      POSTGRES_PASSWORD: mypassword  # Imposta la password del database\n      POSTGRES_DB: mydb           # Imposta il nome iniziale del database\n    volumes:\n      - db-data:\/var\/lib\/postgresql\/data  # Mantiene persistenti i dati del database\n\n  redis:\n    image: redis:alpine  # Usa un&rsquo;immagine Redis leggera per la cache\n\nvolumes:\n  db-data:  # Definisce un volume con nome per archiviare i dati del database<\/pre><p>Per creare e avviare in background tutti i servizi definiti nel file <strong>docker-compose.yml<\/strong>, esegui il comando con il flag <strong>-d<\/strong> (detached):<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose up -d<\/pre><h2 class=\"wp-block-heading\" id=\"h-how-to-install-docker\">Metodi per installare Docker<\/h2><p>Il processo di installazione di Docker varia in base alla versione che scegli. Se utilizzi Docker Desktop, puoi scaricare il pacchetto di installazione dalla pagina ufficiale e installarlo come qualsiasi altra applicazione.<\/p><p>In alternativa, puoi <a href=\"\/it\/tutorial\/come-installare-docker-ubuntu\">installare la Docker CLI<\/a> eseguendo i comandi tramite il gestore di pacchetti del tuo sistema operativo, come APT su Ubuntu o Homebrew su macOS. Consulta la documentazione ufficiale per conoscere i comandi specifici per <a href=\"https:\/\/docs.docker.com\/engine\/install\/\" target=\"_blank\" rel=\"noopener\">configurare Docker<\/a> sul tuo sistema.<\/p><p>Tieni presente che la Docker CLI non include alcune funzionalit&agrave;, come Docker Compose, quindi devi installarle separatamente. Se utilizzi la soluzione di <a href=\"\/it\/vps\/docker\">hosting Docker<\/a> di Hostinger, non &egrave; necessario configurarlo a parte, perch&eacute; la funzionalit&agrave; integrata Docker Manager include il supporto a Compose.<\/p><figure class=\"wp-block-image size-large\"><a href=\"\/it\/vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"2048\" height=\"600\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2024\/02\/IT-VPS-hosting_in-text-banner.png\/public\" alt=\"\" class=\"wp-image-1333\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2024\/02\/IT-VPS-hosting_in-text-banner.png\/w=2048,fit=scale-down 2048w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2024\/02\/IT-VPS-hosting_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2024\/02\/IT-VPS-hosting_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2024\/02\/IT-VPS-hosting_in-text-banner.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/27\/2024\/02\/IT-VPS-hosting_in-text-banner.png\/w=1536,fit=scale-down 1536w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/a><\/figure><h3 class=\"wp-block-heading\" id=\"h-understanding-basic-docker-commands\">Comprendere i comandi Docker di base<\/h3><p>Usa la Docker CLI per interagire con Docker Engine e gestire i container. Ecco alcuni dei <strong>comandi Docker<\/strong> pi&ugrave; importanti per le attivit&agrave; pi&ugrave; comuni:<\/p><ul class=\"wp-block-list\">\n<li><strong>docker ps -a. <\/strong>Elenca <strong>tutti<\/strong> i container, inclusi quelli arrestati.<\/li>\n\n\n\n<li><strong>docker pull &lt;name&gt;:&lt;tag&gt;. <\/strong>Scarica un&rsquo;immagine dal registro sul tuo computer locale.<\/li>\n\n\n\n<li><strong>docker rmi &lt;image&gt;<\/strong>. Elimina un&rsquo;immagine locale.<\/li>\n\n\n\n<li><strong>docker stop &lt;container&gt;. <\/strong>Arresta in modo corretto un container in esecuzione.<\/li>\n\n\n\n<li><strong>docker rm &lt;container&gt;. <\/strong>Elimina un container.<\/li>\n<\/ul><p>Per un elenco completo dei comandi pi&ugrave; utilizzati per immagini, container, volumi e altre risorse, consulta la nostra cheat sheet su Docker.<\/p><h2 class=\"wp-block-heading\" id=\"h-how-to-manage-docker-volumes\">Come gestire i volumi Docker<\/h2><p>I volumi sono il meccanismo principale per garantire la persistenza dei dati in Docker, assicurando che rimangano disponibili anche dopo la rimozione di un container.<\/p><p>Questo aspetto &egrave; fondamentale perch&eacute;, durante il ciclo di vita dei container, potresti doverli rimuovere per aggiornamenti o manutenzione. Se il container esegue applicazioni come un database, dove l&rsquo;integrit&agrave; dei dati &egrave; essenziale, configurare correttamente i volumi &egrave; indispensabile.<\/p><p>Docker offre tre tipi principali di archiviazione:<\/p><ul class=\"wp-block-list\">\n<li><strong>Volumi.<\/strong> Conservano i dati persistenti dei container nell&rsquo;area di archiviazione di Docker, che di solito si trova in <strong>\/var\/lib\/docker\/volumes\/<\/strong> sul sistema host.<\/li>\n\n\n\n<li><strong>Bind mount<\/strong>. Mappano un file o una directory dalla macchina host direttamente nel container.<\/li>\n\n\n\n<li><strong>Mount tmpfs<\/strong>. Memorizzano i dati nella memoria dell&rsquo;host; i dati vengono persi quando il container si arresta.<\/li>\n<\/ul><p>Ecco i passaggi per creare e gestire un volume per i dati persistenti:<\/p><ol class=\"wp-block-list\">\n<li>Crea un volume con nome usando il comando seguente. Ad esempio, questo crea un volume chiamato <strong>my-database-data<\/strong>:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker volume create my-database-data<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Avvia il container del database usando il flag <strong>-v<\/strong> per collegare il volume con nome alla directory interna dei dati del container:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d \\\n  --name my-database \\\n  -e MYSQL_ROOT_PASSWORD=securepassword \\\n  -v my-database-data:\/var\/lib\/mysql \\\n  mysql:latest<\/pre><ol start=\"3\" class=\"wp-block-list\">\n<li>Ispeziona i dettagli e la posizione del volume sull&rsquo;host eseguendo:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker volume inspect my-database-data<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li>Per rimuovere i volumi inutilizzati che non sono associati ad alcun container e liberare spazio su disco, usa:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker volume prune -a<\/pre><p>In alternativa ai comandi, puoi dichiarare e montare un volume direttamente nel file YAML di Docker Compose. In questo modo puoi tenere traccia pi&ugrave; facilmente dei volumi utilizzati da ciascun container, soprattutto quando gestisci pi&ugrave; servizi.<\/p><p>Ad esempio, la configurazione YAML seguente riproduce i passaggi precedenti per creare un volume e montarlo nel container:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">services:\n\n  my-database:\n\n    image: mysql:latest\n\n    container_name: my-database\n\n    environment:\n      MYSQL_ROOT_PASSWORD: securepassword\n\n    volumes:\n      - my-database-data:\/var\/lib\/mysql\n\nvolumes:\n  my-database-data:<\/pre><h2 class=\"wp-block-heading\" id=\"h-how-to-create-a-docker-network\">Crea una rete Docker<\/h2><p>Le reti Docker mantengono l&rsquo;isolamento tra i container e consentono la comunicazione con altri container e sistemi esterni. Per impostazione predefinita, i container sono collegati a una <strong>rete bridge<\/strong>. Per configurare la comunicazione in un&rsquo;applicazione multi-servizio, crea una rete bridge definita dall&rsquo;utente.<\/p><p>Docker collega automaticamente un container alla <strong>rete bridge predefinita<\/strong>, che gli permette di comunicare con l&rsquo;host. Tuttavia, questa rete non &egrave; adatta a configurazioni multi-container, perch&eacute; offre funzionalit&agrave; limitate per la comunicazione tra servizi.<\/p><p>Per le applicazioni multi-servizio, la best practice &egrave; creare una rete bridge definita dall&rsquo;utente. In questo modo i container possono comunicare tra loro usando i nomi dei servizi. Questo semplifica la scoperta dei servizi, migliora il controllo sulle interazioni tra container e riduce le interferenze tra servizi.<\/p><p>Puoi collegare un container a una rete bridge definita dall&rsquo;utente aggiungendo la direttiva <strong>networks<\/strong> alla configurazione del servizio nel file YAML di Docker Compose. Ecco un esempio:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">services:\n\n  my-database:\n\n    image: mysql:latest\n\n    container_name: my-database\n\n    environment:\n      MYSQL_ROOT_PASSWORD: securepassword\n\n    volumes:\n      - my-database-data:\/var\/lib\/mysql\n\n    networks:\n      - my-app-network # Crea una rete<\/pre><p>In alternativa, puoi creare una rete bridge definita dall&rsquo;utente con il comando seguente, dove <strong>my-app-network<\/strong> &egrave; il nome della rete:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker network create my-app-network<\/pre><p>Successivamente, avvia il container usando la Docker CLI con il flag <strong>&ndash;name<\/strong> per assegnare un nome al servizio e <strong>&ndash;network<\/strong> per specificare la rete a cui collegarlo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d \\\n  --name my-database \\\n  --network my-app-network \\\n  -e MYSQL_ROOT_PASSWORD=securepassword \\\n  -v my-database-data:\/var\/lib\/mysql \\\n  mysql:latest<\/pre><p>Se vuoi avviare e collegare un altro container alla stessa rete, ripeti il comando aggiornando le informazioni del servizio. Nell&rsquo;esempio seguente aggiungiamo il flag <strong>-p<\/strong> per pubblicare la porta interna <strong>80<\/strong> del container sulla <strong>porta<\/strong> <strong>8080<\/strong> dell&rsquo;host, cos&igrave; da renderla accessibile dall&rsquo;esterno:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d \\\n  --name my-webapp \\\n  --network my-app-network \\\n  -p 8080:80 \\\n  my-web-app-image:latest<\/pre><h2 class=\"wp-block-heading\" id=\"h-troubleshooting-common-docker-issues\">Risoluzione dei problemi comuni di Docker<\/h2><p>Quando lavori con Docker, i problemi pi&ugrave; comuni riguardano il sistema a livelli, incluse immagini Docker, container, volumi e reti. Di seguito analizziamo le criticit&agrave; pi&ugrave; frequenti e le relative soluzioni.<\/p><h3 class=\"wp-block-heading\" id=\"h-container-exits-immediately\"><strong>Il container si arresta immediatamente<\/strong><\/h3><p>Un container pu&ograve; arrestarsi subito dopo l&rsquo;avvio perch&eacute; il processo principale, definito da <strong>CMD<\/strong> o <strong>ENTRYPOINT<\/strong> nel Dockerfile, termina l&rsquo;esecuzione o va in crash. Una causa comune &egrave; il tentativo di eseguire un servizio in background senza usare la modalit&agrave; detached.<\/p><p>Ecco alcune soluzioni possibili:<\/p><ul class=\"wp-block-list\">\n<li><strong>Controlla i log<\/strong>. Usa <strong><strong>docker logs &lt;container_name&gt;<\/strong><\/strong> per visualizzare lo <strong>stdout<\/strong> e lo <strong>stderr<\/strong> dell&rsquo;applicazione e individuare la causa dell&rsquo;errore.<\/li>\n\n\n\n<li><strong>Verifica le direttive del Dockerfile<\/strong>. Assicurati che il container esegua un processo a lunga durata controllando che nel Dockerfile sia presente <strong>CMD<\/strong> o <strong>ENTRYPOINT<\/strong>. Ad esempio, un server web deve rimanere attivo per gestire le richieste.<\/li>\n\n\n\n<li><strong>Esegui in modalit&agrave; detached<\/strong>. Se l&rsquo;applicazione &egrave; un servizio a esecuzione prolungata e vuoi eseguirlo in background, usa il flag <strong>-d<\/strong> o <strong>&ndash;detach<\/strong> quando lanci <strong>docker run<\/strong> o <strong>docker compose run<\/strong>.<\/li>\n<\/ul><h3 class=\"wp-block-heading\" id=\"h-image-layer-caching-issues\">Problemi di caching dei layer dell&rsquo;immagine<\/h3><p>Se le modifiche al Dockerfile, come l&rsquo;aggiornamento della versione di un pacchetto, non hanno effetto, potresti avere un problema con la cache dei layer di Docker. Questo meccanismo riutilizza i layer creati in precedenza per velocizzare la build dell&rsquo;immagine, invece di ricostruirli da zero.<\/p><p>Sebbene migliori le prestazioni, pu&ograve; causare problemi quando modifichi i layer iniziali del Dockerfile, perch&eacute; le istruzioni successive potrebbero non essere aggiornate correttamente.<\/p><p>La soluzione pi&ugrave; semplice &egrave; forzare una ricostruzione completa ignorando la cache. Puoi farlo aggiungendo l&rsquo;opzione <strong>&ndash;no-cache<\/strong> durante la build, ad esempio:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker build --no-cache -t my-app:latest .<\/pre><p>Quando installi pacchetti in un Dockerfile, includi esplicitamente un comando che impedisca al gestore dei pacchetti di riutilizzare layer obsoleti con elenchi di pacchetti non aggiornati. Nelle distribuzioni basate su Debian, puoi farlo combinando <strong>apt-get update<\/strong> e <strong>apt-get install -y &ndash;no-install-recommends<\/strong> nello stesso comando <strong>RUN<\/strong>, ad esempio:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">RUN apt-get update &amp;&amp; apt-get install -y --no-install-recommends<\/pre><h3 class=\"wp-block-heading\" id=\"h-registry-authentication-failure\">Errore di autenticazione del registro<\/h3><p>Se ricevi un errore come &ldquo;<strong>denied: requested access to the resource is denied<\/strong>&rdquo; quando esegui il push di un&rsquo;immagine su un registry, ad esempio Docker Hub, significa che la <strong>Docker CLI<\/strong> non &egrave; autenticata con il server del registry.<\/p><p>Per risolvere il problema, accedi al registro e autentica il tuo account seguendo questi passaggi:<\/p><ol class=\"wp-block-list\">\n<li>Accedi al registro con il comando seguente, sostituendo <strong>my-registry.example.com<\/strong> con l&rsquo;indirizzo effettivo del registry. Se vuoi pubblicare un&rsquo;immagine su Docker Hub, puoi omettere l&rsquo;indirizzo:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker login my-registry.example.com<\/pre><ol start=\"2\" class=\"wp-block-list\">\n<li>Inserisci il nome utente e la password quando richiesto.<\/li>\n\n\n\n<li>Assegna il tag corretto all&rsquo;immagine, includendo l&rsquo;host del registry, il repository e il tag, prima di eseguire il push:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker tag my-local-image:latest my-registry.example.com\/my-repo\/my-local-image:latest<\/pre><ol start=\"4\" class=\"wp-block-list\">\n<li>Esegui il push dell&rsquo;immagine sul registry con il comando:<\/li>\n<\/ol><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker push my-registry.example.com\/my-repo\/my-local-image:latest<\/pre><h2 class=\"wp-block-heading\" id=\"h-what-are-the-next-steps-to-master-docker\">Quali sono i prossimi passi per padroneggiare Docker?<\/h2><p>Per padroneggiare Docker e usarlo in scenari reali di produzione, devi andare oltre l&rsquo;uso di un singolo container e dei comandi di base. I passaggi successivi includono l&rsquo;apprendimento di tecniche avanzate per distribuire e gestire applicazioni complesse ad alta disponibilit&agrave;.<\/p><p>Oltre a Docker Compose, &egrave; importante imparare strumenti di orchestrazione avanzati come <strong>Docker Swarm<\/strong> o <strong>Kubernetes<\/strong> per gestire e scalare pi&ugrave; container su un cluster di macchine.<\/p><p>Approfondisci anche i driver di rete, come l&rsquo;<strong>Overlay Network Driver<\/strong> utilizzato nella modalit&agrave; Swarm di Docker per collegare pi&ugrave; host all&rsquo;interno di un cluster. Collegare pi&ugrave; macchine usando la rete predefinita di Docker richiede una configurazione manuale e complessa, mentre le reti overlay semplificano e automatizzano la comunicazione tra host in modo scalabile e affidabile.<\/p><p>Infine, esplora i principali casi d&rsquo;uso di Docker per comprendere meglio come utilizzare questo strumento di containerizzazione nelle diverse fasi di sviluppo e distribuzione delle applicazioni.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker &egrave; una piattaforma open source progettata per semplificare lo sviluppo, la distribuzione e l&rsquo;esecuzione delle applicazioni. Semplifica la distribuzione del software grazie alla containerizzazione, una tecnologia che racchiude la tua applicazione e tutte le sue dipendenze in unit&agrave; isolate ed eseguibili chiamate container. In questo modo, il software funziona in modo coerente, indipendentemente dall&rsquo;ambiente [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/it\/tutorial\/guida-docker\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":190,"featured_media":7913,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Guida Docker completa per principianti","rank_math_description":"Docker \u00e8 una piattaforma per creare ed eseguire applicazioni con i container. La guida spiega funzionamento e utilizzo pratico.","rank_math_focus_keyword":"guida docker","footnotes":""},"categories":[17],"tags":[],"class_list":["post-7918","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps"],"hreflangs":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/posts\/7918","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/users\/190"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/comments?post=7918"}],"version-history":[{"count":15,"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/posts\/7918\/revisions"}],"predecessor-version":[{"id":8051,"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/posts\/7918\/revisions\/8051"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/media\/7913"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/media?parent=7918"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/categories?post=7918"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/it\/tutorial\/wp-json\/wp\/v2\/tags?post=7918"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}