Un Dockerfile est la recette pour construire une image Docker.
Voici le flux de travail :vous créez d'abord un Dockefile, puis vous en construisez une image Docker à l'aide de docker build
, et enfin vous exécutez un conteneur à partir de l'image.
Un Dockerfile est un fichier texte contenant des instructions sur la façon de créer une image.
Ces instructions font partie d'un langage de configuration, qui comprend des mots-clés comme FROM
, LABEL
, RUN
, COPY
, ENTRYPOINT
, CMD
, EXPOSE
, ENV
et plus encore.
Créons notre premier Dockerfile :
Disons que vous avez un dossier avec une simple application Node.js composée d'un app.js
, un package.json
fichier qui répertorie quelques dépendances que vous devez installer avant d'exécuter l'application, et package-lock.json
.
À l'intérieur, créez un fichier texte nommé Dockerfile
, sans extension, avec ce contenu :
FROM node:14
WORKDIR /usr/src/app
COPY package*.json app.js ./
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]
REMARQUE :utilisez des guillemets doubles dans le
CMD
doubler. Les guillemets simples entraîneront une erreur.
Dans la première ligne, nous disons de quelle image nous voulons commencer. Ce sera notre image de base. Dans ce cas, il prendra l'image officielle Node.js, basée sur Alpine Linux, en utilisant Node 14. Lors de la création d'un conteneur à partir du Dockerfile, Docker obtiendra cette image de Docker Hub.
Ensuite, nous définissons le répertoire de travail sur /usr/src/app
, ce qui signifie que toutes nos commandes seront exécutées dans ce dossier jusqu'à ce que nous le modifiions à nouveau. C'est un dossier dont nous savons qu'il existe déjà dans l'image du nœud.
Nous copions le package.json
, package-lock.json
(en utilisant le *
caractère générique) et app.js
fichiers présents dans le dossier en cours, dans le répertoire de travail.
Nous exécutons npm install
pour installer les packages listés dans le package.json
fichier.
Ensuite, nous exposons le port 3000 à l'extérieur, car c'est sur cela que notre application fonctionne. Un conteneur est isolé à 100 % du réseau, sauf si vous exposez l'un de ses ports à l'aide de la commande EXPOSE
commande. Nous verrons plus tard comment mapper les ports de notre ordinateur aux ports d'un conteneur Docker.
Enfin, nous exécutons node app.js
pour démarrer l'application.
Il s'agit d'un Dockerfile, et nous verrons bientôt comment créer un conteneur à partir de celui-ci.