Un Dockerfile è la ricetta per creare un'immagine Docker.
Questo è il flusso di lavoro:prima crei un Dockefile, quindi crei un'immagine Docker da esso usando docker build
e infine esegui un contenitore dall'immagine.
Un Dockerfile è un file di testo con istruzioni su come creare un'immagine.
Queste istruzioni fanno parte di un linguaggio di configurazione, che include parole chiave come FROM
, LABEL
, RUN
, COPY
, ENTRYPOINT
, CMD
, EXPOSE
, ENV
e altro ancora.
Creiamo il nostro primo Dockerfile:
Diciamo che hai una cartella con una semplice app Node.js composta da un app.js
, un package.json
file che elenca un paio di dipendenze che devi installare prima di eseguire l'app e package-lock.json
.
Al suo interno, crea un file di testo semplice chiamato Dockerfile
, senza estensione, con questo contenuto:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json app.js ./
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]
NOTA:usa virgolette doppie nel CMD
linea. Le virgolette singole risulteranno in un errore.
Nella prima riga diciamo da quale immagine vogliamo partire. Questa sarà la nostra immagine di base. In questo caso prenderà l'immagine ufficiale di Node.js, basata su Alpine Linux, utilizzando il nodo 14. Quando si crea un container dal Dockerfile, Docker otterrà quell'immagine da Docker Hub.
Quindi impostiamo la directory di lavoro su /usr/src/app
, il che significa che tutti i nostri comandi verranno eseguiti in quella cartella fino a quando non la cambieremo di nuovo. Questa è una cartella che sappiamo già esiste nell'immagine del nodo.
Copiamo il package.json
, package-lock.json
(usando il *
jolly) e app.js
file presenti nella cartella corrente, nella directory di lavoro.
Eseguiamo npm install
per installare i pacchetti elencati in package.json
file.
Quindi esponiamo la porta 3000 all'esterno, poiché è su questo che gira la nostra app. Un container è isolato al 100% dalla rete a meno che tu non esponga una delle sue porte usando EXPOSE
comando. Vedremo in seguito come mappare le porte sul nostro computer alle porte in un container Docker.
Infine eseguiamo node app.js
per avviare l'app.
Questo è un Dockerfile e vedremo presto come creare effettivamente un contenitore da esso.