GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Guida per principianti al mondo Docker

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 / Fedora
Come 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 login
Come 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 volumes
Come 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.


Docker
  1. Una guida al terminale Linux per principianti

  2. Come modificare le immagini Docker

  3. Introduzione alle immagini Docker

  4. Guida per principianti a SELinux

  5. Come ottenere l'elenco delle immagini figlie dipendenti in Docker?

Come aggiornare le immagini Docker all'ultima versione

Docker per Mac:la guida all'installazione completa

Come installare e utilizzare Docker su Ubuntu (nel mondo reale)

Guida completa per la rimozione delle immagini Docker

Condivisione di immagini Docker su Docker Hub

Utilizzo delle immagini Docker dalla riga di comando