Docker è ormai la moda del momento, anche se in pochi hanno realmente capito la sua logica e quando è utile implementarlo. Sicuramente il prodotto si presta molto bene negli ambienti DevOps e per quelle aziende che hanno più siti web con diversi requisiti (es. versioni diverse di Java). Docker lo possiamo paragonare (banalizzare) ad una macchina virtuale che gira all’interno di un’altra macchina virtuale, senza però l’effort dato dalla manutenzione, delle patch e di tutto quello che gira attorno ad essa.
In questo articolo vedremo come installare Docker e come configurare il nostro primo container con un’applicazione web basata su Apache.
Installazione
I sistemi operativi Linux supportati attualmente sono i seguenti:
- Arch Linux
- CentOS
- CRUX Linux
- Debian
- Fedora
- FrugalWare
- Gentoo
- Oracle Linux
- Red Hat Enterprise Linux
- openSUSE and SUSE Linux Enterprise
- Ubuntu
Per questa demo useremo una VM basata Ubuntu 16.04 64bit, le versioni a 32bit non funzionano con Docker, preparata con le istruzioni disponibili a questo sito: https://docs.docker.com/engine/installation/linux/ubuntulinux/
Non dimenticate di rendere il servizio attivo all’avvio della VM, tramite il comando sudo systemctl enable docker
Per sapere se il servizio Docker è operativo basta usare il comando service docker status; nel caso fosse fermo si può far partire tramite il comando service docker start.
Pull
Una volta conclusa la configurazione iniziale sarà necessario andare a scaricare le immagini su cui costruire i nostri container. Il catalogo, figura 1, è veramente ampio e ci sono immagini per ogni esigenza, comprese quelle proposte da Microsoft con all’interno .Net Core One (aka v5) che apre lo scenario di poter pubblicare container web che girano su pagine .aspx, anche se il Container Host è Linux.
Figura 1 – Docker Repository
Una volta scelta l’immagine che vi serve, potete scaricarla tramite il comando docker pull nomeimmagine (es. docker pull ubuntu). Il tempo di download varia a seconda della vostra connettività.
Per visualizzare la presenza dell’immagine si può usare il comando docker images, come mostra la figura 2.
Figura 2 – Docker Images
Ora si può proseguire con la creazione del template, che conterrà tutte le nostre modifiche.
Configurazione Template
Per creare il nostro primo container sarà necessario usare il comando docker run -it ubuntu (o il nome dell’immagine scaricata). L’engine di Docker aprirà subito la sessione all’interno del container, come si può notare dal fatto che dopo il nome utente è presente l’identificativo dello stesso.
Un container va trattato come un sistema operativo e quindi è necessario aggiornarlo tramite i comandi apt-get update ed apt-get upgrade, per fare in modo che il sistema sia sicuro ed aggiornato.
Termianti gli aggiornamenti sarà possibile scaricare apache, tramite il comando apt-get install apache2. È possibile installare anche tutto lo Stack LAMP (Linux Apache MySQL PHP) ma la cosa ha senso se intendete utilizzare una piattaforma come WordPress; nel nostro caso il sito è un classico html.
A vostra scelta se installare altri componenti come wget, unzip e simili, che possono tornare utili per scaricare e decomprimere file direttamente il container.
Una volta concluso il download di apache, e degli eventuali componenti aggiuntivi, potete uscire dalla sessione tramite il comando exit.
Creazione Immagine
Per poter creare un’immagine è necessario che il container di referenza sia stoppato e per farlo è necessario usare il comando docker stop idcontainer.
Per creare una nuova immagine si può usare il comando docker commit idcontainer nomeimmagine (es. docker commit xxx insidetech/ubuntu-web).
Lanciando il comando docker images dovrà apparire la nuova immagine, come mostra la figura 3.
Figura 3 – Nuova Immagine
A questo punto sarà possibile creare il nostro container partendo dall’immagine appena generata, tramite il comando docker run -it –-name web01 -p 805:80 insidetech/ubuntu-web. Nello specifico ho assegnato: un nome al container (web01), gli ho detto da quale immagine partire (insidetech/ubuntu-web) e soprattutto gli ho detto di fare un NAT, esponendo la porta 80 del container verso la porta 805 del container host. Il motivo è semplice: ho una sola porta 80 sul mio Container Host e quindi devo usare altre porte per esporre i servizi che non si sovrappongano.
Una volta che sarete dentro la sessione, dovrete avviare manualmente il servizio apache e verificare che il vostro sito web sia fruibile dal vostro computer, tramite l’URL http://iplinux:805. Se avete fatto tutto correttamente, il risultato sarà simile a quello della figura 4.
Figura 4 – Container in Funzione
A questo punto potete uscire dalla sessione, felici di aver creato il vostro primo container su Docker.
Autostart Container
Di default i container non ripartono quando il Container Host viene riavviato, ma per fare in modo che questo avvenga potete creare il container attraverso questo comando docker run -it –name web01 -p 800:80 –restart=always insidetech/ubuntu-web. Nel caso il container sia già esistente, potete usare questo comando docker update –restart=always idcontainer.
Comandi Utili
Ecco alcuni comandi utili per gestire al meglio Docker:
- Avviare Container – docker start idcontainer
- Fermare Container – docker stop idcontainer
- Accedere alla Sessione – docker exec -it idcontainer bash
- Elenco Immagini – docker images
- Elenco Container – docker ps -a
- Eliminare Immagine – docker rmi idimmagine
- Eliminare Container – docker rm idcontainer
- Copia tra Host e Container – docker cp source idcontainer:pathdestinazione
Conclusioni
In questo articolo abbiamo visto la facilità nell’implementazione di Docker, anche se le funzioni presenti sono tantissime e permettono di gestire un’infrastruttura in modo avanzato. Per chi volesse maggiori informazioni, consiglio di guardare i video pubblicati durante il SID 2016.