Docker:Introduzione
Docker è uno strumento di gestione della piattaforma aperta per i container Linux. Fornisce un mezzo per sviluppatori e amministratori di sistema per creare e impacchettare applicazioni in contenitori leggeri. Docker è costituito dai seguenti componenti:
- Motore Docker – Uno strumento di runtime e packaging portatile e leggero
- Hub Docker – Un servizio cloud per la condivisione di applicazioni e l'automazione dei flussi di lavoro
Docker viene utilizzato per creare contenitori di applicazioni basati su immagini. I contenitori basati su immagini creano un pacchetto di un'applicazione con il singolo stack di runtime in un unico contenitore. Ciò rende il contenitore indipendente dal sistema operativo host e dalla versione del kernel. Di conseguenza, puoi eseguire la stessa applicazione, invariata, su laptop, macchine virtuali di data center e qualsiasi cloud. Puoi trasferire questo contenitore su un altro computer che esegue Docker ed esegue l'applicazione senza problemi di compatibilità.
Di seguito sono elencati ulteriori vantaggi dell'esecuzione di applicazioni all'interno dei contenitori Docker:
- Le immagini Docker contengono solo il contenuto necessario per eseguire un'applicazione, quindi sono più piccole delle macchine virtuali, che richiedono l'intero sistema operativo.
- Un container Docker viene eseguito più velocemente di un'applicazione che include il sovraccarico di un'intera macchina virtuale.
- Un container Docker include le proprie interfacce di rete, file system e memoria, il che consente all'applicazione in esecuzione nel container di essere isolata e protetta da altri processi sul computer host.
Immagini Docker
I contenitori Docker sono creati da immagini Docker. Crei contenitori Docker per eseguire le tue applicazioni da queste immagini Docker. L'esempio seguente crea un contenitore Docker denominato "test" da un'immagine Docker denominata centos:7" ed esegue /bin/bash.
# docker create --name test centos:7 /bin/bash Unable to find image 'centos:7' locally Trying to pull repository docker.io/library/centos ... 7: Pulling from docker.io/library/centos 469cfcc7a4b3: Pull complete Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:7 a79ce1655f2ca17c7ac8cc15f307ba0bb438fbebd4595568df3433dd5ff79b73
Le immagini sono modelli di sola lettura che possono contenere un intero sistema operativo con servizi e applicazioni aggiuntive installate. Docker fornisce le funzionalità per creare immagini o aggiornare immagini esistenti. Puoi creare immagini Docker dalla riga di comando oppure puoi memorizzare le istruzioni per creare un'immagine in un Dockerfile. Docker legge questo Dockerfile ed esegue le istruzioni quando avvii la creazione di un'immagine Docker.
Ogni immagine parte da un'immagine di base (ad esempio, centos). Ciascuna immagine Docker è costituita da una serie di livelli creati da queste immagini di base. Ogni istruzione nel Dockerfile crea un nuovo livello nell'immagine. Ogni volta che apporti una modifica a un'immagine Docker, solo quel livello viene aggiornato o aggiunto. Docker utilizza unionfs per combinare questi livelli in un'unica immagine. Il servizio file system unionfs consente di sovrapporre file e directory di file system separati in un unico file system.
Dopo aver creato un'immagine Docker, puoi condividere le immagini memorizzandole nei registri Docker. Questi registri possono essere privati o pubblici. Docker Hub è il registro Docker pubblico che funge da piattaforma Software-as-a-Service per la condivisione e la gestione dei container Docker.
Come installare Docker su CentOS / RHEL / FedoraCome installare Docker su Mac
Il registro Docker Hub
Il registro Docker Hub ospita applicazioni come immagini Docker e fornisce servizi che consentono di creare e gestire un ambiente Docker. Il Docker Hub Registry è di proprietà e gestito da Docker, Inc. e si trova all'indirizzo https://registry.hub.docker.com/.
Docker Hub fornisce un numero di repository e ogni repository può contenere un numero di immagini. Oltre all'hosting di immagini Docker, Docker Hub fornisce servizi come autenticazione utente, build automatizzate di immagini e strumenti per il flusso di lavoro e integrazione con GitHub e BitBucket. Per utilizzare questi servizi Docker, devi creare un account Docker Hub. Puoi creare un account su https://hub.docker.com/account/signup/. Puoi anche creare un account dalla riga di comando utilizzando il comando seguente:
# docker loginCome creare un repository pubblico/privato in Docker Hub e collegarlo in remoto utilizzando la riga di comando
Puoi cercare immagini Docker ed estrarre (scaricare) immagini da Docker Hub senza disporre di un account. Per inviare (caricare) immagini, lasciare commenti su un'immagine o un repository e utilizzare tutti i servizi Docker Hub disponibili, è necessario un account Docker Hub.
Installazione e avvio di Docker
L'installazione e l'avvio del servizio Docker è un compito facile. Puoi utilizzare il comando seguente per installare il pacchetto Docker:
# yum install docker
Utilizzare il comando systemctl per abilitare e avviare il servizio Docker.
# systemctl enable docker # systemctl start docker
Per impostazione predefinita, Docker utilizza devicemapper come driver di archiviazione. Con RedHat Linux 7, puoi configurare Docker Engine per utilizzare Btrfs. Ciò ti consente di sfruttare le funzionalità di snapshot di Btrfs. Il comando seguente mostra tutti i file installati dal pacchetto Docker:
# rpm -ql docker /etc/docker /etc/docker/certs.d /etc/docker/certs.d/redhat.com /etc/docker/certs.d/redhat.com/redhat-ca.crt /etc/docker/certs.d/redhat.io /etc/docker/certs.d/redhat.io/redhat-ca.crt ...
Puoi vedere che, oltre ai binari della finestra mobile e ai file di configurazione, la documentazione e le pagine man sono installate per tutti i comandi della finestra mobile. La directory /var/lib/docker è vuota fino all'avvio del servizio Docker. La seguente serie di comandi mostra il contenuto della directory prima e dopo l'avvio della finestra mobile.
# ls /var/lib/docker # systemctl enable docker # systemctl start docker # ls /var/lib/docker containers graph linkgraph.db tmp volumes devicemapper init repositories-devicemapper trust
L'utilità Docker
L'interfaccia della riga di comando della finestra mobile ha oltre 30 comandi. Fare riferimento alla pagina man della finestra mobile per un elenco dei comandi. Il comando docker info visualizza informazioni a livello di sistema sull'installazione di Docker. Per ulteriori informazioni, vedere la pagina man di docker-info. Nota che il driver di archiviazione predefinito è devicemapper e che i dati e i metadati sono archiviati in dispositivi loop:/dev/loop0 e /dev/loop1.
# docker info Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 Server Version: 1.13.1 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: false Native Overlay Diff: true Logging Driver: journald ...
Gli utenti diversi da root possono eseguire comandi Docker se li aggiungi al gruppo Docker e riconfigura il servizio Docker.
Ricerca di immagini nel registro Docker Hub
Utilizzare il comando di ricerca Docker per cercare immagini nell'Hub Docker. Di seguito è mostrato l'output del comando "ricerca nella finestra mobile":
# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 52 [OK] docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 40 [OK] ...
Questo comando cerca nell'hub Docker le immagini "centos". L'output include il nome del repository/immagine, una descrizione, il numero di stelle assegnate, se l'immagine è ufficiale e se è automatizzata. La colonna del nome è nella forma seguente e può includere il repository che la contiene per fornire un'identificazione univoca:
[repository_name]/[image_name]
Le stelle misurano la popolarità delle immagini. Chiunque abbia un account Docker Hub può aggiungere un'immagine a Speciali se gli piace. L'esempio seguente cerca immagini "centos" con almeno 3 stelle:
# docker search -s 3 centos Flag --stars has been deprecated, use --filter=stars=3 instead INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] ...
Un repository "ufficiale" è certificato da un fornitore o collaboratore di Docker. Un'immagine "automatizzata" viene creata dal processo di creazione automatizzato di Docker Hub.
Download di immagini da Docker Hub
Utilizzare il comando "docker pull" per scaricare un'immagine o un repository dal registro Docker Hub al sistema locale. L'esempio seguente tira giù l'immagine centos:latest.
# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:latest
Usa il comando "immagini docker" per elencare le immagini archiviate nel repository Docker locale.
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB
Ogni immagine in un repository è contraddistinta da TAG e ID IMMAGINE.
Di seguito viene mostrata la posizione dei file di configurazione della finestra mobile.
# cd /var/lib/docker/ # ll total 4 drwx------. 3 root root 77 Apr 21 07:57 containers drwx------. 3 root root 21 Apr 21 07:56 image drwxr-x---. 3 root root 18 Apr 21 07:56 network drwx------. 6 root root 4096 Apr 21 07:57 overlay2 drwx------. 4 root root 30 Apr 21 07:56 plugins drwx------. 2 root root 6 Apr 21 07:56 swarm drwx------. 2 root root 6 Apr 21 07:57 tmp drwx------. 2 root root 6 Apr 21 07:56 trust drwx------. 2 root root 24 Apr 21 07:56 volumesCome elencare / cercare / estrarre le immagini della finestra mobile su Linux
Esecuzione di un'applicazione all'interno di un container
Utilizzare il comando docker run per eseguire un'applicazione all'interno di un contenitore. Questo comando avvia un processo con il proprio file system, la propria rete e il proprio albero di processi isolato. La seguente sintassi non include tutte le opzioni disponibili per il comando:
# docker run [OPTION...] IMAGE [COMMMAND] {ARG...]
L'IMMAGINE che avvia il processo può definire le impostazioni predefinite relative al processo da eseguire nel contenitore, nella rete e altro, ma le opzioni di esecuzione della finestra mobile hanno la precedenza sulle impostazioni nell'IMMAGINE. Se IMAGE non è disponibile localmente, docker run estrae l'immagine allo stesso modo del comando docker pull prima di avviare il contenitore nell'IMAGE.
Di seguito sono riportati due esempi di utilizzo di Docker Run. Il primo esempio utilizza l'immagine "centos", che esiste già sulla macchina locale. Docker utilizza l'immagine per creare un nuovo ambiente CentOS, quindi esegue il comando echo per visualizzare "Ciao".
# docker run centos /bin/echo "Hello" Hello
Il secondo esempio utilizza l'immagine fedora, che non è presente nel sistema locale. Docker estrae l'immagine da Docker Hub, quindi usa l'immagine per creare un nuovo ambiente Fedora ed esegue il comando echo.
# docker run fedora /bin/echo "Hello" Unable to find image 'fedora:latest' locally Trying to pull repository docker.io/library/fedora ... latest: Pulling from docker.io/library/fedora 2176639d844b: Pull complete Digest: sha256:ec588fc80b05e19d3006bf2e8aa325f0a2e2ff1f609b7afb39176ca8e3e13467 Status: Downloaded newer image for docker.io/fedora:latest Hello
In entrambi gli esempi, i contenitori Docker si fermano dopo che sullo schermo viene visualizzato "Hello". Usa il comando docker ps per elencare i contenitori e non vengono visualizzati contenitori:
# docker ps
Questo perché "docker ps" mostra solo i contenitori attualmente in esecuzione. Per mostrare tutti i container compresi quelli fermi, usa il comando “docker ps -a”.
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b772ea59c92 fedora "/bin/echo Hello" 25 seconds ago Exited (0) 23 seconds ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" About a minute ago Exited (0) About a minute ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
Il comando docker images mostra che l'immagine "più recente" dal repository "fedora" è stata scaricata da Docker Hub quando si utilizza il comando docker run:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB docker.io/fedora latest 9110ae7f579f 6 weeks ago 235 MB
Esecuzione di un contenitore Docker interattivo
Usa –t e –i opzioni con il comando docker run per eseguire un contenitore interattivo. Queste opzioni sono descritte:
- -t :Assegna uno pseudo-tty e collegalo allo STDIN (standard input) di un container
- -i :Tenere aperto lo STDIN di un contenitore
Di seguito sono riportati due esempi di utilizzo dei comandi di esecuzione della finestra mobile con le opzioni –t e –i. In entrambi gli esempi, CentOS Linux 7.4 è in esecuzione sul sistema locale:
# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
Il primo esempio utilizza l'immagine "centos:7". Docker usa l'immagine per creare un nuovo ambiente CentOS e quindi esegue il comando della shell bash. La versione del sistema operativo di questa immagine è CentOS 7.
# docker run -t -i centos:7 /bin/bash [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
Il secondo esempio usa l'immagine di Ubuntu. Poiché non è stata specificata alcuna immagine specifica, Docker utilizza l'immagine Ubuntu "più recente" per creare un nuovo ambiente Ubuntu e quindi esegue il comando bash shell. La versione del sistema operativo di questa immagine è Ubuntu 16.04.4. Inoltre, poiché l'immagine di Ubuntu non è disponibile localmente, Docker prima la scaricherà dal repository e poi la eseguirà.
# docker run -t -i ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from docker.io/library/ubuntu d3938036b19c: Pull complete a9b30c108bda: Pull complete 67de21feec18: Pull complete 817da545be2b: Pull complete d967c497ce23: Pull complete Digest: sha256:9ee3b83bcaa383e5e3b657f042f4034c92cdd50c03f73166c145c9ceaea9ba7c Status: Downloaded newer image for docker.io/ubuntu:latest
root@9ee24718262c:/# cat /etc/os-release NAME="Ubuntu" VERSION="16.04.4 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.4 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial
Puoi usare il comando di uscita o premere CTRL + D per uscire da un contenitore interattivo.
Elenco dei contenitori e visualizzazione dei registri dei contenitori
Utilizzare il comando docker ps per elencare le informazioni sui contenitori Docker. Per impostazione predefinita, vengono elencati solo i contenitori in esecuzione. Includi –a opzione con il comando docker ps per mostrare tutti i contenitori. L'output include un ID contenitore univoco e un nome contenitore univoco che vengono generati automaticamente al momento della creazione del contenitore. L'output del comando docker ps include anche l'immagine utilizzata per creare il contenitore, il comando in esecuzione nel contenitore e le informazioni sullo stato. Le informazioni sullo stato includono quando è stato creato il contenitore e da quanto tempo è in esecuzione.
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ee24718262c ubuntu "/bin/bash" 3 minutes ago Exited (127) 2 seconds ago modest_turing b3e1316c4653 centos:7 "/bin/bash" 6 minutes ago Exited (0) 4 minutes ago gracious_pare 7b772ea59c92 fedora "/bin/echo Hello" 18 minutes ago Exited (0) 18 minutes ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" 19 minutes ago Exited (0) 19 minutes ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
Il comando docker logs guarda all'interno del contenitore e restituisce il suo output standard. Puoi utilizzare l'ID del contenitore o il nome del contenitore come argomento del comando.
# docker logs b3e1316c4653 [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@b3e1316c4653 /]# exit exit
Nell'esempio sopra, il comando docker logs mostra che il comando "cat /etc/redhat-release" è stato eseguito nel contenitore. I comandi docker ps e docker logs devono essere eseguiti dall'esterno del container, ovvero da un'altra finestra del terminale.
Visualizza tutte le informazioni per un contenitore o un'immagine
Utilizza il comando Docker inspect per visualizzare tutte le informazioni disponibili per un contenitore o un'immagine. L'esempio seguente mostra alcune delle informazioni visualizzate. Usa –f {{.section.subsection}} opzione per visualizzare un'informazione specifica. L'esempio seguente mostra solo le impostazioni di rete:
# docker inspect -f {{.NetworkSettings}} modest_turing {{ 98e04ea6d68753022ae2212b06b1514323927a1ed117448bc70ea3fa9a2f4a06 false 0 map[] /var/run/docker/netns/98e04ea6d687 [] []} { 0 0 } map[bridge:0xc4200c0300]}
L'esempio seguente mostra l'indirizzo IP:
# docker inspect -f {{.NetworkSettings.IPAddress}} modest_turing 172.17.0.10
L'esempio seguente mostra l'ID del processo:
# docker inspect -f {{.State.Pid}} modest_turing 7181
L'esempio seguente mostra il comando in esecuzione nel contenitore:
# docker inspect -f {{.Config.Cmd}} modest_turing [/bin/bash]
Se desideri visualizzare tutte le opzioni/proprietà del contenitore, non utilizzare alcuna opzione con "docker inspect":
# docker inspect modest_turing [ { "Id": "9ee24718262c9f7ed3320019163a8b1b2bb1bccc83eb362a5512a74eaa4ad57f", "Created": "2018-04-21T12:22:21.983441857Z", "Path": "/bin/bash", "Args": [], "State": { ....
Questo sarà un output piuttosto lungo che mostra tutte le proprietà del contenitore.
Creazione di un nuovo contenitore
Il comando docker run esegue un processo in un nuovo contenitore. Puoi anche utilizzare il comando docker create per creare un contenitore che puoi avviare in un secondo momento. La sintassi e le opzioni disponibili per la creazione della finestra mobile sono simili alla sintassi di esecuzione della finestra mobile.
L'esempio seguente crea un nuovo contenitore chiamato "geeklab" dall'immagine centos:7 e, una volta avviato, esegue il comando bash shell. Un nome contenitore viene generato automaticamente se ometti l'opzione –name.
# docker create -t -i --name geeklab centos:7 /bin/bash 667fd40faeb69113d035f08e5a910275a8463aa2a6a0796833f590e878732e17
L'output del comando è un ID contenitore univoco molto lungo. Il contenitore non si avvia immediatamente come mostrato dal comando docker ps, che mostra solo i contenitori in esecuzione per impostazione predefinita:
# docker ps
Devi eseguire "docker ps -a" per mostrare tutti i contenitori. L'esempio invia l'output a grep e cerca parte dell'ID contenitore:
# docker ps -a | grep 667fd 667fd40faeb6 centos:7 "/bin/bash" About a minute ago Created geeklab
Avvio, arresto e rimozione di un container
Utilizza "avvio Docker ” comando per avviare un container esistente. Usa –a e –i opzioni per collegare STDIN (input standard), STDOUT (output standard) e STDERR (errore standard) della shell corrente al container e far sì che tutti i segnali vengano inoltrati al container.
# docker start -a -i geeklab [root@667fd40faeb6 /]#
Dall'interno di un contenitore, utilizzare il comando di uscita o CTRL-d per arrestare il contenitore. Dall'esterno del container, ovvero da un'altra finestra del terminale, usa il comando Docker stop per fermare un container.
# docker stop geeklab
Utilizza la "docker rm ” comando per rimuovere un contenitore. Puoi rimuovere più contenitori in un unico comando. Usa –f opzione per rimuovere un contenitore in esecuzione.
# docker rm geeklab geeklab
Tutti e tre questi comandi docker accettano l'ID contenitore o il nome del contenitore come argomento.
Il comando docker rm rimuove un contenitore. Usa il comando docker rmi per rimuovere un'immagine:
# docker rmi [IMAGE]Come elencare/avviare/arrestare/eliminare i contenitori docker
Esecuzione di comandi aggiuntivi in un container in esecuzione
Utilizzare il comando docker exec per eseguire un comando in un contenitore in esecuzione. Simile al comando di esecuzione della finestra mobile, includi le opzioni –t e –i per eseguire un comando interattivo. Fornisci l'ID del contenitore o il nome del contenitore come argomento.
Nell'esempio seguente, il comando docker exec avvia una nuova shell bash interattiva nel contenitore "guest":
# docker exec -t -i geeklab /bin/bash [root@68b5b713c37b /]#
L'esempio seguente utilizza il comando docker exec per avviare il servizio sshd nel contenitore "geeklab". Il contenitore "geeklab" esegue CentOS 6.4. In questo esempio, le opzioni -t e -i non sono necessarie.
# docker exec guest service sshd start Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ]
Il servizio sshd viene avviato sul contenitore e il controllo ritorna al sistema host di avvio.