GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment utiliser un Dockerfile pour créer une image Docker

Un Dockerfile est un fichier texte d'instructions utilisées pour automatiser l'installation et la configuration d'une image Docker. Dockerfiles facilite le déploiement de plusieurs conteneurs Docker sans avoir à conserver la même image sur plusieurs machines virtuelles. Les instructions sont exécutées dans l'ordre où elles apparaissent dans le Dockerfile, ce qui rend leur utilisation et leur mise à jour claires et intuitives. Cet article couvre les bases, avec un exemple, du fonctionnement d'un Dockerfile.

Avant de commencer

  1. Familiarisez-vous avec notre guide de démarrage, créez et mettez à jour un Linode et installez Docker. Vous pouvez également déployer rapidement un Linode mis à jour et compatible Docker avec l'application Docker Marketplace.

  2. Assurez-vous que votre Linode est sécurisé en suivant notre guide sur la configuration et la sécurisation d'une instance de calcul.

  3. Ce guide suppose que vous maîtrisez l'utilisation de l'interface de ligne de commande Docker (CLI). Pour en savoir plus sur la CLI Docker, consultez leur documentation.

Comment fonctionne un Dockerfile ?

Un Dockerfile est un script qui exécute différentes commandes et actions pour créer une image Docker, qui peut ensuite être utilisée pour déployer un conteneur Docker. Les commandes et les informations contenues dans le Dockerfile peuvent être configurées pour utiliser des versions logicielles et des dépendances spécifiques pour des déploiements stables. Vous pouvez également utiliser un registre Docker pour stocker et accéder à vos images Docker publiques (ou privées).

Une fois qu'un Dockerfile est écrit, vous pouvez utiliser le docker build commande pour générer une image Docker basée sur les instructions du Dockerfile. Ensuite, vous pouvez déployer un conteneur basé sur l'image avec des commandes telles que docker run ou docker create .

Voici des instructions courantes que vous pouvez utiliser dans vos Dockerfiles pour créer des images :

Définitions de base

  • DE :Définissez l'image de base, telle que ubuntu ou debian , utilisé pour démarrer le processus de construction. Obligatoire pour chaque Dockerfile.
  • MAINTENEUR  :Définissez le nom complet et l'adresse e-mail du créateur de l'image.

Variables

  • ENV  :Définissez des variables d'environnement qui persistent lorsque le conteneur est déployé.
  • ARG :définissez une variable de temps de construction passable. Peut être utilisé comme alternative à ENV pour créer une variable qui ne persiste pas lorsque le conteneur est déployé à partir de l'image.

Exécution de la commande

  • EXÉCUTER  :Exécuter des commandes, telles que des commandes d'installation de package, sur un nouveau calque d'image.
  • CMD  :Exécutez une commande spécifique dans le conteneur qui est déployé avec l'image, ou définissez les paramètres par défaut pour un ENTRYPOINT instruction. Un seul est utilisé par Dockerfile.
  • POINT D'ENTRÉE :Définissez une application par défaut à utiliser chaque fois qu'un conteneur est déployé avec l'image. Un seul est utilisé par Dockerfile.
  • UTILISATEUR  :Définissez l'UID (le nom d'utilisateur) pour exécuter des commandes dans le conteneur.
  • REPERTOIRE  :Définissez le chemin du conteneur où les commandes Dockerfile suivantes sont exécutées.
Remarque RUN , CMD , et ENTRYPOINT peuvent chacun être exécutés dans shell form, qui prend des arguments normaux, ou exec form, qui prend les arguments sous la forme d'un tableau JSON. Parce que exec form n'invoque pas de shell de commande, il est généralement préféré et utilisé dans ce guide.

Gestion des données

  • AJOUTER  :copiez les fichiers d'une source vers le système de fichiers de l'image à la destination définie avec la gestion automatique de l'archive tar et de l'URL à distance.
  • COPIER  :Similaire à ADD mais sans gestion automatique de l'archive tar et de l'URL distante.
  • VOLUME  :Activer l'accès à partir d'un point de montage spécifié dans le conteneur à un répertoire sur la machine hôte.

Mise en réseau

  • EXPOSER  :Exposez un port spécifique pour activer la mise en réseau entre le conteneur et le monde extérieur.

Ensuite, nous allons créer un exemple de Dockerfile qui utilise certaines de ces commandes.

Création d'un Dockerfile

Pour créer le Dockerfile :

  1. À l'invite de commande (soit via SSH ou Lish dans le Linode Manager), créez et changez de répertoire :

    mkdir ~/mydockerbuild && cd ~/mydockerbuild
    
    Remarque Cela place le répertoire de construction Docker dans votre répertoire personnel. En tant que bonne pratique, ne stockez pas le Dockerfile dans votre répertoire personnel lui-même ou dans le répertoire racine du serveur. Au lieu de cela, créez un répertoire séparé et placez-y tous les fichiers nécessaires (à côté du Dockerfile) comme indiqué dans ce guide.
  2. Créez un exemple de Dockerfile :

    touch example_dockerfile
    
  3. Ouvrez le Dockerfile à l'aide de l'éditeur de texte de votre choix (pour cet exemple, nous utilisons nano) :

    nano example_dockerfile
    
  4. Copiez l'exemple suivant dans votre Dockerfile. Cela crée un Dockerfile qui génère une image Debian, définit les informations du responsable et renvoie simplement "Hello, Sunshine!" lors de l'exécution :

    Fichier :example_dockerfile
    1
    2
    3
    
    FROM debian
    MAINTAINER Jane Doe [email protected]
    CMD ["echo", "Hello, Sunshine!"]
  5. Enregistrez le fichier Docker.

  6. Saisissez cat example_dockerfile et assurez-vous que le texte ci-dessus est inclus.

Construire une image Docker à partir d'un Dockerfile

Construisez l'image à partir du Dockerfile en utilisant le docker build commande :

docker build ~/mydockerbuild -f example_dockerfile -t example_image

Étiqueter votre image avec example_image facilite le déploiement d'un conteneur à l'étape suivante.

Le résultat devrait ressembler à ceci :

Sending build context to Docker daemon  4.096kB
Step 1/3 : FROM debian
 ---> 4a7a1f401734
Step 2/3 : MAINTAINER Jane Doe [email protected]
 ---> Running in fdd81bd8b5c6
Removing intermediate container fdd81bd8b5c6
 ---> 1253842068a3
Step 3/3 : CMD ["echo", "Hello, Sunshine!"]
 ---> Running in d33e1bacf1af
Removing intermediate container d33e1bacf1af
 ---> a5d95e138b97
Successfully built a5d95e138b97
Successfully tagged example_image:latest

Comme vous pouvez le voir, les instructions de example_dockerfile sont exécutés dans l'ordre. L'image étiquetée example_image est maintenant prêt à être exécuté pour déployer un conteneur.

Exécuter votre image Docker pour déployer un conteneur

Exécuter l'image que vous venez de créer pour déployer un conteneur Docker est désormais aussi simple que de saisir ce qui suit :

docker run example_image

Un nouveau conteneur basé sur example_image est déployé, et la commande spécifiée dans le CMD L'instruction est ensuite exécutée à partir du conteneur avec la sortie suivante :

Hello, Sunshine!
Remarque Si le docker run est exécutée et que l'image Docker n'est pas disponible dans votre répertoire de travail actuel, elle est extraite du registre Docker à la place.

Lectures complémentaires

Toutes nos félicitations! Vous avez créé votre premier Dockerfile et exécuté votre première image Docker.

Pour plus d'exemples et d'informations sur l'utilisation de Dockerfiles avec des images et des conteneurs Docker, consultez :

  • notre guide sur l'utilisation détaillée des images, conteneurs et fichiers Docker Docker ;

  • Meilleures pratiques Docker de Docker.

Plus d'informations

Vous pouvez consulter les ressources suivantes pour plus d'informations sur ce sujet. Bien que ceux-ci soient fournis dans l'espoir qu'ils seront utiles, veuillez noter que nous ne pouvons pas garantir l'exactitude ou l'actualité des documents hébergés en externe.

  • Bonnes pratiques pour l'écriture de Dockerfiles
  • Images Docker officielles sur Docker Hub
  • Documents Docker

Docker
  1. Comment utiliser les images Docker, les conteneurs et les Dockerfiles en profondeur

  2. Comment utiliser Docker Compose

  3. Comment utiliser Dockerfile ONBUILD pour exécuter des déclencheurs sur des builds en aval

  4. Comment utiliser la commande Docker Inspect

  5. Comment valider les modifications apportées à une image Docker

Comment créer des images Docker dans un pipeline GitLab CI

Comment créer une image Windows Docker avec la balise Docker Build

Comment réduire la taille de l'image Docker dans les conteneurs Docker

Comment utiliser Docker Commit pour modifier les images de conteneur

Comment créer une image Docker personnalisée avec Dockerfile

Comment créer et envoyer une image Docker au référentiel Docker Hub