Einführung in das Caching mit Docker

Einführung in Docker

Tim Sangster

Software Engineer @ DataCamp

Docker-Build

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.

Einführung in Docker

Docker-Anweisung und Dateisystemänderung

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/
Einführung in Docker

Docker-Schichten

  • Docker-Schicht: alle Änderungen, die durch eine Dockerfile-Anweisung verursacht wurden
  • Docker-Image: alle Schichten, die während eines Builds erstellt wurden

--> 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
Einführung in Docker

Docker-Caching

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
Einführung in Docker

Einführung in Docker-Caching

Gecachte Schichten helfen uns, zu verstehen, warum sich Images nach einem Re-Build manchmal nicht ändern.

  • Docker kann nicht wissen, wann eine neue Version von Python 3 rauskommt.
  • Docker nutzt gecachte Schichten, weil die Anweisungen mit früheren Builds übereinstimmen.
 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => CACHED [3/3] RUN apt-get install -y python3
Einführung in Docker

Einführung in Docker-Caching

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
Einführung in Docker

Einführung in Docker-Caching

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

Lass uns üben!

Einführung in Docker

Preparing Video For Download...