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
-
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.
-
Assicurati che il tuo Linode sia sicuro seguendo la nostra guida su Configurazione e protezione di un'istanza di calcolo.
-
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
odebian
, 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.
NotaRUN
,CMD
eENTRYPOINT
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:
-
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.
-
Crea un file Docker di esempio:
touch example_dockerfile
-
Apri il Dockerfile usando l'editor di testo di tua scelta (per questo esempio utilizziamo nano):
nano example_dockerfile
-
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!"]
-
Salva il Dockerfile.
-
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