Clean Build eines Images in Docker erzwingen
- Erstellen Sie ein Image in Docker
-
Verwenden Sie die Option
--no-cache
, um den sauberen Build eines Images in Docker zu erzwingen
In diesem Tutorial wird erläutert und demonstriert, wie Sie einen sauberen Build eines Images in Docker erzwingen.
Erstellen Sie ein Image in Docker
Wir werden eine einfache Flask-Anwendung verwenden, um dieses Konzept zu demonstrieren. Erstellen Sie mit dem folgenden Befehl eine einfache Anwendung namens app.py
im Hauptordner my-app
.
touch app.py
Installieren Sie Python3, wenn Sie den Befehl nicht verwendet haben.
sudo apt update && sudo apt install python3-venv
Wir können Flask und Gunicorn auch mit dem Befehl installieren.
pip install flask gunicorn
Fahren Sie fort, um eine Docker-Datei mit dem Befehl touch Dockerfile
zu erstellen. Um uns das Erstellen einer Docker-Datei zu erleichtern, erstellen wir eine requirements.txt
-Datei.
Wir können eine requirements.txt
-Datei erstellen, indem wir den Befehl pip freeze > requirements.txt
ausführen. Sobald Sie fertig sind, sollte Ihre Dateistruktur der folgenden ähneln.
Wir können mit der Datei app.py
fortfahren und unsere Anwendung erstellen. Die Anwendung enthält eine einfache Funktion, die eine Konsolennachricht ausgibt, wie unten gezeigt.
from flask import Flask
app = Flask(__name__)
def hello():
print("Hello, this is a simple Flask application")
hello()
Hier ist das zu erwartende Ergebnis, wenn wir den obigen Code ausführen.
Jetzt füllen wir unser Dockerfile mit Befehlen, die Docker zum Erstellen eines Images verwendet. Diese Befehle werden ausgeführt, wenn wir den Docker-Container ausführen.
Wir werden in diesem Fall Python als unser Basis-Image verwenden. Das Dockerfile sollte so aussehen.
# 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
Sobald wir unser Dockerfile bereit haben, können wir es speichern und unser Image zum Testen lokal erstellen. Wir können den Befehl docker build
zusammen mit dem Tag -t
verwenden.
Dann können wir das Image mit dem Befehl docker run
testen, wie unten gezeigt.
(myapp) isaac@DESKTOP-HV44HT6:~/my-app$ docker run -it myapp
Hello, this is a simple Flask application
Wir bestätigen, dass wir erfolgreich einen neuen Container erstellt haben, indem wir den Befehl docker ps
verwenden.
$ 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
Verwenden Sie die Option --no-cache
, um den sauberen Build eines Images in Docker zu erzwingen
Angenommen, wir möchten nach dem Erstellen eines Containers mit diesem Image erneut ein Image mit demselben Image erstellen. In diesem Fall verwendet der Docker-Daemon den vorhandenen Cache der Bildebenen, um das Bild zu erstellen.
Wir können jedoch mit der Option --no-cache
einen sauberen Image-Build in Docker erzwingen. Dies überschreibt das Standardverhalten des Docker-Daemons.
So können wir das umsetzen.
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
Mit dem Befehl docker run
können wir einen neuen Container erstellen.
(myapp) isaac@DESKTOP-HV44HT6:~/my-app$ docker run -it myapp
Hello, this is a simple Flask application
Wie unten zu sehen ist, haben wir erfolgreich einen neuen Container erstellt und Docker mit der Option --no-cache
zu einem sauberen Build eines Images gezwungen.
$ 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