In questa breve guida, vorrei darti una breve introduzione a Dockerfile e ti insegnerò come usarlo per automatizzare il processo di creazione di immagini docker personalizzate. File Docker non è altro che un semplice file di testo con le istruzioni per creare un'immagine docker. Contiene tutti i comandi che un utente può chiamare sulla riga di comando per creare un'immagine. Possiamo usare il dockerfile per creare le nostre immagini personalizzate. Possiamo quindi condividere queste immagini Docker personalizzate tramite Docker Hub . Per chi se lo chiede, Docker Hub è un servizio di repository ospitato fornito da Docker per trovare e condividere immagini di container con il tuo team e, naturalmente, con chiunque nel mondo.
Immagina questo scenario. In precedenza, se vogliamo utilizzare Jenkins , quindi dobbiamo installare Jenkins con molti passaggi coinvolti. Grazie a Dockerhub, ora possiamo scaricare ed eseguire l'immagine del contenitore predefinita di Jenkins in un paio di minuti.
Immagine del contenitore Jenkins in DockerHub
Per estrarre l'immagine Jenkins da DockerHub, esegui:
# docker pull Jenkins
Dopo aver estratto le immagini della finestra mobile, possiamo usarle eseguendo l'immagine usando il comando:
# docker run -it -d -p 8080:8080 jenkins
È così semplice!
Per saperne di più sull'utilizzo di Docker, fai riferimento alla seguente guida.
- Introduzione a Docker
In Dockerhub sono disponibili oltre 100.000 immagini di container di fornitori di software, progetti open source e la community. Puoi cercare e scaricare qualsiasi immagine contenitore di tua scelta da Dockerhub e iniziare a utilizzarla immediatamente come mostrato sopra.
Comprendere il formato Dockerfile
Docker può creare immagini automaticamente leggendo le istruzioni da un Dockerfile.
Un tipico Dockerfile contiene le seguenti istruzioni:
1. DA - Imposterà l'immagine di base del contenitore.
Esempio:
FROM ubuntu:18.04
Imposterà l'immagine di base del contenitore come Ubuntu. Se il tag 18.04 non è specificato, prenderà un tag come "più recente".
2. ETICHETTA - È una coppia chiave-valore utilizzata per specificare le informazioni sui metadati dell'immagine.
Esempio:
LABEL ENV=”DEVELOPMENT”
3. Corri - Viene utilizzato per eseguire il comando sull'immagine di base e creerà un nuovo livello.
Esempio:
RUN apt-get update RUN apt-get install tomcat
4. CMD - Viene utilizzato per impostare un comando da eseguire per primo all'avvio del contenitore.
Esempio:
CMD [“java”, “-jar”, “app.jar”]
5. ESPOSIZIONE - Esporrà la porta per accedere al container. Il contenitore sarà in ascolto su questa porta di rete. Possiamo accedere
l'output utilizzando questa porta.
Esempio:
EXPOSE 8080
6. MANTENENTE - Fornirà i dettagli dell'autore che ha creato questa immagine Docker.
Esempio:
MAINTAINER [email protected]
7. AMBIENTE - Viene utilizzato per impostare le variabili di ambiente nella coppia chiave-valore. Queste variabili vengono impostate durante la creazione dell'immagine
e sono disponibili dopo la creazione del contenitore.
Esempio:
ENV DB_NAME=”MySQL” ENV DB_VERSION=”8.0”
8. COPIA - Viene utilizzato per copiare i file locali nel contenitore.
Esempio:
COPY /target/devops.jar devops.jar
9. AGGIUNGI - Funziona come la copia ma ha alcune funzionalità in più come possiamo estrarre tar locale e aggiungere URL remoto.
Esempio:
ADD devops.tar.xz / . ADD http://example.com/abc.git /usr/local/devops/
10. PUNTO DI ENTRATA - Serve per impostare il comando principale per l'immagine. Funziona come l'istruzione CMD. Il
l'unica differenza tra CMD ed ENTRYPOINT è che le istruzioni non vengono sovrascritte in ENTRYPOINT.
Esempio:
ENTRYPOINT [“java”, “-jar”, “app.jar”]
11. VOLUME - Creerà un punto di montaggio con il nome specificato.
Esempio:
VOLUME /app/devops
12. UTENTE - Imposta il nome utente e il gruppo di utenti da utilizzare durante l'esecuzione dell'immagine.
Esempio:
USER dhruv USER admin
13. WORKDIR - Imposterà la directory di lavoro. Creerà la directory se non presente.
Esempio:
WORKDIR /var/lib/
Ecco un esempio di Dockerfile come riferimento.
FROM ubuntu:latest MAINTAINER Dhruv Tiwari "[email protected]" RUN apt-get install -y software-properties-common python RUN add-apt-repository ppa:chris-lea/node.js RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ precise universe" >> /etc/apt/sources.list RUN apt-get update RUN apt-get install -y nodejs RUN mkdir /var/www ADD app.js /var/www/app.js CMD ["/usr/bin/node", "/var/www/app.js"]
Consentitemi di mostrarvi un semplice esempio per creare un Dockerfile di esempio e creare un'immagine utilizzandolo.
Creazione di un Dockerfile
Crea un file denominato Dockerfile , aggiungi il contenuto nei file. Nell'esempio seguente, stiamo aggiornando e installando il vim e arricciare .
# cat dockerfile
FROM alpine RUN apk update RUN apk add vim RUN apk add curl
dockerfile per alpine
Ora abbiamo il Dockerfile in atto. Andiamo avanti e costruiamo un'immagine usando il Dockerfile.
Crea immagine utilizzando Dockerfile
Per creare un'immagine dal Dockerfile, esegui semplicemente:
# docker build -t devops .
Per favore, fai attenzione al punto (.) alla fine.
Come per il comando precedente, Docker inizierà a creare immagini automaticamente leggendo le istruzioni dal Dockerfile salvato nella directory di lavoro corrente.
Se il Dockerfile è salvato da qualche altra parte, puoi menzionarne il percorso usando -f segnala come sotto.
# docker build -f /path/to/a/Dockerfile .
Dopo aver creato l'immagine, possiamo eseguirla usando il comando:
# docker run -it devops
Questo è il modo in cui è possibile creare immagini di un contenitore personalizzate utilizzando Dockerfile. Spero questo sia di aiuto. Abbiamo coperto solo le basi. C'è molto di più che puoi fare con Dockerfile. Ti consiglio di fare riferimento al riferimento Dockerfile ufficiale guida per saperne di più.
Lettura consigliata:
- Spiegazione dei concetti di rete Docker
- Spiegazione dei volumi Docker con esempi
- Come aggiornare automaticamente i contenitori Docker in esecuzione
- ctop – Uno strumento di monitoraggio della riga di comando per i container Linux
- Portainer:il modo più semplice per gestire Docker
- PiCluster:una semplice applicazione di gestione Docker basata sul Web
- Dockly:gestisci i container Docker dal terminale
Informazioni sull'autore:
Dhruv Tiwari è un ingegnere DevOps che ama automatizzare le cose, lavorare con Linux su larga scala e sognare il giorno in cui i sistemi saranno abbastanza intelligenti da non dover mai accedere a una macchina Linux. Viaggio di CI/CD dal codice sorgente alla distribuzione del codice alla produzione.