Parte 3:creazione di un blocco note con contenitori WordPress e DokuWiki
Prefazione
Nella prima parte abbiamo parlato di come funzionano i container docker e si differenziano dalle altre tecnologie di virtualizzazione del software e nella seconda parte abbiamo preparato il nostro sistema per la gestione dei container docker.
In questa parte inizieremo a utilizzare le immagini Docker e creeremo contenitori in modo pratico. In altre parole, creeremo un blocco note personale avanzato basato sul Web che verrà eseguito su DokuWiki o WordPress. Puoi scegliere quello con cui ti senti a tuo agio.
Come eseguire un container Docker
Per prima cosa dobbiamo assicurarci che il motore Docker funzioni come necessario scaricando un'immagine "Hello world" e creando un contenitore da essa.
Ricorda, quando parliamo di un'immagine è lo stato sospeso mentre quando parliamo di container è un'istanza di runtime di un'immagine docker. In un'analogia, di cui abbiamo parlato in una parte precedente, un'immagine docker è come il file ISO di una distribuzione Linux, mentre il container è la sessione live del file ISO come se lo eseguissi da una chiavetta USB.
Per scaricare ed eseguire l'immagine "Hello world" è sufficiente digitare nel terminale
sudo docker run hello-world
Questo comando scarica l'immagine Hello World e la esegue in un contenitore. Quando il contenitore viene eseguito, stampa un messaggio informativo e quindi esce (il che significa che si spegne).
Come controlliamo quante immagini abbiamo nel nostro sistema? Bene, corriamo semplicemente
sudo docker images
Potresti chiederti, come ha fatto il mio sistema a trovare questa immagine di Hello World e da dove viene? Bene, è qui che entra in gioco l'hub Docker.
Introduzione al Docker Hub
Docker Hub è una risorsa centralizzata basata su cloud per il rilevamento delle immagini del contenitore, la creazione di immagini e la distribuzione di tali immagini.
In particolare, Docker Hub fornisce alcune utili caratteristiche e funzioni di cui parleremo più approfonditamente nelle parti successive.
Al momento, ci concentreremo su una funzione e questa è trovare e scaricare un'immagine Docker.
Ricerca di immagini Docker
È possibile cercare un'"immagine Docker pronta per il download e l'esecuzione", semplicemente visitando l'hub Docker online o utilizzando il terminale. Tieni presente che non puoi scaricare un'immagine Docker dall'hub web, ma puoi saperne di più su un'immagine, ad esempio su come viene creata e gestita, ecc.
Quindi, ai fini di questa parte, ci concentreremo sull'utilizzo del modo terminale. Cerchiamo WordPress
sudo docker search wordpress
Come puoi vedere ci sono tonnellate di immagini docker di WordPress, che sono costruite con varie combinazioni (ad es. con o senza inclusione nel database), sono classificate con stelle di popolarità e sono ufficiali (mantenute dalla società docker) o automatizzate (costruite e mantenute da privati). È ovvio che chiunque può creare un account e caricare la propria immagine della finestra mobile personalizzata e ne parleremo in una parte successiva.
Download di un'immagine Docker
Ai fini di questo articolo, utilizzeremo l'ultima build dell'immagine docker di bitnamis, che viene fornita con MySQL preinstallato al suo interno. Quindi scarichiamolo:
sudo docker pull bitnami/wordpress:latest
Una volta eseguito il comando precedente, comunicherà con l'hub Docker, chiederà se esiste un repository chiamato "bitnami", quindi chiede se esiste una build "WordPress" contrassegnata come versione "ultima".
Al momento, abbiamo scaricato un'immagine WordPress e nient'altro. Possiamo procedere ora scaricando un'immagine DokuWiki cercandone una e selezionando quella che ci piace, oppure usando quella che è la seguente
sudo docker pull mprasil/dokuwiki
L'architettura Docker Image
Mentre aspetti il completamento della procedura di download, puoi vedere che un'immagine Docker è un'immagine multistrato sopra un'immagine di base. Puoi vedere ogni singolo livello che viene scaricato e poi "magicamente" essere unificato. Il diagramma seguente mostra un'immagine di base di Ubuntu composta da 4 livelli di immagine impilati.
Come puoi immaginare, ogni Docker Image fa riferimento a un elenco di livelli di sola lettura che rappresentano le differenze del file system. Quando crei un nuovo contenitore, da un'immagine Docker come faremo in seguito, aggiungi un nuovo livello sottile e scrivibile sopra lo stack sottostante. Tutte le modifiche apportate al contenitore in esecuzione, come la scrittura di nuovi file, la modifica di file esistenti e l'eliminazione di file, vengono scritte su questo sottile livello del contenitore scrivibile. Il diagramma seguente mostra un contenitore basato sull'immagine di Ubuntu 15.04.
Eliminazione di un'immagine Docker
Ora se controlli quante immagini hai sul tuo sistema
sudo docker images
vedrai WordPress, DokuWiki e Hello World. Se per qualsiasi motivo vuoi rimuovere ed eliminare (rmi) un'immagine devi semplicemente digitare
sudo docker rmi <name-of-the-image>
dove il nome dell'immagine è il nome della finestra mobile in quanto viene visualizzato con il comando "immagini della finestra mobile". Ad esempio, se vogliamo eliminare Hello World possiamo semplicemente digitare:
sudo docker rmi hello-world
I contenitori sono effimeri
In base alla progettazione, i contenitori Docker sono effimeri. Per "effimero", intendiamo che un container può essere fermato e distrutto e uno nuovo può essere costruito dalla stessa immagine Docker e messo in atto con un minimo assoluto di set-up e configurazione.
Pertanto, dovresti tenere presente che quando creeremo un contenitore dall'immagine Docker di tua preferenza (WordPress o DokuWiki) tutte le modifiche che apporti, ad es. l'aggiunta di un post, un'immagine, andrà persa una volta interrotto o eliminato il contenitore. In altre parole, quando un contenitore viene eliminato, tutti i dati scritti nel contenitore che non sono archiviati in un volume di dati vengono eliminati insieme al contenitore.
Un volume di dati è una directory o un file nel filesystem dell'host Docker che viene montato direttamente in un contenitore. In questo modo puoi scambiare i contenitori con quelli nuovi e mantenere tutti i dati al sicuro nella cartella home dei tuoi utenti. Tieni presente che puoi montare un numero qualsiasi di volumi di dati in un contenitore. Anche più contenitori possono condividere uno o più volumi di dati.
Il diagramma seguente mostra un singolo host Docker (ad es. Ubuntu 15.10) che esegue due contenitori. Come puoi vedere, esiste anche un singolo volume di dati condiviso situato in /data sull'host Docker. Questo viene montato direttamente in entrambi i contenitori.
In questo modo, quando un container viene eliminato, tutti i dati archiviati nei volumi di dati persistono sull'host Docker e possono essere montati su un nuovo container.
Rete di container Docker
Quando installi Docker, crea un dispositivo di rete nel tuo sistema. Puoi visualizzarlo (sarà chiamato docker0) come parte dello stack di rete di un host usando il comando `ifconfig` sul tuo sistema host.
È importante capire che i container Docker sono isolati e sono microservizi individuali che hanno le proprie proprietà di rete e il modo in cui li eseguiamo e ci colleghiamo ad essi è mappando il loro numero di porta su un numero di porta del sistema host.
In questo modo possiamo esporre il servizio Web eseguito da un container al sistema host.
Creazione di un blocco note personale con un contenitore WordPress
Iniziamo con la creazione del nostro blocco note di test. Per prima cosa utilizzeremo l'immagine di WordPress per creare un contenitore Docker
sudo docker run --name=mynotepad -p 80:80 -p 443:443 bitnami/wordpress
Con il comando precedente, abbiamo chiesto al servizio Docker nel nostro sistema host di creare ed eseguire (docker run) un contenitore chiamato `mynotepad` (--name=mynotepad), mappare la porta HTTP e HTTPS dell'host e del contenitore ( -p 80:80 -p 443:443) e usa l'immagine di WordPress (bitnami/wordpress)
Una volta che il contenitore è stato inizializzato, verrai accolto con alcune informazioni sul contenitore. È ora di avviare un browser e puntarlo su http://localhost
Se tutto è andato bene, vedrai il sito Web WordPress predefinito
Come forse già saprai per accedere alla pagina di amministrazione di WordPress, basta andare su http://localhost/login e utilizzare le credenziali utente/bitnami di default. Quindi puoi creare un nuovo utente o un post di prova in WordPress e pubblicarlo. Puoi vedere il mio post di prova nell'immagine qui sotto
Torniamo al terminale. Come puoi vedere, il tuo terminale è attualmente associato al contenitore in esecuzione. Puoi usare Ctrl+C per uscire. Questo fermerà anche il contenitore.
Ora controlliamo i nostri contenitori disponibili. Puoi eseguire il seguente comando:
sudo docker ps -l
per visualizzare il container che avevamo precedentemente creato ed eseguito.
Come puoi vedere dall'immagine sopra, ci sono alcune informazioni importanti come il nome del contenitore e l'ID univoco del contenitore. In questo modo possiamo riavviare il container:
docker start mynotepad
Quindi puoi controllare i processi eseguiti dal contenitore Docker, con il seguente comando:
sudo docker top mynotepad
Per impostazione predefinita, con il `docker start mynotepad` il contenitore docker è in esecuzione in background. Per fermarlo, puoi eseguire il seguente comando
sudo docker stop mynotepad
Puoi leggere di più su come interagire con il container nella documentazione ufficiale della finestra mobile https://docs.docker.com/engine/userguide/containers/usingdocker/
Dove sono i contenitori
Se vuoi vedere dove si trovano i contenitori nel file system hosts, puoi andare su /var/lib/docker
sudo cd /var/lib/docker
sudo ls
sudo cd containers
sudo cd ID
sudo ls
Come puoi vedere, i numeri ID rappresentano i contenitori effettivi che hai creato.
Creazione di una memoria persistente
Creiamo un nuovo contenitore WordPress, ma questa volta lo metteremo in background ed esporremo anche la cartella WordPress al nostro sistema host in modo da poterci inserire file o rimuovere tutti i file che non vogliamo.
Per prima cosa creiamo una cartella nella nostra home directory
mkdir ~/wordpress-files
quindi esegui e crea un contenitore basato sulla stessa immagine che abbiamo creato la precedente:
sudo docker run -d -ti --name=mynotepad-v2 -v ~/wordpress-files:/opt/bitnami/apps -e USER_UID=`id -u` -p 80:80 bitnami/wordpress
La differenza, questa volta, è che abbiamo usato il parametro -d per la modalità distaccata e il parametro -ti per collegare un terminale in modalità interattiva in modo che io possa interagire con esso in seguito.
Per controllare il contenitore in esecuzione basta eseguire il seguente comando
sudo docker ps
Fermiamo il contenitore
sudo docker stop mynotepad-v2
Ora se esegui il comando `docker ps` non vedrai nulla lì.
Ricominciamolo con il seguente comando:
sudo docker start mynotepad-v2
Se controlli la cartella che abbiamo precedentemente creato vedrai l'installazione di WordPress
Puoi leggere di più sull'immagine che abbiamo utilizzato nell'hub Docker https://hub.docker.com/r/bitnami/wordpress/
Creazione di un blocco note personale con un contenitore DokuWiki
Questa volta creeremo un blocco note usando DokuWiki. Poiché abbiamo precedentemente scaricato l'immagine, l'unica cosa che resta da fare è creare un contenitore da essa.
Quindi eseguiamo il seguente comando per creare il nostro contenitore denominato `mywikipad`
docker run -d -p 80:80 --name mywikipad mprasil/dokuwiki
Quindi vai sul tuo browser e aggiungi il seguente indirizzo per avviare la configurazione del tuo blocco note wiki:
http://localhost/install.php
Puoi saperne di più su DokuWiki dalla documentazione ufficiale e personalizzare il wiki in base alle tue esigenze:
https://www.dokuwiki.org/manual
Eliminazione di un container Docker
Una volta che avrai dimestichezza con la creazione, l'avvio e l'arresto di contenitori docker, ti ritroverai a dover ripulire il pasticcio di test creato dai contenitori multipli.
Per eliminare prima un contenitore dovrai prima fermarlo e poi eliminarlo eseguendo il seguente comando:
docker rm <name of container or ID>
Puoi anche aggiungere più ID nello stesso comando `docker rm` per eliminare più contenitori docker contemporaneamente.
Riepilogo
In questa parte abbiamo imparato come creare un contenitore e usarlo in modo pratico per creare un blocco note personale basato su WordPress o DokuWiki. Abbiamo esaminato alcuni comandi di base su come avviare e arrestare i contenitori che creiamo e come eliminare le immagini e i contenitori.
Nella parte successiva, daremo un'occhiata a come vengono create le immagini della finestra mobile creando le nostre.