Dockerfile etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Dockerfile etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

13 Nisan 2019 Cumartesi

Docker üzerine sonar kurarak proje(kod) analizi yapma

Merhaba,
bu yazımda sizlere docker üzerinde sonar'ı çalıştırmayı ve sonar ile yaptığımız kod analizini docker container'a göndermeyi paylaşacağım.
Bu şekilde kişisel bilgisayarınızdaki projelerinizi bir docker container'ında bulunan sonar veritabanında tutabilirsiniz.

Bu işlemler için ilk olarak lokal bilgisayarınıza sonar'ı ve sonar scanner'ı kurun. Kurulum için bu linkten faydalanabilirsiniz.
Sonar ve sonar-scanner kurulumunu gerçekleştirdidikten sonra aşağıdaki adımları takip edebilirsiniz.

Terminali açarak docker engine aracılığıyla sonarqube'un hazır image'ını dockerhub tan çekin

 $ docker pull sonarqube

indirdiğiniz içinde sonar bulunan docker image'ını console dan görüntüleyin

$ docker images 

sonarqube image'ını container olarak 9000 portu üzerinden çalıştırın

 $ docker run -d --name sonarqube -p 9000:9000 sonarqube

Sonar'ı barındıran container'ın sağlıklı bir şekilde ayağa kalktığından emin olmak için aşağıdaki komutu çalıştırın

 $ docker ps

20-30 sn sonra(sonarın ayağa kalkması) web tarayıcıdan sonar'a giriş yapın. 

 http://127.0.0.1:9000/
u:admin
p:admin

Sonar ekranına erişebildiyseniz docker üzerinde sonar kurulumunu gerçekleştirdiniz demektir.
Artık kurduğunuz sonar'ı analiz yapacağınız projelerinizde kullanabilirsiniz.

yine tarayıcı üzerinden aşağıdaki adrese gidip ilgili alanları kendinize göre doldurarak sonar üzerinde bir proje oluşturun.
http://127.0.0.1:9000/projects/create

NOT: Önünüze çıkan shirbaz'ı(wizard) token oluşturana kadar devam ettirin

Projenizin bulunduğu dizine giderek oluşturduğunuz token ile birlikte aşağıdaki komutu çalıştırın

 $ sonar-scanner   -Dsonar.projectKey=<PROJETC_KEY>   -Dsonar.sources=.   -Dsonar.host.url=http://127.0.0.1:9000   -Dsonar.login=<TOKEN> -Dsonar.java.binaries=.

ÖRN

 $ sonar-scanner   -Dsonar.projectKey=smartHome   -Dsonar.sources=.   -Dsonar.host.url=http://127.0.0.1:9000   -Dsonar.login=a9e410c4435b2f8dfc6549f131397bec0657d403 -Dsonar.java.binaries=.

Analiz işlemi başarıyla tamamlandıktan sonra web tarayızı üzerinden aşağıdaki linke giderek projenin analizini görebilirsiniz. 

http://127.0.0.1:9000/dashboard?id=<PROJETC_KEY> 

ÖRN 

http://127.0.0.1:9000/dashboard?id=smartHome 

23 Nisan 2018 Pazartesi

linux ortamında hadoop'u docker container'ı içinde çalıştırma - (Hadoop Multinode Cluster with Docker)

Merhaba,
bu yazımda sizlere yine bir hadoop kurulumu paylaşacağım. Hadoop'u dağıtık(multi node) olarak kuracağım.  Bildiğiniz üzere daha önceden hadoop kurulumunu analatan  bir yazı paylaşmıştım.  Ancak bu yazımda hadoop'u docker kullanarak kurup  her bir node'u docker container'ı olarak çalıştıracağım. Dolayısıyla multi node hadoop kurulumu yaptığınızda tek tek sanal makine kopyalamak durumunda kalmayacaksınız. Bu sayede hem zaman hem de yer(disk) kazanımında bulunmuş olacağız.

Yeri gelmişken bir not düşerek tekrar bir hatırlatma yapayım; hadoop'u single node ve multi node olarak kurabiliyorsunuz. Single node da task tracker, data node, job tracker ve name node ların tamamı tek bir bilgisayar üzerindedir.  Ancak multi node yapısında ise bu birimleri farklı bilgisayarlar üzerinde çalıştırmak amaçlanmıştır. Bu sayede çok büyük verilerin analizi daha da kolaylaşmıştır.

Yazının devamında yapılacak işlemleri özetlemek gerekirse;
- içinde docker ve java kurulmuş olan bir docker image'ı oluşturacağız.
- Bu image dan 1 adet master docker container'ı oluşturacağız.
- Yine aynı docker image'ından N tane slave container oluşturacağız.

1 adet master ve N tane slave node oluşturacak yapıyı kurmak için aşağıdaki adımları takip ederek uygulayın.

Oluşturacağımız docker container ların birbirleriyle haberleşebilmesi için tüm bu containerlar aynı ağda olmalıdır. Dolayısıyla ilk olarak terminali açarak  docker ile bir ağ(network) oluşturun. 

 $ docker network create -d bridge   --subnet 172.25.0.0/16  hadoopNetwork

Bulunduğunuz dizinde Dockerfile adında bir dosya oluşturarak aşağıdaki içeriği bu dosyaya ekleyin. 

FROM ubuntu:16.04
MAINTAINER Levent YILDIZ <dev.levent.yildiz@gmail.com>

RUN apt-get update
RUN apt-get install openjdk-8-jdk -y
RUN apt-get install -y wget
RUN apt-get install -y openssh-server
RUN wget https://archive.apache.org/dist/hadoop/core/hadoop-2.7.5/hadoop-2.7.5.tar.gz -P ~/Downloads
RUN tar zxvf ~/Downloads/hadoop-2.7.5.tar.gz  -C /usr/local
RUN mv /usr/local/hadoop-* /usr/local/hadoop

RUN mkdir /var/hadoop

ENV  JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre/
ENV  PATH $PATH:$JAVA_HOME/bin
ENV  HADOOP_HOME /usr/local/hadoop
ENV  PATH $PATH:$HADOOP_HOME/bin
ENV  HADOOP_CONF_DIR /usr/local/hadoop/etc/hadoop

RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' && \
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

COPY conf/* /tmp/

RUN mv /tmp/ssh_config ~/.ssh/config
RUN mv /tmp/core-site.xml /usr/local/hadoop/etc/hadoop/core-site.xml
RUN mv /tmp/mapred-site.xml /usr/local/hadoop/etc/hadoop/mapred-site.xml
RUN mv /tmp/hdfs-site.xml /usr/local/hadoop/etc/hadoop/hdfs-site.xml
RUN mv /tmp/masters /usr/local/hadoop/etc/hadoop/masters
RUN mv /tmp/slaves /usr/local/hadoop/etc/hadoop/slaves

RUN /tmp/env.sh

CMD [ "sh", "-c", "service ssh start; bash"] 

Dockerfile ile kopyalanan conf dosyalarının içeriğini github üzerinden indirebilirsiniz.

Üstte oluşturduğumuz Dockerfile ile bir hadoop image'ı oluşturun. 

 $ docker build -t base-hadoop:1.0 .

Burada oluşturduğumuz içinde hadoop kurulu olan  image dan hem master hemde slave nodelar çalıştırmak için birer container oluşturacağız. Yani yazının en başında da belirttiğim gibi  bütün container lar tek bir image dan oluşacak.

ilk olarak base-hadoop image'ındadan master container oluşturun  

$ docker run -itd  --network="hadoopNetwork"  --ip 172.25.0.100  -p 50070:50070  -p 8088:8088 --name master --hostname master  base-hadoop:1.0 


ikinci olarak ta bir for-loop ile istenilen sayı kadar slave container oluşturun. Aşağıda ( c=1; c<=3; c++ ) ifadesiyle 3 tane slave container oluşturulacak. 

for (( c=1; c<=3; c++ ))
do
    tmpName="slave$c"
    docker run -itd  --network="hadoopNetwork"  --ip "172.25.0.10$c" --name $tmpName --hostname $tmpName  base-hadoop:1.0
done 

Döngü ile oluşturulan container ların IP adresi , adı ve hostname'i
172.25.0.101 : slave1
172.25.0.102 : slave2
172.25.0.103 : slave3
şeklinde olacaktır.

172.25.0.100  adresi ise master container'ın IP adresi olacaktır.

Master container da hadoop'u ayağa kaldırmak için aşağıdaki komutları çalıştırın  

 $ docker exec -ti master bash
$ hadoop namenode -format && /usr/local/hadoop/sbin/start-dfs.sh && /usr/local/hadoop/sbin/start-yarn.sh


son olarak aşağıdaki adresleri ziyaret ederk kurulum kontrolü yapabilirsiniz.
http://localhost:50070/dfshealth.html#tab-datanode
http://localhost:8088/cluster/nodes


Üsteki yapılan işlemleri bir script içinde toplayarak git hesabımdan paylaştım. Bu adımların uygulanmasını incelemek için github üzerindeki ilgili  repo'yu ziyaret edebilirsiniz.  Repoyu lokal bilgisayarınıza indirerek te yine üstteki adımların uygulanmış halini otomotik olarak çalıştırabilirsiniz.

 Üsteki adımları daha hızlı uygulamak için github tan belirttiğim repo'yu indirin. 

 $ git clone https://github.com/lvntyldz/docker-multinode-hadoop.git &&  cd docker-multinode-hadoop

run.sh scripti otomotik olarak 1 adet master container oluşturacak şekilde hazırlanmıştır. Ancak slave container sayısı kullanıcıdan beklenmektedir.  Oluşturmak istediğiniz slave container sayısını parametere olarak run.sh scriptine vererek kurulumu tamamlayın  

 $ ./run.sh <SLAVE_CONTAINER_COUNT>

ÖRN: 2 slave container için  

 $ ./run.sh 2