© Copyright 2026 Ferrantino Francesco

Un Dockerfile è un file di testo che definisce passo dopo passo come creare un’immagine Docker personalizzata, partendo da un’immagine già esistente.




Contiene una sequenza ordinata di istruzioni che descrivono in modo chiaro come deve essere costruita l’immagine permettendo di ottenere sempre lo stesso risultato in maniera ripetibile, coerente e automatizzabile.

In questo modo la creazione delle immagini non è manuale o improvvisata, ma documentata, tracciabile nel tempo e facilmente integrabile in processi di automazione.

Creiamo un esempio di un’immagine Docker che avvia un server web Nginx e pubblica una pagina HTML personalizzata.

frank@debian:~$ mkdir docker-web
frank@debian:~$ cd docker-web
Ora creiamo un file index.html che verrà servito da Nginx:
frank@debian:~/docker-web$ nano index.html
<h1>Ciao dal mio container Docker</h1>
<p>Questa pagina è servita da Nginx in un container</p>
Nella stessa cartella creiamo il file Dockerfile:
frank@debian:~/docker-web$ nano Dockerfile
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
In questo esempio:
  • FROM (punto di partenza): definisce l’immagine di base. Qui partiamo da nginx:alpine una versione leggera di Nginx.
  • COPY (inserimento file): copia file o directory dalla macchina locale dentro l’immagine. In questo caso copiamo la nostra pagina index.html nella directory pubblica di Nginx.
  • EXPOSE (rete): dichiara la porta usata dall’applicazione all’interno del container. Qui Nginx usa la porta 80.
  • CMD (avvio): definisce il comando predefinito eseguito all’avvio del container. Qui avviamo Nginx in foreground così il container resta attivo.
Quando si definisce l’avvio di un container spesso si usano CMD ed ENTRYPOINT:
  • CMD definisce il comando predefinito. È un comportamento di default: se l’utente avvia il container specificando un comando diverso quello di CMD viene sostituito.
  • ENTRYPOINT definisce il comando principale quello che identifica il container come applicazione. In questo caso, ciò che l’utente passa a docker run viene interpretato come argomento del comando non come sostituzione.
Ora costruiamo l’immagine Docker con docker build:
frank@debian:~/docker-web$ docker build -t myweb:1.0 .

Il punto finale indica la directory corrente: Docker leggerà il Dockerfile e i file presenti in quella cartella come index.html.

Avviamo il container e pubblichiamo la porta 80 del container sulla porta 8080 dell’host:
frank@debian:~/docker-web$ docker run -d -p 8080:80 --name web_test myweb:1.0
  • -d avvia il container in background
  • -p 8080:80 collega la porta 8080 dell’host alla porta 80 del container
  • --name assegna un nome leggibile al container
Da terminale eseguire:
frank@debian:~/docker-web$ curl http://localhost:8080
<h1>Ciao dal mio container Docker</h1>
<p>Questa pagina è servita da Nginx in un container</p>
Verificare che il container sia in esecuzione:
frank@debian:~/docker-web$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                     NAMES
59f3b13dfbdb   myweb:1.0   "/docker-entrypoint.…"   13 minutes ago   Up 13 minutes   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp   web_test
Vedrai il container web_test in stato Up e la mappatura porte 0.0.0.0:8080->80/tcp
Ferrantino Francesco

Ferrantino Francesco

Cookie Policy

Leggi  informativa Cookie Policy
Il "Sito" utilizza i Cookie per rendere i propri servizi semplici e efficienti per l’utenza che visiona le pagine di franksoft.it

Disclaimer

L'autore degli articoli non si assume nessuna responsabilità per eventuali danni ai vostri dispositivi. Tutto ciò che viene spiegato è puramente a scopo dimostrativo.
Il presente sito non costituisce testata giornalistica in quanto non ha carattere periodico ed è aggiornato secondo la mia disponibilità e la reperibilità dei materiali ivi contenuti. Pertanto, non può essere considerato in alcun modo un prodotto editoriale ai sensi della Legge n. 62 del 7/03/2001.

Licenza

Tutte le immagini presenti nel sito appartengono ai rispettivi titolari e sono utilizzate senza alcuno scopo di lucro. Ogni eventuale violazione del copyright non è intenzionale.
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 4.0 Internazionale.  Licenza Creative Commons