27 Ekim 2016 Perşembe

STAJ-1

Üstünden biraz zaman geçsede ilk stajım hakkında genel bir yazı yazmasaydım içimde kalırdı :)



Bu yaz 2 ay boyunca Kaan'ın yanında Gamegos'ta ilk stajımı yaptım. Staja başlamadan önce "acaba ne olucak?", "acaba olucak mı?", "ne yapacağım şimdi ben?"(ne yapacağımı tabi ki önceden biliyordum :) )gibi bir sürü sorular vardı aklımda. Ama çalışmaya başladıktan sonra günlerin nasıl geçtiğini bile anlamadım.

Staja gitmeden önce bir ön hazırlık yaptım. Önceki blog yazılarımdan da anlaşıldığı üzere Docker imajları ile uğraştım. Staj boyunca hedefim ise Docker imajı olmayan bir uygulamanın imajını yapmaktı. Staj sonuna kadar da hedefimi gerçekleştirdim.

Staj benim için büyük bir ilerlemeydi. Örneğin ilk kez okuduğum belgeyi pek anlayamazken biraz daha araştırma yapıp tekrar belgeyi okuduğumda artık onu anlıyor olmak küçük sevinçlerimden biri oldu. Belge demişken acı bir gerçek var "her şey ingiliççe." İngilizcenin önemini bir kez ve bir kez daha anladım. Bir şeyden daha bahsetmek gerekirse Google'da doğru bir şekilde arama yapmayı öğrendim. Tabi ki hatasız kul olmaz :P Kesinlikle hatalarla karşılaşıyoruz. Karşılaştığımız bu hataları doğru sözcükler kullanarak arama yapabilirsek büyük ihtimalle çözüme ulaşabiliriz. Ve tabi ki yine ingiliççe ile :)

En güzel tecrübelerimden bir tanesi de İstanbul'da uzun (benim için uzun dünya için kısa) süre tek başıma yaşamak. Bu süre zarfında da İstanbul'un güzelliklerini de görmüş oldum. Kısacası hıphızlı geçen en süperli yazdı. Staj boyunca bana sürekli yardım eden Kaan'a ve tabi ki Necdet Hocama sonsuz teşekkürler :) 







7 Eylül 2016 Çarşamba

KIBANA

İmajını yaptığım Kibana nedir ve neler yapar kısaca bundan bahsedicem.

Kibana veriyi birden fazla boyutta gösterim sağlayan ve bu bağlamda veriyle etkileşime geçip kullanıcıya güçlü ve çarpıcı dashboardlar sunan açık kaynak kodlu veri görüntüleme platformudur. 


Bu kibana imajı ile neler yapabiliriz?


Bunu da kibana imajını çalıştırırken eğer istersek verebildiğimiz çevresel değişkenlerle anlatmak istiyorum.  
Aslında kibananın official imajı var ama imajı çalıştırırken bize sadece url ayarı yapabilme imkanı veriyor. Benim imajımda da bütün config dosyasındaki ayarları çevresel değişkenlerle ayarlayabiliyoruz.

Bu çevresel değişkenler nelerdir?

SERVER_BASEPATH
Bu değişkeni eğer proxy arkasında çalıştırmak ve bunun yolunu belirtmek istiyorsanız kullanırsınız. eğik çizgi ile bitirmeyin.


SERVER_MAX_PAYLOAD_BYTES
Eğer gelen sunucu isteklerinin maksimum yük boyutunu ayarlamak istiyorsanız kullanılır.


http://ELASTICSEARCH_HOST:ELASTICSEARCH_PORT

ELASTICSEARCH_HOST: hostunuzu bu değişkenle
ELASTICSEARCH_PORT: portunuzu da bu değişkenle belirtebilirsiniz.

KIBANA_INDEX
Kibana kayıtlı aramaları ve görsellikleri saklamak için Elasticsearch indeksini kullanır. Eğer bu indeks yoksa yeni bir indeks yaratır.

KIBANA_DEFAULT_APP_ID
Varsayılan uygulamayı yüklemek için.


ELASTICSEARCH_PING_TIMEOUT
Elasticsearh un pinglere cevap vermesi için milisaniye cinsinden zaman girilmesi beklenir.

ELASTICSEARCH_REQUEST_TIMEOUT
Elasticsearch ten gelen yanıtları beklemek geriye cevap verilmesi için de milisaniye cinsinden zaman girilmesi beklenir.


ELASTICSEARCH_STARTUP_TIMEOUT
tekrar deneme öncesinde 

PID_FILE
Yaratılması istenen işlem ıd dosyasının bulunmasını istediğiniz dizin.

LOGGING_DEST 
Log çıktı dosyasının yer almasını istediğiniz hedef dizin bununla  belirtilir.


LOGGING_SILENT
Log çıktılarının oluşmasını durdurmak için kullanılır.


LOGGING_QUIET
Hata mesajları dışındaki tüm log çıktılarının oluşmasını durdurmak için kullanılır.

LOGGING_VERBOSE
Tüm sistem kullanım bilgileri talepler ve etkinliklerin loglanması için kullanılır.


İmajı Çalıştırma

İmajı çalıştırmak için en temel komut :
docker run -d -p 5601:5601 -e
ELASTICSEARCH_HOST=your_elasticsearch_host burcina/kibana

Eğer çevresel değişkenler eklemek istiyorsanız -e parametresini kullanmanız gerekir.

Eğer kullanıcı değişkenini kullanmak istiyorsanız parola değişkenini de kesinlikle kullanmanız gerekir, aynı işlem tam tersi içinde geçerlidir. Bu girilen kimlik doğrulaması elasticsearch e ait olan kimlik doğrulamasıdır.
docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host -e ELASTICSEARCH_USER=your_user -e ELASTICSEARCH_PASS=your_password burcina/kibana

Gelen istekler için kendi ssl inizi kullanmak istiyorsanız volume kullanmanız gerekir. Bunu da -v parametresiyle belirtmeniz gerekir:


docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host -e SERVER_SSL_CERT=/path/to/your/container/server.crt 
-e SERVER_SSL_KEY=/path/to/your/container/server.key 
-v /path/to/your/host/cert/:/path/to/container/cert/ -v /path/to/your/host/key/:/path/to/your/container/key/ kibana

Aslında -v ile belirtilen sizin kendi bilgisayarınızda bulunan bir dosya yoludur. Böylece kendi bilgisayarınızda bulunan bir dosyayı imajı çalıştırırken kullanabilirsiniz.
Burada SERVER_SSL_CERT değişkeninde belirtmiş olduğunuz yol(path/to/your/container/) ile -v ile belirtmiş olduğumuz yerelimizde bulunan imajda kullanacağımız dosya yolu ile aynı olmalıdır. Aynı işlem SERVER_SSL_KEY içinde geçerlidir.
yani
/path/to/your/host/cert/:/path/to/container/cert/
Burda : önceki yol yerelimizde bulunan dosyanın yolu, : den sonraki yolda bu dosyanın kopyalanması gereken yeri temsil ediyor. Burda da
SERVER_SSL_CERT=/path/to/your/container/server.crt  konteynera kopyaladığımız yerden kullanmamızı sağlayan değişken.

Not: Bu kibana imajının sürümü 4.5.4
İmaj için ayrıntılar:
Github
Dockerhub

4 Eylül 2016 Pazar

KIBANA

What is Kibana?

Kibana is an open source data visualization platform that allows you to interact with your data through stunning, powerful graphics that can be combined into custom dashboards that help you share insights from your data far and wide.

What can we do with this Kibana image?

Actually there is an official Kibana image you can only set the host environment. But you can set all environments with this Kibana image I coded. 

What are these environment variables that we give?

SERVER_BASEPATH
If you are running kibana behind a proxy and want to mount it at a path, specify that path here. The basePath can't end in a slash.

SERVER_MAX_PAYLOAD_BYTES

The maximum payload size in bytes on incoming server requests.

ELASTICSEARCH_PRESERVE_HOST

Preserve_elasticsearch_host true will send the hostname specified in `elasticsearch`.

KIBANA_INDEX
Kibana uses an index in Elasticsearch to store saved searches, visualizations and dashboards. It will create a new index if it doesn't already exist.

KIBANA_DEFAULT_APP_ID
The default application to load.

ELASTICSEARCH_PING_TIMEOUT
Time in milliseconds to wait for elasticsearch to respond to pings, defaults to request_timeout setting

ELASTICSEARCH_REQUEST_TIMEOUT
Time in milliseconds to wait for responses from the back end or elasticsearch.

ELASTICSEARCH_SHARD_TIMEOUT
Time in milliseconds for Elasticsearch to wait for responses from shards.

ELASTICSEARCH_STARTUP_TIMEOUT
Time in milliseconds to wait for Elasticsearch at Kibana startup before retrying

PID_FILE
Set the path to where you would like the process id file to be created.

LOGGING_DEST
If you would like to send the log output to a file you can set the path below.

LOGGING_SILENT
Set this to true to suppress all logging output.

LOGGING_QUIET
Set this to true to suppress all logging output except for error messages.

LOGGING_VERBOSE
Set this to true to log all events, including system usage information and all requests.


Usage

The basic commands that can be executed:

docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host burcina/kibana

If you enter user environment variable, you must enter password environment. 
If you enter password environment variable, you must enter user environment.

docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host -e ELASTICSEARCH_USER=your_user -e ELASTICSEARCH_PASS=your_password burcina/kibana

docker run -d -p 5601:5601 -e ELASTICSEARCH_HOST=your_elasticsearch_host -e SERVER_SSL_CERT=/path/to/your/container/server.crt -e SERVER_SSL_KEY=/path/to/your/container/server.key -v /path/to/your/host/cert/:/path/to/container/cert/ -v /path/to/your/host/key/:/path/to/your/container/key/ kibana

The local file path that use in the image (-v) and path(path/to/your/container/) which we define with SERVER_SSL_CERT must be same. The same process is approved also for SERVER_SSL_KEY. 

/path/to/your/host/cert/:/path/to/container/cert/
Before ":" source is the path in our local pc. After ":" is target means that file to be stored.

SERVER_SSL_CERT=/path/to/your/container/server.crt
We can use it as we store in container.

Note: This is Kibana 4.5.4

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.

29 Temmuz 2016 Cuma

Dockerfile ile ilgili 2 Bilgi

ADD vs COPY

Dockerfile dosyalarının komutları olan ADD ve COPY birbirlerine çok benzerdir.

Farkları nelerdir?
COPY yerelimizdeki dosyaları kopyalar.
ADD yereldeki dosyaları, uzaktaki URL leri ve tar dosyalarını kopyalar.

COPY nin daha transparan bir yapısı olduğu için yani basit bir kopyalama işlemi yaptığı için COPY tercih ediliyor genelde.

Örnek:
COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/

ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all

Eğer URL kopyalamayı COPY ile yaparsak böyle bir hata alırız:
Source can't be a URL for COPY
 

Neden paket listeleri kurulu olarak gelmiyor?

Paketler önbellekte bulunmaz ama gerekirse indirilir. Böylelikle imagelerin büyümesi engellenir ve kazanç sağlanır.

Güncellemeye ve indirmeye örnek:
RUN apt-get update && apt-get install -y \
                 apache2

28 Temmuz 2016 Perşembe

Docker -3 (ilk image)

               
İlk imajımı oluşturdum. Apache imajı.

Dockerfile şöyle: (github linki->

FROM debian:jessie

RUN apt-get update && apt-get install -y \
    apache2

CMD ["apachectl","-D","FOREGROUND"]

EXPOSE 80

Açıklama
FROM : her dockerfile da bulunması gereken bir komut ve başlamak istediğimiz imajı belirtir.

RUN: apache'nin kurulumu ile ilgili gerekli olan satırlar.

CMD: konteyner çalıştığında çalışan bir komut olduğu için apache'nin çalışmasını sağlayan parametreler. Sadece imaj için amaçlanan bir komut.

EXPOSE: hangi portta çalışması gerektiğini açıklayan komut.