Per vedere tutti gli aspetti che secondo me sono essenziali, ho scelto di istanziare un container a partire dall’immagine di Nginx.

Per chi non lo conoscesse, Nginx (pronunciato engine-x) è un progetto open source che implementa un reverse proxy per i protocolli HTTP, HTTPS, SMTP, POP3 e IMAP, un load balancer, cache HTTP e un web server.

Il nostro obiettivo è quello di mostrare la pagina di default di Nginx servendola da un container Docker.

Per questo esercizio io sto usando la versione: 1.19.5-alpine.

La documentazione che viene messa a disposizione nella pagina del docker hub spiega svariati aspetti dell’utilizzo di tale immagine, ma per non fare confusione ne usiamo solo alcune.

Lanciare il container

Per lanciare il primo container con Nginx eseguiamo questo comando:

docker container run -it --rm -d -p 8080:80 --name web nginx:1.19.5-alpine

con questo comando, stiamo dicendo diverse cose:

  • docker container run: comando per lanciare un nuovo container
    • run crea sempre un nuovo container, tuttavia è possibile utilizzare le funzioni start e unpause come abbiamo visto qui.
  • it: combinazione di -i e -t
    • -i: il container viene eseguito in modo interattivo ovvero mantiene lo standard input attivo, anche se il container viene eseguito in background
    • -t: è possibile interagire con il container poiché viene allocata una (pseudo-)interfaccia tty
  • –rm: il container verrà cancellato automaticamente una volta che esso avrà terminato l’esecuzione
  • -d: una volta istanziato il container, l’esecuzione continuerà in background rilasciando quindi il terminale
  • -p 8080:80: la porta 80 del container verrà dirottata nella porta 8080 dell’host
  • –name web: al container sarà associato il nome “web”
  • nginx:1.19.5-alpine: tag dell’immagine da cui istanziamo il container.
    • se, come in questo caso, non specifichiamo un registry prima del nome, l’immagine verrà cercata prima tra quelle in locale e poi nel docker hub (che è il registry di default)

Dopo aver eseguito questo comando, possiamo vedere la pagina di default di Nginx all’indirizzo http://0.0.0.0:8080.

Aggiungiamo un volume

Ora possiamo modificare il comportamento mettendo una nostra pagina al posto di quella di default.

Senza addentrarci troppo nelle logiche di Nginx, per adesso basta tenere a mente che i file devono essere inseriti nella cartella raggiungibile a questo percorso: /usr/share/nginx/html.

A questo punto, basta creare un file index.html e provare ad iniettarlo in quella posizione!
Io ho creato questo file index.html e lo ho salvato nella cartella “contenuto-mio-sito” al percorso: ~/contenuto-mio-sito .

<!DOCTYPE html>
<html>
<body>
<h1>La mia pagina</h1>
<p>Esempio da DockerTutorial.it</p>
</body>
</html>

Ora dobbiamo prima fermare il container creato in precedenza con

docker container stop web

Creare un Dockerfile con il seguente contenuto nella cartella in cui abbiamo creato il file index.html

FROM nginx:1.19.5-alpine
COPY ./index.html /usr/share/nginx/html/index.html

fare la build e poi

docker image build -t esempio-nginx:0.0.1 .

e poi istanziare il nuovo container con il bind dei file.

docker container run -it --rm -d -p 8080:80 --name web -v ~/contenuto-mio-sito:/usr/share/nginx/html esempio-nginx:0.0.1

visitando la pagina http://0.0.0.0:8080 ora vedremo il la nostra pagina html.

Aggiungiamo le variabili d’ambiente

Per provare ad utilizzare le variabili d’ambiente, proviamo a servire la pagina su una porta diversa.
Nella documentazione esposta nel dockerhub relativamente a Nginx, possiamo vedere che la variabile si chiama: NGINX_PORT.

Come prima cosa interrompiamo l’esecuzione del container creato precedentemente

docker container stop web

Poi aggiungiamo la variabile d’ambiente inline con -e NGINX_PORT=85

docker container run -it --rm -d -e NGINX_PORT=85 -p 8080:85 --name web -v ~/contenuto-mio-sito:/usr/share/nginx/html esempio-nginx:0.0.1

Visitando l’indirizzo http://0.0.0.0:8080 otterremo sempre lo stesso risultato.

Gestione dei log

È possibile analizzare i log di un container utilizzando docker container logs <nome o id del container> (link alla documentazione).

Nel nostro caso:

docker container logs web

Rimozione container

Per rimuovere un container è sufficiente eseguire docker container rm <nome o id del container>

docker rm web

Se si desidera rimuovere un container in esecuzione, è necessario applicare il flag -f che forza la rimozione.

docker rm -f web


Prosegui su: Accedere a un container

Immagine: Foto creata da wirestock – it.freepik.com

Dockertutorial.it rimarrà gratuito.

Se ti fa piacere, qui puoi contribuire al mantenimento di questo progetto. Grazie!