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
-
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.
-
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.
-
Al prompt dei comandi (tramite SSH o Lish in Linode Manager), crea e cambia in una nuova directory:
mkdir ~/mydockerbuild && cd ~/mydockerbuild
-
Crea un Dockerfile di esempio per la tua applicazione Apache:
touch apache_dockerfile
-
Apri il Dockerfile usando l'editor di testo di tua scelta (per questo esempio utilizziamo nano):
nano apache_dockerfile
-
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 successivoRUN apt-get
i comandi vengono eseguiti senza richiedere l'input aggiuntivo dell'utente durante la creazione di immagini. Questa istruzione può anche essere scritta usandoENV
invece diARG
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. -
Salva e chiudi il file.
Crea un'immagine Docker dal Dockerfile
-
Crea un'immagine con l'etichetta
apache_image
dal Dockerfile utilizzando ildocker build
comando:docker build ~/mydockerbuild -f apache_dockerfile -t apache_image
-
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:
-
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
-
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
-
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. -
Inserisci
docker ps
di nuovo per assicurarti che tutti i tuoiapache
il contenitore non è più in esecuzione. -
Ora che il contenitore è stato fermato, puoi rimuoverlo:
docker rm apache
AttenzioneLa 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