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.

19 Temmuz 2016 Salı

Docker -2



Docker'ın genel amacı uygulamaları ayrı ayrı konteynerların içine koyup konteynerları yönetmek. Yani her konteynerın içinde sadece tek uygulamanın kodu olur. Birden fazla da uygulamanın kodu konulabilir ama genel mantık tek tek olmasıdır. Konteyenerlar işletim sistemine gerek duymaz. Buda zamandan avantaj sağlar. Konteynerlar kendi aralarında izoledirler. Yani çalışan bir konteyner diğer bir konteynerı etkilemez ve ondan haberdar değildir. İstenilirse konteynerlar birbirine bağlanabilir.


Docker istemci-sunucu mimarisi kullanır.




Docker istemci(client), docker daemonla konuşur. Docker istemci ve daemon ikiside aynı sistem üzerinde çalışabilir ya da docker istemcisini uzak bir docker daemon a bağlayabilirsiniz. Docker istemci ve daemon soketleri üzerinden ya da RESTful API üzerinden iletişim kurar.


Docker Image:
Salt okunur bir şablondur. Yazılımlarımızı yüklediğimiz bir sistemdir. Imageler konteynerları oluşturmak için kullanılır. İstersek imageleri kendimiz oluşturabilir istersek hazır olanları alıp kullanabiliriz.
 
Her bir image katmanları bir dizi içerir. Bir docker image için değişiklik yaptığımızda  yeni bir katman oluşur. Imageler konteynerların ne tuttuğunu docker'a anlatır.


Docker Konteyner:
Bir docker image'i üzerinde koştuğunuz bir dizi komutun sistemdeki diğer tüm servislerden izole çalıştığı, sanal ortamdır.


Docker Registry:
Docker imagelerinizi depoladığınız, push-pull işlemlerini yaptığınız depodur.


Docker Daemon:
Ana makine üzerinde çalışır. Daemon ile doğrudan etkileşim kurulamaz ancak docker istemci ile ulaşılabilir.


Docker İstemci(client):
Birincil kullanıcılar için docker arayüzüdür. Kullanıcılardan komutları alır ve sonra docker daemon ile iletişime geçmeyi sağlar.


Kitematic:
Docker konteynerları oluşturmak, çalıştırmak için kullanabileceğiniz ve Docker Hub görüntüleri bulmak ve çekmek için bir GUI.


Dockerfile:
Bir image oluşturulduğunda yapılacak talimatları içeren çekirdek dosyasıdır.


Dockerfile örneği:


FROM ubuntu:latest


MAINTAINER Scott P. Gallagher <email@somewhere.com>


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


ADD 000-default.conf /etc/apache2/sites-available/
RUN chown root:root /etc/apache2/sites-available/000-default.conf


EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]


FROM: konteyner oluştururken başlamak istediğimiz image'i belirtir. İstersek sürümünüde belirtebiliriz.
MAINTAINER: dockerfile oluşturan kişiye ait bilgiler.
RUN: çalıştırılacak komutlar.
ADD, RUN: özel yapılandırma ekleri için gerekli olan satırlar
CMD: konteyner başlatıldığında çalıştırılan komutun tanımlanmasını sağlar.

Docker Machine:
Docker hostları oluşturmayı sağlayan bir yapıdır ve Docker Engine bunun üzerine kurulur.


Docker Engine:
Bir istemci-sunucu uygulaması. Deamon oluşturur ve docker nesnelerini yönetir. Docker nesneleri: image, konteyner, network...


Bazı Docker komutları


docker versiyonunu gösterir:
docker version


tüm komutlar hakkında bilgi almak için:
docker --help


bir komut hakkında bilgi almak için:
docker <command> --help


image için arama:
docker search <image_name>

image indirmek için:
docker pull <image_name>


image silmek için:
docker rmi <image_name>


hostaki imageleri görmek için: 
docker images
çalışan konteynerları görmek için:
docker ps


tüm konteynerları görmek için(çalışmayanlarda dahil):
docker ps -a


konteynerı calıştırmak için:
docker run -i -t <image_name>:<tag> /bin/bash/


docker run -d -p <host_port>:<container_port> <image_name>:<tag>


-d konteynerları sürekli olarak çalışmasını sağlar. Tek sefer çalıştırmak için -it kullanılabilir. -p host portları ile konteyner portlarını eşleştirmeyi sağlar.


konteyner silmek için:
docker rm <container_id>

konteyner üzerinde shell komutu çalıştıramak için:
docker exec -it <container_id> /bin/bash
bu sekilde bağlandığımızda root ile konteyner ssh üzerinden bağlanmış oluyoruz.


Konteynerları başlatmak için:
docker start <container_id>

konteynerı durdurmak için:
docker stop <container_id>