24 Ağustos 2016 Çarşamba

.sh Dosyasıyla İlgili Not

-> Dockerfile için yazdığımız .sh uzantılı dosya set -e ile başlamalıdır.
set -e : Hata denetimini sağlar. Tüm komutların kontrolünü yaptıktan sonra hata çıkarsa komut iptal edilir.

-> Son olarakta exec “$@” ile bitirilir.
exec “$@” :
konteyner içinde çalışan uygulamanın PID 1 olur. Bu sayede uygulama için koteynera gönderilen Unix sinyallerini alırız. 
exec olmazsa çalıştırılabilir SIGTERM(sonlandırma sinyali) alamayacağımızdan dolayı docker stop <container>. exec kullandığımızda linux sinyallerini aldığımızdan emin olabiliriz. 

18 Ağustos 2016 Perşembe

Docker imajın boyutu nasıl küçültülür?

  Dockerfile da yazdığımız her bir komut katman oluşturur. Her katmanda diskte fazladan yer gerektirir. Boyutu küçültmek için bazı şeyler yapabiliriz:

 -Komutları ayrı ayrı yazmak yerine tek bir komutta birleştimek:

RUN apt-get update && apt-get -y install curl
RUN curl https://download.elastic.co/kibana/kibana/$KIBANA_FILE --output $KIBANA_FILE
RUN tar -xzf $KIBANA_FILE -C $KIBANA_EXTRACT_DIR

 yapmak yerine :

RUN apt-get update && apt-get -y install curl && \
       curl https://download.elastic.co/kibana/kibana/$KIBANA_FILE --output $KIBANA_FILE && \
        tar -xzf $KIBANA_FILE -C $KIBANA_EXTRACT_DIR


 -Kullandığımız alt katmanı olabildiğince küçük boyutlu seçmek:

debian -> 125.1 MB
ubuntu -> 187.9 MB
alpine -> 4.79 MB
busybox -> 1.114 MB
fedora -> 206.3 MB
opensuse -> 96.14 MB

 -İndirilen araçları işlemini yaptıktan sonra silmek:
   
RUN apt-get update && apt-get -y install curl && \
    curl https://download.elastic.co/kibana/kibana/$KIBANA_FILE --output $KIBANA_FILE && \
    tar -xzf $KIBANA_FILE -C $KIBANA_EXTRACT_DIR && \
    apt-get clean curl && \   #curl işlemi bittiği için siliyoruz
    rm -rf /var/lib/apt/lists/*

 -Paket listelerini kaldırmak:

Dockerfile içinde RUN la birlikte install yaptıktan sonra oluşan paket listeleri 
rm -rf /var/lib/apt/lists/*
şeklinde kaldırılır

1 Ağustos 2016 Pazartesi

CMD vs ENTRYPOINT - CMD vs RUN

CMD vs ENTRYPOINT


CMD : Komutta argüman belirtmeden konteynerı çalıştırdığınızda  yürütülecek bir varsayılan komutu ayarlamamızı sağlar. Eğer bir argüman ekleyerek çalıştırıyorsak CMD göz ardı edilecektir. Çalıştırılabilir kabuk olarak  /bin/sh veya /bin/bash kullanıyor.Çalıştırırken -i -t kullanıdığımız zaman etkileşimli kabuğa düşer.    


ENTRYPOINT : Konteyner başlatıldığında çalışan bir komut belirtir. Sadece konteynerı çalıştırmak için güçlü bir mesaj gönderir.


FROM ubuntu:trusty
CMD ping localhost


$ docker run -t demo


Konteynerı başlattığında ping in otomatik olarak çalıştığını görebiliriz. Böylece esneklik kazanılır.


$ docker run demo hostname
Burda CMD geçersiz olacak ve hostname pinglenecek.


Bunu ENTRYPOINT la da yapabiliriz ama --entrypoint flagını kullanmamız gerek.
$ docker run --entrypoint hostname demo


CMD and ENTRYPOINT

Dockerfile da ENTRYPOINT yoksa CMD varsayılan argümandır. İkisi birlikte çalışıyorsa  varsayılan argüman olarak ENTRYPOINT seçilir. Böylece ENTRYPOINT konteyner başlatıldığında çalışan bir komut belirtir. CMD de ENTRYPOINT ı beslenmesi için argüman belirtir.



CMD vs RUN


RUN image i oluşturmak için çalışır. Komutu çalıştırır, işler ve sonuçlar. Böylece image üstünde katman oluşur. CMD ise build sırasında bir şey gerçekleştirmez ama image için istenilen komutu belirtir.