- Comando:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Per collegare (attach) la shell del docker host alla shell di un container in esecuzione è necessario usare il comando 'docker container exec' specificando il nome del container e il comando con il quale vogliamo collegarci.
- Comando:
docker pull ubuntu:latest
- Concetti:
L'azione di pulling porta all'aggiunta di un'immagine nuova al nostro Docker. Analizzeremo più avanti i repository Docker dai quali vengono prelevate queste immagini, per ora è sufficiente sapere se ogni immagine contiene una porzione sufficiente di sistema operativo, come pure di librerie o applicativi aggiuntivi necessari a far girare qualsiasi applicativo che potrebbe essere eseguito da una installazione normale su macchina fisica diretta.
L'avvento di VMWare ha permesso di cambiare radicalmente la struttura fisica delle sale server in giro per il mondo. Erano per lo più popolate da server sovra-dimesionati e "mono-funzionali" : database server, l'application server separati, magari in cluster, e intorno una miriade di server più o meno grandi ognuno dedicato ad una funzione : il server per le telecamere e la video sorveglianza, FTP server, application server di sviluppo e pre-produzione e così via. Insomma, soldi spesi, spazio occupato, poca ottimizzazione dell'uso delle risorse, CPU spesso sottoutilizzate, banchi di RAM comparti e installati perchè "non si sa mai, il server potrebbe averne bisogno"... per non parlare della corrente per tenere acceso tutto, impianti di climatizzazione per tenere fresco tutto e CO2 a palla. Un bel quadretto, non solo elettrico.
Poi venne VMWare
VMWare ha risolto moltissimi problemi. Ha permesso di installare su un singolo "ferro" (server hardware) più applicazioni e sistemi software in genere. Finalmente non era più necessario acquistare un nuovo server fisico tutte le volte che nasceva una nuova esigenza applicativa. Inoltre era diventato possibile concedere RAM o CPU aggiuntive a server applicativi virtualizzati esistenti, oppure toglierli o modularli meglio su altre macchine virtuali nate sovradimensionate. VMWare ha permesso di sfruttare al meglio i ferri presenti nelle aziende, risparmiando tempo e un sacco di soldi. Tutto perfetto quindi? Non proprio.
- Comando:
docker container run [OPT] {image} [COMMAND]
- Concetti:
I container sono istanze di lancio, sulla base di una delle immagini che sono state caricate. Quindi, il comando docker container run da ordine al daemon Docker di lanciare un nuovo container sulla base di una immagine caricata in precedenza.
- Comando:
docker image ls / docker images
- Concetti:
- Termine:
image
- Termine:
pulling
E' utile pensare ad una Docker image come un oggetto che contenga il sistema operativo e un'applicazione. E' come se fosse il template di una virtual machine. Si può, da un altro punto di vista, pensare ad una immagine come ad un Docker Container non in esecuzione. Per chi di voi sia un programmatore ad oggetti, un'immagine Docker è assimilabile ad una classe.
- Comando:
docker image inspect / history
- Concetti:
- Termine:
image
- Termine:
pulling
Se siete esperti di VMware e VM in generale, potete pensare a una Docker Image come ad un template. Un VM template è come una virtual machine ferma, una Docker Image è come un container non in esecuzione. Se siete programmatori ed avete famigliarità col paradigma ad oggetti, pensate alle immagini Docker come ad classi, e i relativi container come ad istanze di classi.
- Comando:
docker container ls
L'elenco dei Docker Container in esecuzione su un Docker Host si ottiene con il comando:
- Comando:
docker version
- Concetti:
- Termine:
server
- Termine:
engine
- Termine:
daemon
- Termine:
client
I componenti che vengono installati con Docker sono sostanzialmente 2 : il client e il daemon (che può essere chiamato anche "server" o "engine"). E' il daemon ad implementare la Docker Engine API (https://docs.docker.com/engine/api/latest/).
Il seguente comando visualizza informazioni sia sul client sia sul daemon installati:
docker version
Il risulato del lancio del comando sarà simile a questo, con i dettagli dell'installazione del Client prima e a seguire del Server (daemon/engine):
Client:
Version: 19.03.6
API version: 1.40
Go version: go1.12.17
Git commit: 369ce74a3c
Built: Fri Feb 28 23:45:43 2020
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 19.03.6
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: 369ce74a3c
Built: Wed Feb 19 01:06:16 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.3-0ubuntu1~18.04.1
GitCommit:
runc:
Version: spec: 1.0.1-dev
GitCommit:
docker-init:
Version: 0.18.0
GitCommit:
Se ricevete un errore relativo la parte Server, e state usando Linux, provate a lanciare lo stesso comando anteponendo sudo. Se l'errore sparisce, allora dovrete o usare sempre sudo oppure aggiungere il vostro utente linux al gruppo 'docker':
sudo usermod -a -G docker username