Docker önbelleğe alma’ya giriş

Docker'a Giriş

Tim Sangster

Software Engineer @ DataCamp

Docker build

Docker talimatlarını kullanarak bir dosya indirme ve zip’ten çıkarma.

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

Dosya sistemini değiştirir ve şunları ekler:

/example_folder.zip
/example_folder/
    example_file1
    example_file2

Görüntüde saklanan değişiklikler bunlardır.

Docker'a Giriş

Docker talimatları dosya sistemi değişikliklerine bağlıdır

Dockerfile’daki her talimat, imaj dosya sisteminde yaptığı değişikliklere bağlıdır.

FROM docker.io/library/ubuntu
 => Ubuntu’yu çalıştırmak için gereken tüm dosyalarla başlamak üzere bir dosya sistemi sağlar
COPY /pipeline/ /pipeline/
 => /pipeline/ klasörünü oluşturur
 => Birden çok dosyayı /pipeline/ klasörüne kopyalar
RUN apt-get install -y python3
 => /var/lib/ içine python3 ekler
Docker'a Giriş

Docker katmanları

  • Docker katmanı: Tek bir Dockerfile talimatının neden olduğu tüm değişiklikler.
  • Docker imajı: Bir derleme sırasında oluşturulan tüm katmanlar

--> Docker imajı: Tüm Dockerfile talimatlarının dosya sisteminde yaptığı tüm değişiklikler.

Bir Dockerfile derlenirken, Docker hangi katmanda çalıştığını gösterir:

 => [1/3] FROM docker.io/library/ubuntu 
 => [2/3] RUN apt-get update
 => [3/3] RUN apt-get install -y python3
Docker'a Giriş

Docker önbelleğe alma

Ardışık derlemeler çok daha hızlıdır çünkü değişmeyen katmanlar yeniden kullanılır.

Bir derlemeyi yeniden çalıştırma:

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

Değişiklikle yeniden derleme:

 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => [3/3] RUN apt-get install -y R
Docker'a Giriş

Docker önbelleğe alma’yı anlama

Katmanların ne zaman önbellekten geldiğini bilmek, bazen yeniden derlemeden sonra imajların neden değişmediğini anlamaya yardımcı olur.

  • Docker, python3’ün yeni sürümü çıktığında bilemez.
  • Talimatlar önceki derlemelerle aynıysa Docker önbelleğe alınmış katmanları kullanır.
 => [1/3] FROM docker.io/library/ubuntu
 => CACHED [2/3] RUN apt-get update
 => CACHED [3/3] RUN apt-get install -y python3
Docker'a Giriş

Docker önbelleğe alma’yı anlama

Tüm katmanların yeniden derlenmesi gerekmediği için daha hızlı Dockerfile yazmamıza yardımcı olur.

Aşağıdaki Dockerfile’da, pipeline.py dosyası değişirse tüm talimatlar yeniden çalışır:

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
Docker'a Giriş

Docker önbelleğe alma’yı anlama

Tüm katmanların yeniden derlenmesi gerekmediği için daha hızlı Dockerfile yazmamıza yardımcı olur.

Aşağıdaki Dockerfile’da yalnızca COPY talimatı yeniden çalışır.

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
Docker'a Giriş

Hadi pratik yapalım!

Docker'a Giriş

Preparing Video For Download...