Exécuter l'instance Docker à partir de Dockerfile

Isaac Tony 23 aout 2022
Exécuter l'instance Docker à partir de Dockerfile

Les conteneurs Docker sont sans aucun doute devenus l’unité standard en matière de gestion des logiciels et des dépendances dans différents environnements. Lorsque vous travaillez avec de vraies applications, vous devez créer un fichier Docker avant de créer l’image de conteneur de votre application.

Un Dockerfile est simplement un document texte en lecture seule avec des instructions définies lors de l’assemblage d’une image Docker. D’autre part, une image Docker est un ensemble d’instructions, de code d’application, de dépendances, d’outils et de bibliothèques utilisés pour créer un conteneur Docker.

Par conséquent, un conteneur est une instance exécutable de l’image Docker assemblée à partir d’un Dockerfile.

Cet article vous guidera à travers les étapes pour créer un Dockerfile et exécuter une instance Docker à partir de ce fichier.

Étapes pour exécuter une instance Docker à partir de Dockerfile

Nous devons suivre les étapes ci-dessous pour exécuter une instance Docker à partir du Dockerfile.

Créer un fichier Docker

Pour créer un Dockerfile, nous devons comprendre ses composants. Certaines des commandes les plus courantes incluent :

  • FROM : crée un calque de l’image parent/base utilisée.
  • WORKDIR : permet de définir le répertoire de travail.
  • COPY : permet de copier le contenu du répertoire courant dans un répertoire du conteneur.
  • PULL : ajoute des fichiers depuis votre référentiel Docker.
  • RUN : est exécuté lorsque nous voulons construire l’image.
  • CMD : spécifie la commande à exécuter au démarrage du conteneur.
  • ENV : définit les variables d’environnement utilisées lors de la construction.
  • ENTRYPOINT : détermine la commande à exécuter au démarrage du conteneur.
  • MAINTAINER : précise l’auteur de l’image.

Pour créer un Dockerfile, nous allons d’abord commencer par créer le répertoire principal qui hébergera, entre autres fichiers, le Dockerfile. Nous allons créer une simple application Flask qui imprime un message sur la console.

mkdir my-app

Maintenant, nous nous déplaçons dans ce répertoire et créons le fichier principal de votre application en tant que app.py. Ce fichier contient le code d’application du programme.

from flask import Flask

app = Flask(__name__)


def hello():

    print("Hello, this is a simple Flask application")


hello()

Nous pouvons maintenant procéder à la création de notre Dockerfile et le remplir avec les commandes nécessaires pour créer une image Docker.

touch Dockerfile

Nous avons également créé un fichier requirements.txt qui contient le fichier nécessaire à installer pour faire fonctionner cette application. Les exigences sont indiquées ci-dessous.

click==8.0.4
Flask==2.0.3
gunicorn==20.1.0
itsdangerous==2.1.0
Jinja2==3.0.3
MarkupSafe==2.1.0
Werkzeug==2.0.3

Nous allons éditer le Dockerfile et ajouter les commandes suivantes pour créer des images docker à l’aide de la commande docker build. Dans ce cas, Python est l’image de base.

Nous avons également défini le répertoire de travail et copié les fichiers nécessaires du répertoire actuel vers le répertoire du conteneur Docker.

#  base image
FROM python

# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
COPY ./requirements.txt /var/www/requirements.txt

# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
# Run the app
CMD ["echo", "Hello, Developer"]

Créer une image Docker

Nous procédons à la création d’une image Docker à l’aide de la commande docker build. Cependant, nous devons exécuter cette commande dans le même répertoire.

Syntaxe:

$ docker build [OPTIONS] PATH | URL | -

Dans le répertoire my-app, nous allons exécuter la commande ci-dessous. Le drapeau -t nous permet de marquer le nom de l’image et d’indiquer que le Dockerfile est dans le même répertoire que nous exécutons cette commande.

~/my-app$ docker build -t new_image .

Production:

[+] Building 184.4s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                                                       1.5s
 => => transferring dockerfile: 38B                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                          1.9s
 => => transferring context: 2B                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/python:latest                                                                          50.8s
 => [1/5] FROM docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55                           30.4s
 => => resolve docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55                            0.4s
 => => sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 2.14kB / 2.14kB                                             0.0s
 => => sha256:17e2d81e5757980ee40742d77dd5d3e1a69ad0d6dacb13064e1b018a6664ec72 2.22kB / 2.22kB                                             0.0s
 => => sha256:178dcaa62b393b539abc8b866c39be81e8ade01786880dc5d17ce3fe02426dbb 8.55kB / 8.55kB                                             0.0s
 => => sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3 2.34MB / 2.34MB                                            10.4s
 => => extracting sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3                                                 14.6s
 => [internal] load build context                                                                                                          1.1s
 => => transferring context: 195B                                                                                                          0.0s
 => [2/5] WORKDIR /var/www/                                                                                                                3.2s
 => [3/5] COPY ./app.py /var/www/app.py                                                                                                    1.9s
 => [4/5] COPY ./requirements.txt /var/www/requirements.txt                                                                                2.6s
 => [5/5] RUN pip install -r /var/www/requirements.txt                                                                                    82.3s
 => exporting to image                                                                                                                     8.1s
 => => exporting layers                                                                                                                    6.0s
 => => writing image sha256:5811f24b498ae784af32935318a5fddba536e2be27233b19bf08cad81438d114                                               0.2s
 => => naming to docker.io/library/new_image

Nous pouvons maintenant lister les images docker en utilisant la commande docker images ci-dessous.

~/my-app$ docker images

Production:

REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
new_image            latest    5811f24b498a   2 minutes ago   929MB

Exécuter l’instance à partir du Dockerfile

Pour créer une instance exécutable à partir de cette image docker, nous utiliserons la commande docker run pour créer un calque inscriptible sur l’image que nous avons créée précédemment.

Syntaxe:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Enfin, nous pouvons maintenant créer une instance exécutable à l’aide de la commande ci-dessus.

~/my-app$ docker run -it new_image
Hello, Developer
Auteur: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn