Build di immagini
Semplice Dockerfile
Occorre creare il Dockerfile.
Vogliamo un'immagine per il contatore infinito:
mkdir -p ~/docker/ex/dk1
cd ~/docker/ex/dk1
vim forever.sh
#! /bin/bash
x=0
while true
do
x=$[x + 1]
echo $x
sleep 1
done
Editare il Dockerfile:
vim Dockerfile
FROM ubuntu
MAINTAINER Hugh Fray <hugh@stormforce.ac>
COPY forever.sh /usr/local/bin/forever.sh
RUN chmod +x /usr/local/bin/forever.sh
CMD ["/usr/local/bin/forever.sh"]
Costruire l'immagine:
docker build -t forever1 .
Ove:
-t forever1
: nome che diamo all'immagine.
: directory di build
Verificare e lanciare l'immagine costruita:
docker images
docker run -d --name my_forever1 forever1
docker logs my_forever1
Dockerfile più complesso
Un possibile sempio di Dockerfile per nginx.
Nella directory di contesto:
mkdir -p ~/docker/ex/nginx-ubuntu
cd ~/docker/ex/nginx-ubuntu
vim Dockerfile
FROM ubuntu
# Install Nginx.
RUN \
apt-get update && \
apt-get install -y nginx && \
rm -rf /var/lib/apt/lists/* && \
echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \
chown -R www-data:www-data /var/lib/nginx
# Define mountable directories.
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
# Define working directory.
WORKDIR /etc/nginx
# Define default command.
CMD ["nginx"]
# Expose ports.
EXPOSE 80
EXPOSE 443
Perchè tutti gli &&
Si può avere in alternativa:
- una serie di comandi RUN ciascuno dei quali compie un'operazione
- un unico comando RUN che compie più operazioni concatenate da
&&
Il secondo metodo è migliore per i seguenti motivi:
- Ogni RUN produce un'immagine intermedia, appesantendo il processo di generazione
- L'operatore && non esegue il comando che segue se quello precedente è fallito e termina subito il processamento del Dockerfile.
Ogni singolo RUN di successo procede al prossimo RUN e se uno degli ultimi fallisce, occorre più tempo per interrompere il processamento del Dockerfile.
Generazione di Immagine
Posizionarsi nella directory di contesto
- contiene il Dockerfile e tutto quello che serve
Generazione:
docker build [opzioni] -t immagine .
Opzioni principali:
--no-cache
- ricostruisce completamente da zero-q
- sopprime i messaggi di progresso ad output
Vi sono numerose altre opzioni. Listarle con:
docker build --help
Nel nostro esempio:
cd ~/docker/ex/nginx-ubuntu
docker build -t nginx-ubuntu .
Con base Ubuntu è un processo piuttosto lungo.