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

Come utilizzare le immagini Docker, i contenitori e i file Docker in modo approfondito

Le immagini Docker semplificano la distribuzione di più contenitori senza dover mantenere la stessa immagine su più macchine virtuali. Puoi utilizzare un Dockerfile per automatizzare l'installazione e la configurazione di un'immagine e delle sue dipendenze. ADockerfile è un file di testo dei comandi (che vengono eseguiti in ordine) utilizzato per automatizzare l'installazione e la configurazione di un'immagine Docker. Questo articolo amplia la nostra guida su Come utilizzare un Dockerfile per creare un'immagine Docker trattando l'utilizzo approfondito di immagini Docker, contenitori e Dockerfile.

Prima di iniziare

  1. Acquisisci familiarità con la nostra Guida introduttiva, crea e aggiorna un Linode e installa Docker. In alternativa, puoi distribuire rapidamente un Linode aggiornato abilitato per Docker con l'app Docker Marketplace.

  2. Assicurati che il tuo Linode sia sicuro seguendo la nostra guida su Configurazione e protezione di un'istanza di calcolo.

  3. Questa guida presuppone che tu abbia dimestichezza con l'utilizzo dell'interfaccia della riga di comando (CLI) di Docker. Per ulteriori informazioni sulla Docker CLI, consulta la loro documentazione.

  4. Consulta la nostra guida per acquisire familiarità con le basi di Dockerfiles.

Crea il tuo Dockerfile per l'immagine Docker

Docker richiede un Dockerfile funzionante per le sue build. Qui creeremo un Dockerfile che configura un'immagine Ubuntu con Apache che funge da server Web e utilizza la porta HTTP standard 80.

  1. Al prompt dei comandi (tramite SSH o Lish in Linode Manager), crea e cambia in una nuova directory:

    mkdir ~/mydockerbuild && cd ~/mydockerbuild
    
  2. Crea un Dockerfile di esempio per la tua applicazione Apache:

    touch apache_dockerfile
    
  3. Apri il Dockerfile usando l'editor di testo di tua scelta (per questo esempio utilizziamo nano):

    nano apache_dockerfile
    
  4. Copia il seguente esempio nel tuo Dockerfile. Questo crea un Dockerfile che genera un'immagine Ubuntu aggiornata, imposta le informazioni sul manutentore, installa Apache, apre la porta del contenitore 80 e infine avvia un server Apache quando viene eseguito:

    File:apache_dockerfile
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    FROM ubuntu
    MAINTAINER John Doe [email protected]
    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get update
    RUN apt-get upgrade -y
    RUN apt-get install apache2 -y
    RUN apt-get clean
    EXPOSE 80
    CMD ["apache2ctl","-D","FOREGROUND"]
    Nota Il ARG DEBIAN_FRONTEND=noninteractive l'istruzione assicura che il successivo RUN apt-get i comandi vengono eseguiti senza richiedere l'input aggiuntivo dell'utente durante la creazione di immagini. Questa istruzione può anche essere scritta usando ENV invece di ARG per fare in modo che la variabile di ambiente persista nei contenitori distribuiti con l'immagine. Poiché potrebbe non essere prevista non interattività quando si lavora all'interno di tali contenitori, ARG è consigliato in questo caso.
  5. Salva e chiudi il file.

Crea un'immagine Docker dal Dockerfile

  1. Crea un'immagine con l'etichetta apache_image dal Dockerfile utilizzando il docker build comando:

    docker build ~/mydockerbuild -f apache_dockerfile -t apache_image
    
  2. Una volta che la build è finita e sei tornato al prompt dei comandi, mostra le immagini disponibili del tuo sistema con il seguente comando:

     docker images
    

    L'output dovrebbe essere simile a questo (il repository "ubuntu" è disponibile anche a causa della riga "FROM ubuntu" nel Dockerfile):

    REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
    apache_image   latest    7e5c14739da5   7 seconds ago   215MB
    ubuntu         latest    7e0aa2d69a15   6 weeks ago     72.7MB
    Nota

    Per impostazione predefinita, le immagini costruite sono contrassegnate come "più recenti". Se vuoi modificare il tag, ad esempio in “sviluppo”, formatta il comando come segue:

    docker build ~/mydockerbuild -f apache_dockerfile -t apache_image:development
    

Esecuzione delle immagini Docker come contenitori

Quando esegui docker run comando, avvii un contenitore Docker legato alla tua sessione terminale. Questa operazione viene anche definita esecuzione di un processo in primo piano . Quando il tuo processo di root è in primo piano ed è legato a una sessione del terminale, il tuo contenitore si chiude non appena chiudi la sessione del terminale. Se desideri che il tuo container venga eseguito anche dopo la chiusura della sessione del terminale, puoi eseguire il tuo container in distaccato modalità. Questo esegue il tuo container in sfondo .

Per eseguire l'immagine Docker come contenitore in modalità separata:

  1. Immettere il comando seguente per creare un contenitore denominato apache con la tua immagine, usando il -d argomento per garantire che il tuo contenitore venga eseguito in background:

    docker run --name apache -d apache_image
    
  2. Una volta tornato al prompt dei comandi, esegui il comando seguente per elencare i contenitori attivi e confermare che apache in esecuzione in background:

    docker ps
    
    CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
    1d5e1da50a86   apache_image   "apache2ctl -D FOREG…"   3 minutes ago   Up 3 minutes   80/tcp    apache
  3. Ora puoi svolgere il tuo lavoro di sviluppo con il server Apache e avere ancora accesso alla riga di comando. Tuttavia, il tuo container non è accessibile pubblicamente in quanto manca di configurazioni di porte aggiuntive. Nella prossima sezione ricostruirai il container con le configurazioni delle porte che ti permetteranno di accedere al web server. Per ora, ferma il contenitore:

    docker stop apache
    
    Nota Puoi inserire l'ID contenitore al posto di apache nel comando precedente.
  4. Inserisci docker ps di nuovo per assicurarti che tutti i tuoi apache il contenitore non è più in esecuzione.

  5. Ora che il contenitore è stato fermato, puoi rimuoverlo:

    docker rm apache
    
Attenzione

La rimozione di un contenitore in questo modo elimina tutti i dati all'interno del contenitore. Se hai apportato modifiche che desideri trasferire in un nuovo container, puoi invece utilizzare docker commit per creare una nuova immagine che includa i tuoi aggiornamenti:

docker commit apache apache_image_update

Quindi, puoi distribuire un nuovo contenitore basato sul nuovo apache_image_update immagine nella prossima sezione.

Configura le porte del tuo container Docker

Puoi usare run le opzioni del comando per configurare diversi aspetti del tuo contenitore. Quando il tuo container viene eseguito su un host remoto e serve la sua applicazione, puoi configurarne le porte per esporre l'app agli utenti.

Ad esempio, puoi configurare il tuo apache contenitore per utilizzare la porta host 8080 e porta container 80 come con il comando di esempio seguente. Notare il -d opzione utilizzata nel comando per eseguire il contenitore come processo separato.

docker run --name apache -p 8080:80 -d apache_image

La sintassi generale per questo comando è la seguente:

docker run -–name <container name> -p <network port>:<container port> -d <container image label or ID>

Ciascun parametro è descritto nel seguente elenco:

  • <container name> :Nome del contenitore Docker
  • <host port> :porta host mappata sulla porta aperta del container
  • <container port> :porta in cui è in ascolto il container Docker
  • <container image name> :nome dell'immagine Docker utilizzato per la distribuzione

Ora, vai all'indirizzo IP del tuo Linode sulla porta host 8080 navigando su http://<your Linode's IP address>:8080 in un browser web. Dovresti vedere la "Pagina predefinita di Apache2 Ubuntu" servita dal tuo contenitore Docker.

Attenzione Quando si distribuiscono container con configurazioni di porte, Docker può anche creare regole del firewall host per consentire l'accesso pubblico a tali container. Questo può sovrascrivere o entrare in conflitto con le regole del firewall host che hai configurato sul tuo Linode.

Ulteriori letture

Questa guida e Come utilizzare un Dockerfile per creare un'immagine Docker ha illustrato le nozioni di base sull'utilizzo di Dockerfile per creare immagini e contenitori, ma non graffiano a malapena la superficie di ciò che puoi realizzare con Docker. Per ulteriori informazioni:

  • visita la documentazione ufficiale sulle migliori pratiche di Dockerfile per ulteriori informazioni su Dockerfiles;

  • e, nonostante il nome, la guida introduttiva di Docker è un tutorial approfondito, che conduce a guide ancora più approfondite, come la distribuzione di applicazioni nel cloud e la configurazione di CI/CD (integrazione e distribuzione continue).

Maggiori informazioni

Si consiglia di consultare le seguenti risorse per ulteriori informazioni su questo argomento. Sebbene questi siano forniti nella speranza che possano essere utili, tieni presente che non possiamo garantire l'accuratezza o la tempestività dei materiali ospitati esternamente.

  • Best practice per la scrittura di Dockerfile
  • Immagini Docker ufficiali su Docker Hub
  • Documenti Docker

Docker
  1. Come esportare e importare contenitori Docker

  2. Come installare e utilizzare Docker in Ubuntu 20.04

  3. Come usare Docker Compose

  4. Come utilizzare un Dockerfile per creare un'immagine Docker

  5. Come e perché utilizzare un host Docker remoto

Che cos'è Docker Compose e come lo usi?

Come utilizzare Docker Cp per copiare file tra host e contenitori

Come ripulire ed eliminare le immagini Docker

Come usare Hadolint per peluccare i tuoi file Docker

Come installare e utilizzare Docker su Ubuntu 20.04

Come installare e utilizzare Docker su AlmaLinux 8