Wprowadzenie do pamięci podręcznej Docker

Wprowadzenie do Dockera

Tim Sangster

Software Engineer @ DataCamp

Budowanie Docker

Pobieranie i rozpakowywanie pliku za pomocą instrukcji Docker.

RUN curl http://example.com/example_folder.zip
RUN unzip example_folder.zip

Spowoduje zmiany w systemie plików i doda:

/example_folder.zip
/example_folder/
    example_file1
    example_file2

To właśnie te zmiany są przechowywane w obrazie.

Wprowadzenie do Dockera

Instrukcje Docker a zmiany w systemie plików

Każda instrukcja w Dockerfile jest powiązana ze zmianami, które wprowadza w systemie plików obrazu.

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/
Wprowadzenie do Dockera

Warstwy Docker

  • Warstwa Docker: wszystkie zmiany wywołane przez jedną instrukcję Dockerfile.
  • Obraz Docker: wszystkie warstwy utworzone podczas budowania

--> Obraz Docker: wszystkie zmiany w systemie plików wprowadzone przez wszystkie instrukcje Dockerfile.

Podczas budowania Dockerfile Docker informuje, nad którą warstwą pracuje:

 => [1/3] FROM docker.io/library/ubuntu 
 => [2/3] RUN apt-get update
 => [3/3] RUN apt-get install -y python3
Wprowadzenie do Dockera

Pamięć podręczna Docker

Kolejne budowania są znacznie szybsze, ponieważ Docker ponownie wykorzystuje niezmienione warstwy.

Ponowne budowanie:

 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => CACHED [3/3] RUN apt-get install -y python3

Ponowne budowanie po wprowadzeniu zmian:

 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => [3/3] RUN apt-get install -y R
Wprowadzenie do Dockera

Zrozumienie pamięci podręcznej Docker

Wiedza o tym, kiedy warstwy są buforowane, pomaga zrozumieć, dlaczego obrazy czasem nie zmieniają się po przebudowaniu.

  • Docker nie może wiedzieć, kiedy zostaje wydana nowa wersja python3.
  • Docker użyje warstw z pamięci podręcznej, ponieważ instrukcje są identyczne jak w poprzednich budowaniach.
 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => CACHED [3/3] RUN apt-get install -y python3
Wprowadzenie do Dockera

Zrozumienie pamięci podręcznej Docker

Pomaga pisać Dockerfile'e, które budują się szybciej, ponieważ nie wszystkie warstwy muszą być przebudowywane.

W poniższym Dockerfile wszystkie instrukcje muszą zostać przebudowane po zmianie pliku pipeline.py:

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
Wprowadzenie do Dockera

Zrozumienie pamięci podręcznej Docker

Pomaga pisać Dockerfile'e, które budują się szybciej, ponieważ nie wszystkie warstwy muszą być przebudowywane.

W poniższym Dockerfile tylko instrukcja COPY będzie musiała zostać ponownie wykonana.

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
Wprowadzenie do Dockera

Czas na ćwiczenia!

Wprowadzenie do Dockera

Preparing Video For Download...