CodeGym /Corsi /Docker SELF /Istruzioni principali di Dockerfile

Istruzioni principali di Dockerfile

Docker SELF
Livello 13 , Lezione 2
Disponibile

3.1 Istruzione FROM

Allora, ti ricordo, il Dockerfile è un file di testo che contiene istruzioni per creare un'immagine Docker. Ogni istruzione in un Dockerfile esegue un compito specifico e crea un nuovo layer nell'immagine. In questa lezione ci concentreremo sulle principali istruzioni Dockerfile: FROM, RUN, COPY e CMD, che sono fondamentali per creare immagini Docker funzionali ed efficienti.

L'istruzione FROM definisce l'immagine di base da cui verrà creata la nuova immagine. È la prima istruzione in ogni Dockerfile e stabilisce il punto di partenza per la costruzione dell'immagine.

Sintassi


FROM <image>[:<tag>] [AS <name>]

Dove:

  • <image>: il nome dell'immagine di base.
  • <tag>: (opzionale) la versione dell'immagine di base. Di default viene utilizzato latest.
  • AS <name>: (opzionale) assegnazione di un nome per questa fase di build (utilizzato nella build multi-stage).

Esempi

Utilizzo dell'immagine di base Ubuntu:

dockerfile


FROM ubuntu:20.04

Utilizzo dell'immagine ufficiale Node.js:

dockerfile


FROM node:14

Utilizzo della build multi-stage per ottimizzare:

dockerfile


FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
        
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

In questo esempio si utilizzano due immagini di base. La prima (node:14) viene utilizzata per costruire l'applicazione, la seconda (nginx:alpine) — per creare un server leggero che servirà i file statici.

Grazie all'utilizzo della build multi-stage, l'immagine finale contiene solo il set minimo di file e programmi (in questo caso Nginx e i file statici costruiti), rendendola più leggera e veloce per il deployment.

3.2 Istruzione RUN

L'istruzione RUN esegue comandi all'interno del container e crea un nuovo layer nell'immagine. Questa istruzione viene utilizzata per installare pacchetti, configurare l'ambiente ed eseguire altri comandi necessari per preparare l'immagine.

Sintassi:


RUN <command>

Dove:

  • <command>: comando che verrà eseguito all'interno del container.

Esempi:

Installazione di pacchetti in un'immagine Ubuntu:

dockerfile


RUN apt-get update && apt-get install -y curl git

Compilazione del codice:

dockerfile


RUN gcc -o myapp myapp.c

Unione di più comandi

Per ridurre il numero di layer, diminuire la dimensione dell'image e accelerare il build, è consigliato unire più comandi in una singola istruzione RUN.

dockerfile


RUN apt-get update \
    && apt-get install -y curl git \
    && rm -rf /var/lib/apt/lists/*

3.3 Istruzione COPY

L'istruzione COPY copia i file e le directory dal contesto di build al file system del container. È utile per trasferire il codice sorgente, i file di configurazione e altre risorse nel container.

Sintassi:


COPY <src> <dest>

Dove:

  • <src>: percorso dei file o delle directory nel contesto di build.
  • <dest>: percorso di destinazione nel container.

Esempi:

Copia di tutto il contenuto della directory corrente nella directory di lavoro del container:

dockerfile


COPY . /app

Copia di singoli file:

dockerfile


COPY package.json /app/package.json
COPY server.js /app/server.js

Uso del .dockerignore

Per escludere i file non necessari dal processo di copia si può usare il file .dockerignore, che funziona in modo simile a .gitignore.

Text


node_modules
dist
*.log

3.4 Istruzione CMD

L'istruzione CMD specifica il comando che verrà eseguito quando il container viene avviato. A differenza di RUN, che si esegue nella fase di build, CMD viene eseguita al momento dell'avvio del container dall'immagine creata.

Sintassi:


CMD ["executable","param1","param2"]

Oppure


CMD command param1 param2

Dove:

  • ["executable","param1","param2"]: forma exec, che è preferibile per garantire una corretta gestione dei segnali.
  • command param1 param2: forma shell, che esegue il comando in una shell.

Esempi:

Esecuzione di un'applicazione Node.js:

dockerfile


CMD ["node", "app.js"]

Esecuzione di uno script shell:

dockerfile


CMD /usr/bin/myscript.sh

La differenza tra CMD e ENTRYPOINT

CMD definisce un comando di default che può essere sovrascritto durante l'avvio del container. ENTRYPOINT specifica un comando immutabile che verrà sempre eseguito all'avvio del container.

Esempio di utilizzo di ENTRYPOINT:

dockerfile


ENTRYPOINT ["python", "script.py"]
CMD ["arg1"]

In questo esempio, ENTRYPOINT esegue uno script Python, mentre CMD passa gli argomenti che possono essere modificati durante l'avvio del container.

Esempio di Dockerfile con istruzioni principali

dockerfile

        
# Utilizziamo un'immagine base di Node.js
FROM node:14
        
# Impostiamo la directory di lavoro
WORKDIR /app
        
# Copiamo i file package.json e package-lock.json
COPY package*.json ./
        
# Installiamo le dipendenze
RUN npm install
        
# Copiamo il codice sorgente dell'applicazione
COPY . .
        
# Indichiamo la porta che l'app utilizzerà
EXPOSE 3000
        
# Definiamo il comando per avviare l'applicazione
CMD ["node", "app.js"]
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION