Wprowadzenie do Dockera
Tim Sangster
Software Engineer @ DataCamp
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.
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/
--> 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
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
Wiedza o tym, kiedy warstwy są buforowane, pomaga zrozumieć, dlaczego obrazy czasem nie zmieniają się po przebudowaniu.
=> [1/3] FROM docker.io/library/ubuntu
=> CACHED [2/3] RUN apt-get update
=> CACHED [3/3] RUN apt-get install -y python3
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
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