Si è visto in precedenza che la soluzione più semplice e rapida per eseguire WordPress su Docker è offerta da Docker Compose, e la configurazione dell'ambiente può avvenire con o senza la creazione di un Dockerfile. In questo capitolo si dirà quando è utile o necessario creare un Dockerfile.
Cosa è un Dockerfile
Un Dockerfile è un file di testo che contiene tutti i comandi necessari a generare un'immagine Docker. Utilizzando il comando docker build
gli utenti possono creare una build automatica a partire da un Dockerfile ed un contesto. Il contesto è costituito da un insieme di file collocati in una specifica location e individuati dalle istruzioni PATH
e URL
:
docker build /path/to/dockefile
Il Dockerfile non è sempre necessario: per progetti semplici, come lo sviluppo di un sito web con WordPress, possono bastare le immagini ufficiali di MySQL o MariaDB e di WordPress. Il Dockerfile è necessario, però, nel caso in cui si voglia creare un'immagine unica e personalizzata, come nel caso in cui si avesse bisogno di una particolare configurazione del file php.ini
o di specifiche estensioni di PHP.
Non è necessario creare da zero il file, in quanto la repository di Docker offre un set di Dockerfile per ognuna delle immagini ufficiali già disponibili. Ad esempio, nella pagina dedicata a WordPress, è presente un elenco di tutte le immagini disponibili, con il link al Dockerfile corrispondente. È possibile, quindi, utilizzare tali file come template da modificare per creare i propri Dockerfile.
Le istruzioni di un Dockerfile
Il Dockerfile per WordPress con Apache e PHP 7.0, disponibile per il download su Github, costituisce un ottimo template su cui operare.
![WordPress Dockerfile](https://static.html.it/app/uploads/2017/12/github.png)
Ogni Dockerfile deve necessariamente iniziare con un'istruzione FROM
che definisce l'immagine base su cui si sta sviluppando. Il Dockerfile in esame comincia con l'struzione:
FROM php:7.0-apache
Le istruzioni che cominciano con il carattere #
sono commenti:
# install the PHP extensions we need
Il carattere #
in qualunque altra posizione che non sia il primo carattere di una riga, individua invece un argomento.
Il comando RUN
esegue le istruzioni specificate in un layer al top dell'immagine corrente e mette a disposizione una commit che sarà utilizzata per il task successivo. Il comando assume due forme:
#il comando viene eseguito in una shell
RUN <command>
#il comando viene eseguito come exec
RUN ["executable", "param1", "param2"]
La prima istruzione RUN
del Dockerfile in esame istalla le estensioni PHP richieste:
RUN set -ex; \
Il carattere \
continua una singola istruzione RUN
sulla riga successiva:
# install the PHP extensions we need
RUN set -ex; \
\
apt-get update; \
Il successivo comando RUN
imposta le opzioni del file php.ini
:
RUN { \
echo 'opcache.memory_consumption=128'; \
echo 'opcache.interned_strings_buffer=8'; \
...
} > /usr/local/etc/php/conf.d/opcache-recommended.ini
Qualunque modifica al file php.ini
potrà essere operata all'interno di questo comando. Nella tabella che segue si descrivono i comandi utilizzati nel Dockerfile di WordPress.
Comando | Descrizione |
---|---|
FROM |
Definisce l'immagine base del Dockerfile. |
RUN |
Esegue ogni comando specificato in un layer al top dell'immagine corrente e consegna il risultato per le operazioni successive. |
VOLUME |
Crea un mount point con il nome specificato. |
ENV |
Imposta i valori delle variabili d'ambiente. |
COPY |
Copia i file contenuti nella directory d'origine nella directory di destinazione (filesystem del container). |
ENTRYPOINT |
Permette di configurare un container che girerà come eseguibile. |
CMD |
Fornisce valori di default per un container in esecuzione (è ammesso un solo comando CMD ). |
I Dockerfile costituiscono argomento per utenti avanzati e, come anticipato, il loro utilizzo non è necessario in progetti semplici che non richiedono risorse particolari. Prima di cimentarsi nella progettazione del file è è necessario leggere le best practices e l'elenco dei comandi descritti nella documentazione online.