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.
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.