Questo articolo è un complemento della serie di webinar su come deployare e gestire carichi lavorativi congelati nel cloud, che copre i principali aspetti dei contenitori, tra cui la gestione del ciclo di vita dei contenitori, l’implementazione di applicazioni multi-contenitore, il scalabilità dei lavori, e l’introduzione di Kubernetes, oltre ad evidenziare le migliori pratiche per eseguire applicazioni stateless.Questo tutorial comprende i concetti e i comandi trattati nella prima sessione della serie, Introdurvi ai contenitori.
Questa guida include i concetti e i comandi trattati nell’sessione precedente della serie, Introducing Containers.
Introduzione
Docker è una piattaforma per deployare e gestire applicazioni congelate. I contenitori sono popolari tra sviluppatori, amministratori e ingegneri di DevOps per la flessibilità che offrono.
Docker ha tre componenti essenziali:
- Docker Engine
- Tools per Docker
- Registro Docker
Il Docker Engine fornisce le capacità di base per gestire i contenitori. Interagisce con il sistema operativo Linux sottostante per esporre semplici API per affrontare il ciclo di vita dei contenitori.
I tool per Docker sono un insieme di utilità da linea di comando che interagiscono con l’API esposta dal Docker Engine. Sono usati per eseguire i contenitori, creare nuovi image, configurare i dati e le reti, e fare molte altre operazioni che influenzano il ciclo di vita di un contenitore.
Il registro Docker è il luogo dove le immagini dei contenitori sono archiviate. Ogni immagine può avere diverse versioni identificate attraverso tag unici. I utenti possono scaricare le immagini esistenti dal registro e caricarle nuove immagini.Docker Hub è un registro hostato gestito da Docker, Inc.. È anche possibile eseguire un registro all’interno delle proprie ambientazioni per tenere le immagini più vicino al motore.
Al termine di questo tutorial, avrete installato Docker su una Dropplet DigitalOcean, gestito i contenitori, lavorato con le immagini, aggiunto persistenza e impostato un registro privato.
Prerequisiti
Per seguire questo tutorial, avete bisogno:
-
Un Dropplet Ubuntu 16.04 creato seguendo questo tutorial per la configurazione iniziale del server Ubuntu 16.04, compreso un utente non root con sudo e un firewall.
- A Docker Hub account. Questo riepilogo di Docker Hub ti aiuterà ad iniziare.
Nel caso in cui il comando docker
richieda privilegi di root, puoi eseguirlo senza l’prefix sudo
eseguendo il comando docker
come utente del gruppo docker.
Per configurare il tuo Dropletto in questo modo, esegui il comando sudo usermod -aG docker ${USER}
. Ciò aggiungerà l’utente corrente al gruppo docker
. Poi, esegui il comando su - ${USER}
per applicare la nuova membrienza del gruppo.
Questo tutorial presuppone che il tuo server sia configurato in modo che il comando docker
possa essere eseguito senza l’prefix sudo
.
Step 1 — Installazione di Docker
Dopo aver effettuato l’accesso SSH al Dropletto, esegui i seguenti comandi per rimuovere qualsiasi pacchetto relativo a Docker che potrebbe essere già stato installato e poi installarlo dalla repository ufficiale:
Dopo l’installazione di Docker, verifica l’installazione con i seguenti comandi:
Il comando sopra mostra dettagli sulle istanze di Docker Engine deployato nell’ambiente. Il prossimo comando verifica che i tool Docker siano correttamente installati e configurati. Dovrebbero stampare la versione di entrambi Docker Engine e Tools.
### Step 2 — Lanzamento dei Container
I contenitori Docker sono lanciati da immagini esistenti che sono archiviate nel registro. Le immagini in Docker possono essere archiviate in repository privati o pubblici. I repository privati richiedono l’autenticazione prima di estrarli le immagini. Le immagini pubbliche possono essere accedute da chiunque.
Per cercare un’immagine chiamata
Esistono molteplici immagini che corrispondono al nome
Verificale disponibilità delle immagini nel tuo ambiente locale con il seguente comando:
Poiché non abbiamo lanciato alcun contenitore finora, non ci saranno immagini. Ora possiamo scaricarle e eseguirlle localmente:
Se eseguisce il comando
Ora lanciamo un contenitore più significativo: un server Web Apache.
Potresti notare le opzioni aggiuntive passate al comando
- Il comando
-p
di Docker Engine indica al servizio di esecuzione dei contenitori di esporre il porto80
del contenitore su un porto del host80
. Poiché Apache ascolta su questo porto, abbiamo bisogno di esporirlo sul porto dell’host. --name
specifica che questo passaggio assegna un nome al contenitore in esecuzione. Se ommettiamo questo, Docker Engine assegnerà un nome casuale al contenitore.-d
è un’opzione che richiede all’Engine di Docker di eseguire il contenitore in modalità dettagliata. Senza questa opzione, il contenitore sarà eseguito in primo piano, bloccando l’accesso alla shell. Aggiungendo il contenitore in background consente di usare la shell mentre il contenitore continua ad eseguirsi.
Per verificare che il nostro contenitore sia effettivamente in esecuzione in background, provate questo comando:
Il risultato mostra che il contenitore chiamato web
è in esecuzione con il porto 80
mappato al porto dell’host 80
.
Ora accedete al server Web:
Prova ad accedere al server Web usando il seguente comando:
Ecco come fermare e rimuovere il contenitore in esecuzione con i comandi seguenti:
Ripetere nuovamente docker ps
conferma che il contenitore è terminato.
Passo 3 — Aggiungere storage ai contenitori
I contenitori sono effimeri, cioè vanno perduti quando il contenitore viene terminato. Per conservare i dati oltre la vita di un contenitore, abbiamo bisogno di assegnarci una volumetria. Le volumetrie sono direttorie dal sistema di file dell’host.
Inizia creando una nuova directory sul host:
Ora lanciamo il contenitore con un nuovo switch per montare la directory htdocs
. Questa directory è la radice del server Web Apache.
Lanciamo il contenitore con un nuovo switch che indica la directory htdocs
all’interno del contenitore, puntandola al root del server Web Apache. Ogni cambiamento fatto su questa directory sarà visibile sia nel contesto del host che all’interno del contenitore.
Accedi alla directory dal contenitore usando il comando:
Questo comando attacca il tuo terminale al shell del contenitore in modo interattivo. Dovresti vedere che sei ora arrivato all’interno del contenitore.
Naviga nella directory htdocs
e crea semplicemente un file HTML. Quindi, esci dalla shell del contenitore:
Eseguire il comando curl localhost
mostra che il server Web sta restituendo la pagina che hai creato.
Non solo puoi accedere a questo file dall’host, ma anche modificarlo:
Eseguire nuovamente curl localhost
conferma che il server Web sta servendo la pagina creata da recentemente sul host.
Terminare il contenitore con il seguente comando. (Il -f
forza Docker a terminare senza fermarsi prima.)
Passaggio 4 — Costruzione Immagini
Oltre ad eseguire le immagini esistenti dall’ registro, possiamo crearne nuove e archiviarle nel registro.
Puoi creare nuove immagini da contenitori esistenti. Le modifiche apportate al contenitore vengono confermate e poi le immagini sono taggate e pushate al registro.
Rilancia il contenitore httpd
ancora una volta e modifica il file di default:
Il contenitore è ora in esecuzione con un index.html
personalizzato. Puoi verificarlo con curl localhost
.
Prima di committeremo il contenitore modificato, è buona pratica fermarlo. Dopo che è stato fermato, eseguirai il comando commit:
Conferma la creazione dell’immagine con il comando docker images
. Mostra l’immagine doweb
che hai appena creato.
Per etichettare e archiviare questa immagine su Docker Hub esegui i seguenti comandi per inviarla al registro pubblico:
Puoi verificare la nuova immagine tramite ricerca nel browser o sul comando linea.
Passaggio 5 — Avvio di un Registro Privato
È possibile eseguire il registro del pacchetto in ambienti privati per mantenere le immagini più sicure. Questo riduce anche la latenza tra l’engine di Docker e il repository delle immagini.
Il registro Docker è disponibile come contenitore che può essere lanciato come qualsiasi altro contenitore. Poiché il registro conserva diverse immagini, è buona pratica attaccare un volume di archiviazione al suo interno.
Nota che il contenitore è stato lanciato in background con il porto
Ora potrai verificare che il contenitore è in esecuzione eseguendo il comando
Puoi ora taggare un’immagine locale e pusharla nel registro privato. Lascia che prima abbiai fatto un pull dell’immagine
Il comando precedente conferma che l’immagine
Con l’immagine pushata al registro locale, prova ad eliminarla dall’ambiente e poi a pullarla dal registro.
Hai completato il ciclo completo di pull dell’immagine, taggare, pusharla al registro locale e, infine, pullarla nuovamente.
Potrebbero essere casi in cui voudresti eseguire il registro del pacchetto su una macchina dedicata. Il motore di Docker in esecuzione su macchine differenti parlerà al registro remoto per estrarne e pusharle le immagini.
Poiché il registro non è sicuro, occorre modificare la configurazione di Docker Engine per consentire l’accesso a un registro non sicuro. Per fare ciò, modifichi il file daemon.json
situato in /etc/docker/daemon.json
. Crea il file se non esiste.
Aggiungi il seguente elemento:
{
"insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}
Sostituisci REMOTE_REGISTRY_HOST
con il nome host o l’indirizzo IP del registro remoto. Riavvia Docker Engine per assicurarti che le modifiche alla configurazione siano applicate.
##Conclusione
Questo tutorial ti ha aiutato a iniziare con Docker. Ha coperto i concetti essenziali, inclusa l’installazione, la gestione dei container, la gestione delle immagini, l’archiviazione e il registro privato. Le prossime sessioni e articoli di questa serie ti aiuteranno a passare oltre le basi di Docker.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker