CodeGym /Corsi /Docker SELF /Creazione dell'immagine

Creazione dell'immagine

Docker SELF
Livello 13 , Lezione 3
Disponibile

4.1 Le basi del comando docker build

Il comando docker build è il modo principale per creare un'immagine Docker a partire da un Dockerfile. Prende le istruzioni dal Dockerfile e, passo dopo passo, le esegue formando l'immagine a strati. In questa lezione vedremo come funziona il comando docker build, quali parametri ha e come usarlo nella pratica.

Il comando docker build costruisce un'immagine a partire da un Dockerfile e dal cosiddetto contesto di build. Il contesto di build sono i file che Docker utilizza per creare l'immagine. Questo può essere una directory locale sulla tua macchina o, ad esempio, un repository su GitHub.

Sintassi


docker build [OPTIONS] PATH | URL | -

Dove:

  • PATH: il percorso della directory che contiene il Dockerfile e il contesto di build.
  • URL: l'indirizzo URL di un repository remoto.
  • -: lettura del Dockerfile dallo standard input (stdin).

Esempio di utilizzo base

In questo esempio Docker utilizzerà il Dockerfile dalla directory corrente (.) e creerà un'immagine con il nome myimage e il tag latest.

Terminale

docker build -t myimage:latest .

4.2 Personalizzazione del comando build

Principali parametri del comando docker build

Il comando docker build supporta un sacco di opzioni che permettono di configurare il processo di build.

1. Parametri -t, --tag

Il parametro -t o --tag viene usato per assegnare un nome e un tag all'immagine creata.

Terminal

docker build -t myimage:latest .

2. Parametri -f, --file

Il parametro -f o --file permette di specificare un Dockerfile alternativo, se differente dal Dockerfile standard.

Terminal

docker build -f Dockerfile.dev -t myimage:dev .

3. Parametro --build-arg

Il parametro --build-arg è usato per passare argomenti di build definiti tramite l'istruzione ARG nel Dockerfile.

Terminal

docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .

4. Parametro --no-cache

Il parametro --no-cache consente di eseguire il build senza utilizzare la cache. È utile per assicurarsi che tutti i comandi vengano eseguiti nuovamente.

Terminal

docker build --no-cache -t myimage:latest .

5. Parametro --target

Il parametro --target è usato per specificare lo stage di destinazione in una build multi-stage.

Terminal

docker build --target builder -t myimage:builder .

6. Parametro --rm

Il parametro --rm indica a Docker di rimuovere i container intermedi dopo una build dell'immagine riuscita (abilitato di default).

Terminal

docker build --rm -t myimage:latest .

4.3 Esempi di docker build

Esempio 1: Creazione di base

Supponiamo che tu abbia un'app semplice in Node.js e vuoi creare un'immagine Docker per il suo deployment.

Dockerfile:

dockerfile

FROM node:14

WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

Comando per la build:

Terminal

docker build -t mynodeapp:latest .

In questo esempio, Docker creerà un'immagine mynodeapp con il tag latest, usando il Dockerfile dalla directory corrente.

Esempio 2: Build con utilizzo di argomenti

Gli argomenti di build ti permettono di passare variabili al Dockerfile durante la creazione.

Dockerfile

dockerfile

FROM node:14

ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION}
        
WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

Comando per la build:

Terminal

docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .

In questo esempio, l'argomento APP_VERSION viene passato al Dockerfile, permettendo di specificare la versione dell'app durante la build.

Esempio 3: Build multi-stage

La build multi-stage viene usata per creare immagini che includano solo i componenti necessari. Questo permette di ridurre la dimensione dell'immagine finale.

Dockerfile

Dockerfile


# Fase di build
FROM node:14 AS builder
        
WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
RUN npm run build
        
# Creazione immagine finale con file minimali
FROM nginx:alpine
        
COPY --from=builder /app/build /usr/share/nginx/html

Comando per la build:

Terminal


docker build -t mywebapp:latest .

In questo esempio, si crea prima un'immagine intermedia builder, dove avviene la build dell'app. Dopo la build, l'app viene trasferita nell'immagine finale, che usa Nginx per servire il contenuto pronto.

4.4 Consigli pratici

1. Ottimizzazione dell'ordine delle istruzioni

Per un utilizzo efficiente della cache Docker, è importante ordinare correttamente le istruzioni. Ad esempio, copia prima i file che cambiano raramente, come package.json, per minimizzare la ricompilazione delle dipendenze. Poi esegui la copia degli altri file.

dockerfile

COPY package*.json ./
RUN npm install
COPY . .

2. Uso di .dockerignore

Aggiungi un file .dockerignore per escludere file e directory non necessari dal contesto di build. Questo ridurrà la dimensione del contesto e accelererà la creazione dell'immagine.

Esempio di .dockerignore:

Text

node_modules
dist
*.log

3. Build multi-stage

Usa la build multi-stage per creare immagini minimaliste e leggere. Questo approccio permette di includere solo i file e le dipendenze realmente necessari per l'esecuzione dell'applicazione, escludendo i dati superflui dal'immagine finale, come file temporanei o il codice sorgente.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION