Einführung in Docker
Tim Sangster
Software Engineer @ DataCamp
Herunterladen und Entpacken einer Datei, wie in den Docker-Anweisungen beschrieben
RUN curl http://example.com/example_folder.zip
RUN unzip example_folder.zip
Das Dateisystem wird geändert und Folgendes hinzugefügt:
/example_folder.zip
/example_folder/
example_file1
example_file2
Es sind diese Änderungen, die im Image gespeichert werden.
Jede Dockerfile-Anweisung ist mit ihren Änderungen im Dateisystem des Images verknüpft.
FROM docker.io/library/ubuntu
=> Gives us a file system to start from with all files needed to run Ubuntu
COPY /pipeline/ /pipeline/
=> Creates the /pipeline/ folder
=> Copies multiple files in the /pipeline/ folder
RUN apt-get install -y python3
=> Add python3 to /var/lib/
--> Docker-Image: alle Änderungen am Dateisystem durch alle Dockerfile-Anweisungen
Beim Bauen eines Dockerfiles zeigt uns Docker, an welcher Schicht es gerade arbeitet:
=> [1/3] FROM docker.io/library/ubuntu
=> [2/3] RUN apt-get update
=> [3/3] RUN apt-get install -y python3
Aufeinanderfolgende Builds sind viel schneller, weil Docker unveränderte Schichten wiederverwendet.
Einen Build erneut ausführen:
=> [1/3] FROM docker.io/library/ubuntu
=> CACHED [2/3] RUN apt-get update
=> CACHED [3/3] RUN apt-get install -y python3
Einen Build mit Änderungen erneut ausführen:
=> [1/3] FROM docker.io/library/ubuntu
=> CACHED [2/3] RUN apt-get update
=> [3/3] RUN apt-get install -y R
Gecachte Schichten helfen uns, zu verstehen, warum sich Images nach einem Re-Build manchmal nicht ändern.
=> [1/3] FROM docker.io/library/ubuntu
=> CACHED [2/3] RUN apt-get update
=> CACHED [3/3] RUN apt-get install -y python3
Lässt uns Dockerfiles schneller bauen, weil nicht alle Schichten neu erstellt werden.
Hier müssen alle Anweisungen neu gebaut werden, wenn pipeline.py geändert wird:
FROM ubuntu
COPY /app/pipeline.py /app/pipeline.py
RUN apt-get update
RUN apt-get install -y python3
=> [1/4] FROM docker.io/library/ubuntu
=> [2/4] COPY /app/pipeline.py /app/pipeline.py
=> [3/4] RUN apt-get update
=> [4/4] RUN apt-get install -y python3
Lässt uns Dockerfiles schneller bauen, weil nicht alle Schichten neu erstellt werden.
Hier muss nur die COPY-Anweisung erneut ausgeführt werden.
FROM ubuntu
RUN apt-get update
RUN apt-get install -y python3
COPY /app/pipeline.py /app/pipeline.py
=> [1/4] FROM docker.io/library/ubuntu
=> CACHED [2/4] RUN apt-get update
=> CACHED [3/4] RUN apt-get install -y python3
=> [4/4] COPY /app/pipeline.py /app/pipeline.py
Einführung in Docker