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

Come utilizzare un Dockerfile per creare un'immagine Docker

Un Dockerfile è un file di testo di istruzioni utilizzato per automatizzare l'installazione e la configurazione di un'immagine Docker. I Dockerfile semplificano la distribuzione di più contenitori Docker senza dover mantenere la stessa immagine su più macchine virtuali. Le istruzioni vengono eseguite nell'ordine in cui appaiono nel Dockerfile, il che rende l'utilizzo e l'aggiornamento chiari e intuitivi. Questo articolo illustra le nozioni di base, con un esempio, di come funziona un 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.

Come funziona un Dockerfile?

Un Dockerfile è uno script che esegue diversi comandi e azioni per creare un'immagine Docker, che può quindi essere utilizzata per distribuire un container Docker. I comandi e le informazioni all'interno del Dockerfile possono essere configurati per utilizzare versioni software e dipendenze specifiche per distribuzioni stabili. Puoi anche utilizzare un registro Docker per archiviare e accedere alle tue immagini Docker pubbliche (o private).

Una volta che un Dockerfile è stato scritto, puoi usare la docker build comando per generare un'immagine Docker in base alle istruzioni del Dockerfile. Quindi, puoi distribuire un contenitore basato sull'immagine con comandi come docker run o docker create .

Di seguito sono riportate le istruzioni comuni che puoi utilizzare nei tuoi Dockerfile per creare immagini:

Definizioni di base

  • DA :Definisci l'immagine di base, come ubuntu o debian , utilizzato per avviare il processo di compilazione. Richiesto per ogni Dockerfile.
  • MANUTENTORE :Definisci il nome completo e l'indirizzo email del creatore dell'immagine.

Variabili

  • AMBIENTE :imposta le variabili di ambiente che persistono quando il container viene distribuito.
  • ARG :imposta una variabile di build-time passabile. Può essere utilizzato in alternativa a ENV per creare una variabile che non persista quando il contenitore viene distribuito dall'immagine.

Esecuzione del comando

  • Corri :esegue comandi, come i comandi di installazione del pacchetto, su un nuovo livello immagine.
  • CMD :esegui un comando specifico all'interno del contenitore distribuito con l'immagine o imposta i parametri predefiniti per un ENTRYPOINT istruzione. Viene utilizzato solo uno per Dockerfile.
  • PUNTO DI ENTRATA :consente di impostare un'applicazione predefinita da utilizzare ogni volta che un container viene distribuito con l'immagine. Viene utilizzato solo uno per Dockerfile.
  • UTENTE :imposta l'UID (il nome utente) per eseguire i comandi nel contenitore.
  • WORKDIR :Imposta il percorso del contenitore in cui vengono eseguiti i successivi comandi Dockerfile.
Nota RUN , CMD e ENTRYPOINT ciascuno può essere eseguito in shell form, che accetta argomenti normali, o exec form, che accetta argomenti come un array JSON. Perché exec form non invoca una shell di comando, è generalmente preferito e utilizzato in questa guida.

Gestione dei dati

  • AGGIUNGI :copia i file da un'origine al filesystem dell'immagine nella destinazione impostata con tarball automatico e gestione URL remota.
  • COPIA :Simile a ADD ma senza tarball automatico e gestione remota degli URL.
  • VOLUME :consente l'accesso da un punto di montaggio specificato nel contenitore a una directory sulla macchina host.

Rete

  • ESPOSIZIONE :espone una porta specifica per abilitare il collegamento in rete tra il container e il mondo esterno.

Successivamente, creeremo un Dockerfile di esempio che utilizza alcuni di questi comandi.

Creazione di un Dockerfile

Per creare il Dockerfile:

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

    mkdir ~/mydockerbuild && cd ~/mydockerbuild
    
    Nota Questo posiziona la directory di build Docker nella tua directory home. Per buona pratica, non archiviare il Dockerfile nella directory home stessa o nella directory principale del server. Invece, crea una directory separata e inserisci tutti i file necessari al suo interno (insieme al Dockerfile) come mostrato in questa guida.
  2. Crea un file Docker di esempio:

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

    nano example_dockerfile
    
  4. Copia il seguente esempio nel tuo Dockerfile. Questo crea un Dockerfile che genera un'immagine Debian, imposta le informazioni sul manutentore e restituisce semplicemente "Hello, Sunshine!" quando eseguito:

    File:example_dockerfile
    1
    2
    3
    
    FROM debian
    MAINTAINER Jane Doe [email protected]
    CMD ["echo", "Hello, Sunshine!"]
  5. Salva il Dockerfile.

  6. Inserisci cat example_dockerfile e assicurati che il testo di cui sopra sia incluso.

Creazione di un'immagine Docker da un Dockerfile

Costruisci l'immagine dal Dockerfile usando il docker build comando:

docker build ~/mydockerbuild -f example_dockerfile -t example_image

Etichettare la tua immagine con example_image semplifica la distribuzione di un container nel passaggio successivo.

L'output dovrebbe essere simile a questo:

Sending build context to Docker daemon  4.096kB
Step 1/3 : FROM debian
 ---> 4a7a1f401734
Step 2/3 : MAINTAINER Jane Doe [email protected]
 ---> Running in fdd81bd8b5c6
Removing intermediate container fdd81bd8b5c6
 ---> 1253842068a3
Step 3/3 : CMD ["echo", "Hello, Sunshine!"]
 ---> Running in d33e1bacf1af
Removing intermediate container d33e1bacf1af
 ---> a5d95e138b97
Successfully built a5d95e138b97
Successfully tagged example_image:latest

Come puoi vedere, le istruzioni da example_dockerfile vengono eseguiti in ordine. L'immagine denominata example_image è ora pronto per l'esecuzione per distribuire un container.

Esecuzione dell'immagine Docker per distribuire un container

L'esecuzione dell'immagine che hai appena creato per distribuire un container Docker è ora facile come inserire quanto segue:

docker run example_image

Un nuovo contenitore basato su example_image viene distribuito e il comando specificato nel CMD l'istruzione viene quindi eseguita dal contenitore con il seguente output:

Hello, Sunshine!
Nota Se la docker run il comando viene eseguito e l'immagine Docker non è disponibile nella directory di lavoro corrente, viene invece estratta dal registro Docker.

Ulteriori letture

Congratulazioni! Hai creato il tuo primo Dockerfile ed eseguito la tua prima immagine Docker.

Per ulteriori esempi e informazioni sull'utilizzo di Dockerfile con immagini e contenitori Docker, vedere:

  • la nostra guida su come utilizzare in modo approfondito immagini Docker, contenitori e file Docker;

  • Best practice di Docker's Dockerfile.

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 utilizzare le immagini Docker, i contenitori e i file Docker in modo approfondito

  2. Come usare Docker Compose

  3. Come utilizzare Dockerfile ONBUILD per eseguire trigger su build downstream

  4. Come configurare la finestra mobile per utilizzare il proxy

  5. Come creare un'immagine Docker da un contenitore e un file Docker

Come creare immagini Docker in una pipeline CI GitLab

Come creare un'immagine di Windows Docker con il tag di build Docker

Come ridurre le dimensioni dell'immagine Docker nei contenitori Docker

Come utilizzare Docker Commit per modificare le immagini del contenitore

Come creare un'immagine Docker personalizzata con Dockerfile

Come creare e inviare un'immagine Docker al repository Docker Hub