Android

Comment créer des images Docker avec Dockerfile

DOCKER - 6. CRÉER UNE IMAGE AVEC UN CONTENEUR

DOCKER - 6. CRÉER UNE IMAGE AVEC UN CONTENEUR

Table des matières:

Anonim

Une image Docker est le plan directeur des conteneurs Docker qui contient l'application et tout ce dont vous avez besoin pour exécuter l'application. Un conteneur est une instance d'exécution d'une image.

Dans ce didacticiel, nous expliquerons ce qu'est Dockerfile, comment en créer un et comment créer une image Docker avec Dockerfile.

Qu'est-ce que Dockerfile

Un Dockerfile est un fichier texte qui contient toutes les commandes qu'un utilisateur peut exécuter sur la ligne de commande pour créer une image. Il comprend toutes les instructions nécessaires à Docker pour créer l'image.

Les images Docker sont constituées d'une série de couches de système de fichiers représentant des instructions dans le fichier Docker de l'image qui constitue une application logicielle exécutable.

Le fichier Docker prend la forme suivante:

# Comment INSTRUCTION arguments

INSTRUCTION n'est pas sensible à la casse, mais la convention consiste à utiliser UPPERCASE pour ses noms.

Voici la liste avec une brève description de certaines des instructions Dockerfile les plus utilisées:

  • ARG - Cette instruction vous permet de définir des variables qui peuvent être transmises au moment de la construction. Vous pouvez également définir une valeur par défaut. FROM - L'image de base pour créer une nouvelle image. Cette instruction doit être la première instruction sans commentaire dans le Dockerfile. La seule exception à cette règle est lorsque vous souhaitez utiliser une variable dans l'argument FROM . Dans ce cas, FROM peut être précédé d'une ou plusieurs instructions ARG . LABEL - Utilisé pour ajouter des métadonnées à une image, telles que la description, la version, l'auteur..etc. Vous pouvez spécifier plusieurs LABEL et chaque instruction LABEL est une paire clé-valeur. RUN - Les commandes spécifiées dans cette instruction seront exécutées pendant le processus de construction. Chaque instruction RUN crée un nouveau calque au-dessus de l'image actuelle. ADD - Utilisé pour copier des fichiers et des répertoires de la source spécifiée vers la destination spécifiée sur l'image du docker. La source peut être des fichiers ou des répertoires locaux ou une URL. Si la source est une archive tar locale, elle est automatiquement décompressée dans l'image Docker. COPY - Similaire à ADD mais la source ne peut être qu'un fichier ou répertoire local. ENV - Cette instruction vous permet de définir une variable d'environnement. CMD - Utilisé pour spécifier une commande qui sera exécutée lorsque vous exécuterez un conteneur. Vous ne pouvez utiliser qu'une seule instruction CMD dans votre Dockerfile. ENTRYPOINT - Similaire à CMD , cette instruction définit la commande qui sera exécutée lors de l'exécution d'un conteneur. WORKDIR - Cette directive définit le répertoire de travail actuel pour les instructions RUN , CMD , ENTRYPOINT , COPY et ADD . UTILISATEUR - Définissez le nom d'utilisateur ou l' UID à utiliser lors de l'exécution des instructions RUN , CMD , ENTRYPOINT , COPY et ADD . VOLUME - Vous permet de monter un répertoire de machine hôte sur le conteneur. EXPOSE - Utilisé pour spécifier le port sur lequel le conteneur écoute lors de l'exécution.

Pour exclure des fichiers et des répertoires de l'ajout à l'image, créez un fichier .dockerignore dans le répertoire de contexte. La syntaxe du .dockerignore est similaire à celle du fichier .gitignore de Git.

Pour une référence complète et une explication détaillée des instructions Dockerfile, consultez la page de référence officielle Dockerfile.

Créer un Dockerfile

Le scénario le plus courant lors de la création d'images Docker consiste à extraire une image existante d'un registre (généralement à partir de Docker Hub) et à spécifier les modifications que vous souhaitez apporter à l'image de base. L'image de base la plus utilisée lors de la création d'images Docker est Alpine car elle est petite et optimisée pour être exécutée en RAM.

Le Docker Hub est un service de registre basé sur le cloud qui, entre autres fonctionnalités, est utilisé pour conserver les images Docker dans un référentiel public ou privé.

Dans cet exemple, nous allons créer une image Docker pour le serveur Redis. Nous utiliserons la dernière ubuntu 18.04 comme image de base.

Créez d'abord un répertoire qui contiendra le Dockerfile et tous les fichiers nécessaires:

mkdir ~/redis_docker

Accédez au répertoire et créez le Dockerfile suivant:

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Expliquons la signification de chacune des lignes du Dockerfile:

  • À la ligne 1 nous définissons l'image de base. L'instruction RUN qui commence à la ligne 3 mettra à jour l'index apt, installera le paquet «redis-server» et nettoiera le cache apt. Les commandes utilisées dans les instructions sont les mêmes que celles que vous utiliseriez pour installer redis sur le serveur Ubuntu. L'instruction EXPOSE définit le port sur lequel le serveur redis écoute. Dans la dernière ligne, nous utilisons l'instruction CMD pour définir la commande par défaut qui sera exécuté lors de l'exécution du conteneur.

Enregistrez le fichier et fermez l'éditeur.

Construire l'image

L'étape suivante consiste à créer l'image. Pour ce faire, exécutez la commande suivante à partir du répertoire où se trouve le Dockerfile:

docker build -t linuxize/redis.

L'option -t spécifie le nom de l'image et éventuellement un nom d'utilisateur et une balise au format 'username / imagename: tag'.

La sortie du processus de construction ressemblera à ceci:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

Une fois le processus de génération terminé, la nouvelle image sera répertoriée dans la liste des images:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

Exécution d'un conteneur

Maintenant que l'image est créée, vous en exécutez un conteneur en exécutant:

docker run -d -p 6379:6379 --name redis linuxize/redis

Les options -d indiquent à Docker d'exécuter le conteneur en mode détaché, l'option -p 6379:6379 publiera le port 6379 sur la machine hôte et l'option --name redis spécifie le nom du conteneur. Le dernier argument linuxize/redis est le nom de l'image, qui est utilisé pour exécuter le conteneur.

Lorsque le conteneur démarre, utilisez la commande suivante pour répertorier tous les conteneurs en cours d'exécution:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

Pour vérifier que tout fonctionne comme il se doit, utilisez le redis-cli pour vous connecter au conteneur redis-cli :

redis-cli ping

Le serveur redis devrait répondre avec PONG .

Conclusion

Ce didacticiel ne couvrait que les bases de l'utilisation de Dockerfiles pour créer des images. Pour en savoir plus sur la façon d'écrire des Dockerfiles et les meilleures pratiques recommandées, voir Meilleures pratiques pour écrire des Dockerfiles.

docker