Ricerca nel sito web

Come creare e configurare automaticamente immagini Docker personalizzate con Dockerfile - Parte 3


Questo tutorial si concentrerà su come creare un'immagine Docker personalizzata basata su Ubuntu con il servizio Apache installato. L'intero processo sarà automatizzato utilizzando un Dockerfile.

Le immagini Docker possono essere create automaticamente da file di testo, denominati Dockerfiles. Un file Docker contiene istruzioni o comandi ordinati passo dopo passo utilizzati per creare e configurare un'immagine Docker.

Requisiti

  • Installa Docker e impara a manipolare i contenitori Docker – Parte 1
  • Distribuisci ed esegui applicazioni in contenitori Docker - Parte 2

Fondamentalmente, un file Docker contiene varie istruzioni per costruire e configurare un contenitore specifico in base alle proprie esigenze. Le seguenti istruzioni sono le più utilizzate, alcune di esse sono obbligatorie:

  1. FROM=Obbligatorio come prima istruzione in un file Docker. Indica a Docker di estrarre l'immagine di base da cui stai creando la nuova immagine. Utilizza un tag per specificare l'immagine esatta da cui stai creando:
Ex: FROM ubuntu:20.04
  1. MAINTAINER=Autore dell'immagine di build
  2. RUN=Questa istruzione può essere utilizzata su più righe ed esegue qualsiasi comando dopo la creazione di un'immagine Docker.
  3. CMD=Esegui qualsiasi comando all'avvio dell'immagine Docker. Utilizzare solo un'istruzione CMD in un Dockerfile.
  4. ENTRYPOINT=Uguale a CMD ma utilizzato come comando principale per l'immagine.
  5. EXPOSE=Indica al contenitore di ascoltare sulle porte di rete durante l'esecuzione. Per impostazione predefinita, le porte del contenitore non sono raggiungibili dall'host.
  6. ENV=Imposta le variabili di ambiente del contenitore.
  7. ADD=Copia risorse (file, directory o file da URL).

Passaggio 1: creazione o scrittura del repository Dockerfile

1. Innanzitutto, creiamo una sorta di repository Dockerfile per riutilizzare i file in futuro per creare altre immagini. Crea una directory vuota da qualche parte nella partizione /var dove creeremo il file con le istruzioni che verranno utilizzate per creare la nuova immagine Docker.

mkdir -p /var/docker/ubuntu/apache
touch /var/docker/ubuntu/apache/Dockerfile

2. Successivamente, inizia a modificare il file seguendo le seguenti istruzioni:

vi /var/docker/ubuntu/apache/Dockerfile

Estratto del file Doker:

FROM ubuntu
MAINTAINER  your_name  <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND

Ora, esaminiamo le istruzioni del file:

La prima riga ci dice che stiamo costruendo da un'immagine Ubuntu. Se non viene inviato alcun tag, ad esempio 14:10, verrà utilizzata l'immagine più recente da Docker Hub.

Nella seconda riga abbiamo aggiunto il nome e l'e-mail del creatore dell'immagine. Le prossime due righe RUN verranno eseguite nel contenitore durante la creazione dell'immagine e installeranno il demone Apache e echo del testo nella pagina Web Apache predefinita .

La riga EXPOSE ordinerà al contenitore Docker di ascoltare sulla porta 80, ma la porta non sarà disponibile all'esterno. L'ultima riga indica al contenitore di eseguire il servizio Apache in primo piano dopo l'avvio del contenitore.

3. L'ultima cosa che dobbiamo fare è iniziare a creare l'immagine emettendo il comando seguente, che creerà localmente una nuova immagine Docker denominata ubuntu-apache basata sul Dockerfile creato in precedenza, come mostrato in questo esempio:

docker build -t ubuntu-apache /var/docker/ubuntu/apache/

4. Dopo che l'immagine è stata creata da Docker, puoi elencare tutte le immagini disponibili e identificare la tua immagine emettendo il seguente comando:

docker images

Passaggio 2: esegui il contenitore e accedi ad Apache dalla LAN

5. Per eseguire il contenitore in modo continuo (in background) e accedere ai servizi esposti (porte) del contenitore dall'host o da un altro computer remoto nella tua LAN, esegui il comando seguente sul prompt del terminale host :

docker run -d -p 81:80 ubuntu-apache

Qui, l'opzione -d esegue il contenitore ubuntu-apache in background (come demone) e l'opzione -p mappa la porta del contenitore 80 alla porta del tuo host locale 81. L'accesso dalla LAN esterna al servizio Apache può essere raggiunto solo tramite la porta 81.

Il comando Netstat ti darà un'idea di quali porte è in ascolto l'host.

Dopo che il contenitore è stato avviato, puoi anche eseguire il comando docker ps per visualizzare lo stato del contenitore in esecuzione.

6. La pagina web può essere visualizzata sul tuo host dalla riga di comando utilizzando l'utilità curl rispetto all'indirizzo IP del tuo computer, localhost o interfaccia docker net sulla porta 81. Utilizza il comando IP linea per mostrare gli indirizzi IP dell'interfaccia di rete.

ip addr               [List nework interfaces]
curl ip-address:81    [System Docker IP Address]
curl localhost:81     [Localhost]

7. Per visitare la pagina web del contenitore dalla tua rete, apri un browser in una posizione remota e utilizza il protocollo HTTP, l'indirizzo IP della macchina su cui è in esecuzione il contenitore, seguito dalla porta 81 come illustrato nella pagina immagine sotto.

http://ip-address:81

8. Per sapere quali processi sono in esecuzione all'interno del contenitore, immetti il seguente comando:

docker ps
docker top <name or ID of the container>

9. Per arrestare il contenitore, esegui il comando docker stop seguito dall'ID o dal nome del contenitore.

docker stop <name or ID of the container>
docker ps

10. Nel caso in cui desideri assegnare un nome descrittivo per il contenitore, utilizza l'opzione --name come mostrato nell'esempio seguente:

docker run --name my-www -d -p 81:80 ubuntu-apache
docker ps

Ora puoi fare riferimento al contenitore per la manipolazione (inizio, fine, inizio, statistiche, ecc.) solo utilizzando il nome assegnato.

docker stats my-www

Passaggio 3: creare un file di configurazione a livello di sistema per il contenitore Docker

11. Su CentOS/RHEL puoi creare un file di configurazione systemd e gestire il contenitore come fai normalmente per qualsiasi altro servizio locale.

Ad esempio, crea un nuovo file systemd denominato, diciamo, apache-docker.service utilizzando il seguente comando:

vi /etc/systemd/system/apache-docker.service

Estratto del file apache-docker.service:

[Unit]
Description=apache container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www

[Install]
WantedBy=local.target

12. Dopo aver finito di modificare il file, chiudilo, ricarica il demone systemd per riflettere le modifiche e avvia il contenitore immettendo i seguenti comandi:

systemctl daemon-reload
systemctl start apache-docker.service
systemctl status apache-docker.service

Questo era solo un semplice esempio di cosa puoi fare con un semplice Dockerfile, ma puoi precostruire alcune applicazioni piuttosto sofisticate che puoi avviare in pochi secondi con risorse e sforzi minimi.

Ulteriori letture: