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

28 Nisan 2020 Salı

Docker üzerinde wordpress kurulumu ve lokalden wordpress dosyalarının güncellenmesi

Merhaba,
bu yazımda sizlere docker üzerinde wordpress'in nasıl kurulacağını paylaşacağım.
Wordpress ile birlikte phpMyAdmin ve MySQL veritabanını da yine bir docker container'ı olarak çalıştıracağız. Wordpress'i çalıştıdığımız container da volume tanımlaması yaparak localden container üzerindeki dosyaları güncellemiş olacağız. Yani localinizde yaptığınız değşiklikler container üzerinde çalışan wordpress projesine yansımış olacak.

Terminali açıp aşağıdaki adımları takip ederek kurulumu gerçekleştirebilirsiniz.

ilk olarak kurulum için bir dizin oluşturun ve komut satırından bu dizine gidin
$ mkdir docker-wordpress-setup && cd  docker-wordpress-setup


Gerekli tanımlamaları yapmak için docker-compose.yaml adında bir dosya oluşturun.
$ touch docker-compose.yaml


DB(MySQL), phpMyAdmin ve Wordpress kurulumunu sırasıyla yapan aşağıdaki içeriği docker-compose.yaml dosyasına ekleyin.

version: '3.7'

volumes:
wpDbData:
networks:
wpNetwork:

services:
# DB Service
db:
image: mysql:5.7
volumes:
- wpDbData:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: a12345
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
ports:
- 8889:3306
restart: always
networks:
- wpNetwork
# phpmyadmin
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin:5.0.2
environment:
PMA_HOST: db
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
MYSQL_ROOT_PASSWORD: a12345
ports:
- 8081:80
restart: always
networks:
- wpNetwork
# wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- 8082:80
- 443:443
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
volumes: ['./:/var/www/html']
networks:
- wpNetwork
container_name: wordpress-site



docker-compose up komutuyla MySQL,phpMyAdmin ve wordpress'i ayağa kaldırın
$ docker-compose up -d

 -d: detach

 Bu işlemden sonra bilgisayarınızda docker-compose.yaml'ın yanında wordpress dosyalarını görebilirsiniz. Buradaki wordpress dosyalarında değişiklik yaptıkça container üzerinde de yansıdığını göreceksiniz.

phpMyAdmin erişimi için web browser dan   http://localhost:8081 adresini ziyaret edebilirsiniz.
WordPress'e erişerek Setup'ı başlatmak için http://localhost:8082 adresini ziyaret edebilirsiniz.

 NOT: Bir volume oluşturdukdan sonra DB connection parametrelerinde bir değişiklik yaparsanız bir önceki volume'ü aşağıdaki komutla tahliye edebilirsiniz.
$ docker-compose down --volumes


gitHub: https://github.com/lvntyldz/docker-wordpress-setup


21 Nisan 2020 Salı

Docker üzerinde Postgresql çalıştırma ve yedekleme işlemi

Merhaba,
bu yazımda sizlere docker üzerinde postgresql'i ayağa kaldırmayı ve docker üzerinde çalışan DB'in verilerini kendi bilgisayarınıza kaydetmeyi paylaşacağım.

ilk olarak official postgres image'ını dockerhub tan çekip postgres1 adında bir container oluşturacağız.  postgres1'i container olarak çalıştırıp üzerinde çeşitli değişiklikler yaptıktan sonra container'a ait volume dosyalarını alıp  container'ı sileceğiz.

Daha sonra yeniden postgres image'ından postgres2 adında bir container oluşturacağız. 2. container'ı oluştururken  bir önceki container dan aldığımız volume dosyasını kullanacağız. Bu sayede eski kayıtların yeni container da başarılı bir şekilde erişilebilir olduğunu göreceğiz.

Aşağıdaki işlemleri terminal üzerinde yaparak adımları ve sonuçlarını gözlemleyebilirsiniz.

Docker hub üzerinden postgres image'ını çekerek postgres1 adında bir container oluşturun.
$ docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data  --name postgres1 postgres 

  -v: parametresi ile oluturacağınız volume dosyasının adını ve adresini belirtin

postgres1'in loglarına bakarak container'ın son durumu hakkında bilgiler edinebilirsiniz
$ docker logs postgres1 

oluşturduğunuz container'ı çalıştırın
$ docker exec -it postgres1 sh 

-it : interactive terminal(çalıştırdığınız container'ın içinde sh komutlarını çalıştırmak için)

mydb adında bir veri tabanı oluşturun
 $ createdb -U postgres mydb

Bir postgres CLI(Command Line Interface) aracı olan psql ile oluşturduğunuz veritabanına bağlanın
 $ psql -U postgres mydb

bağlantı işleminden sonra list database anlamındaki \l komutunu çalıştırın
$ \l 

Veritabanı versiyonunu görmek için aşağıdaki komutu çalıştırabilirsiniz
 $ select version();

mydb içerisinde id ve name sütunları olan people adında bir tablo oluşturun
$ CREATE TABLE people (id int, name varchar(80));

Oluşturduğunuz tabloya name:mark ve id:1 olacak şekilde bir kayıt girin(insert).
$ INSERT INTO people (id,name) VALUES (1, 'Mark'); 

Aşağıdaki select cümlesini çalıştırarak insert ettiğiniz kaydı görebilirsiniz.
$ SELECT * FROM people; 

\q  komutunu çalıştırarak psql tool'undan çıkış yapın
$ \q 

exit komutuyla container dan da çıkış yapın
$ exit 

container'ı restart edin
$ docker stop postgres1 

$ docker start postgres1 

container'ı kapatıp tekrar ayağa kaldırdığımızda veriler kaybolmayacaktır.

volume inspect komutunu çalıştırarak oluşturduğunuz volume dosyasının bilgilerine erişilebilirsiniz
$ docker volume inspect postgres-data 

çıktı:
[
    {
        "CreatedAt": "2020-02-07T16:03:34+03:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/postgres-data/_data",
        "Name": "postgres-data",
        "Options": null,
        "Scope": "local"
    }


Docker'ı host ettiğiniz(kişisel bilgisayarınız) makinenin terminalinden _data dizininin içeriğine ls komutuyla bakabilirsiniz
$ ls /var/lib/docker/volumes/postgres-data/_data/

Bilgisayarınızda oluşturduğunuz postgres1 adlı container'ı silin
$ docker rm -f postgres1 

bu durumda veriler kişisel bilgisayarınızda kalacaktır. Herhangi bir veri kaybı olmayacaktır.

Elinizde bulunan volume verisini attach ederek postgres2 adında bir container oluşturun.
$ docker run -d -p 5432:5432 -v postgres-data:/var/lib/postgresql/data --name postgres2 postgres 

oluşturduğunuz postgres2 adlı container'ı çalıştırıp ssh üzerinden bağlanın
 $ docker exec -it postgres2 sh

psql aracı ile tekrar veritabanına bağlanın
 $ psql -U postgres mydb

Aşağıdaki select sorgusunu çalıştırdığınızda Herhangi bir veri kaybı olmadığını görebilirsiniz.
 $ SELECT * FROM people;


kaynak:https://markheath.net/post/exploring-postgresql-with-docker


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