Forcer la construction propre d'une image dans Docker
- Construire une image dans Docker
-
Utilisez l’option
--no-cache
pour forcer la construction propre d’une image dans Docker
Le tutoriel discutera et montrera comment forcer une construction propre d’une image dans Docker.
Construire une image dans Docker
Nous utiliserons une simple application Flask pour démontrer ce concept. À l’aide de la commande ci-dessous, créez une application simple nommée app.py
dans le dossier principal my-app
.
touch app.py
Installez Python3 si vous n’avez pas utilisé la commande.
sudo apt update && sudo apt install python3-venv
Nous pouvons également installer Flask et Gunicorn en utilisant la commande.
pip install flask gunicorn
Procédez à la création d’un fichier docker à l’aide de la commande touch Dockerfile
. Pour nous faciliter la création d’un fichier docker, nous créons un fichier requirements.txt
.
Nous pouvons créer un fichier requirements.txt
en exécutant la commande pip freeze > requirements.txt
. Une fois cela fait, votre structure de fichiers devrait être similaire à celle ci-dessous.
Nous pouvons passer au fichier app.py
et créer notre application. L’application contient une fonction simple qui imprime un message de console, comme illustré ci-dessous.
from flask import Flask
app = Flask(__name__)
def hello():
print("Hello, this is a simple Flask application")
hello()
Voici le résultat à attendre lorsque nous exécutons le code ci-dessus.
Nous allons maintenant remplir notre Dockerfile avec des commandes que Docker utilisera pour créer une image. Ces commandes seront exécutées lorsque nous exécuterons le conteneur docker.
Nous utiliserons Python comme image de base dans ce cas. Le Dockerfile devrait ressembler à ceci.
# 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 python3 app.py
Une fois que nous avons notre Dockerfile prêt, nous pouvons l’enregistrer et créer notre image localement pour les tests. Nous pouvons utiliser la commande docker build
à côté de la balise -t
.
Ensuite, nous pouvons tester l’image à l’aide de la commande docker run
, comme indiqué ci-dessous.
(myapp) isaac@DESKTOP-HV44HT6:~/my-app$ docker run -it myapp
Hello, this is a simple Flask application
Nous confirmerons que nous avons construit avec succès un nouveau conteneur à l’aide de la commande docker ps
.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd10c9a6a8a1 myapp "/bin/sh -c 'python3…" 11 minutes ago Exited (0) 10 minutes ago vigilant_brattain
Utilisez l’option --no-cache
pour forcer la construction propre d’une image dans Docker
Après avoir construit un conteneur à l’aide de cette image, supposons que nous voulions à nouveau construire une image à l’aide de la même image. Dans ce cas, le démon docker utilisera le cache existant des couches d’image pour créer l’image.
Cependant, nous pouvons forcer une construction d’image propre dans Docker en utilisant l’option --no-cache
. Cela remplace le comportement par défaut du démon docker.
Voici comment nous pouvons mettre cela en œuvre.
myapp) isaac@DESKTOP-HV44HT6:~/my-app$ docker build --no-cache -t myapp .
[+] Building 119.0s (10/10) FINISHED
=> [internal] load .dockerignore 1.6s
=> => transferring context: 2B 0.4s
=> [internal] load build definition from Dockerfile 2.1s
=> => transferring dockerfile: 38B 0.4s
=> [internal] load metadata for docker.io/library/python:latest 37.9s
=> [1/5] FROM docker.io/library/python@sha256:ee0b617025e112b6ad7a4c76758e4a02f1c429e1b6c44410d95b024304698ff2 0.1s
=> [internal] load build context 0.4s
=> => transferring context: 63B 0.0s
=> CACHED [2/5] WORKDIR /var/www/ 0.1s
=> [3/5] COPY ./app.py /var/www/app.py 1.3s
=> [4/5] COPY ./requirements.txt /var/www/requirements.txt 2.2s
=> [5/5] RUN pip install -r /var/www/requirements.txt 68.4s
=> exporting to image 4.8s
=> => exporting layers 3.8s
=> => writing image sha256:ee771b73a9ec468308375d139a35580f6c7f62988db9c0bb0b85794716406e92 0.1s
=> => naming to docker.io/library/myapp
Nous pouvons créer un nouveau conteneur en utilisant la commande docker run
.
(myapp) isaac@DESKTOP-HV44HT6:~/my-app$ docker run -it myapp
Hello, this is a simple Flask application
Comme on le voit ci-dessous, nous avons construit avec succès un nouveau conteneur et forcé Docker pour une construction propre d’une image en utilisant l’option --no-cache
.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
826b8de2c92f myapp "/bin/sh -c 'python3…" 47 seconds ago Exited (0) 39 seconds ago kind_pike
dd10c9a6a8a1 ba84c5d3b157 "/bin/sh -c 'python3…" 28 minutes ago Exited (0) 28 minutes ago vigilant_brattain
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