docker compose

Centos 7 ‘de Docker ve Docker Compose Kurulumu ile Kullanımı

Docker Compose, multi-container uygulamalarınızı gereksinimleri ile birlikte tek bir dosyaya tanımlayarak akabinde tek bir komut ile reçetesini yazdığınız container ı ayağa kaldırmanızı sağlamaktadır.

Şimdi elimizde sıfır kurulu ve updateleri yapılmış bir centos 7 var , bir public ip verdim ( burada bolca var 🙂 ) , siz private ip de verebilirsiniz , sonuç olarak ssh erişimim de var ve makina bir şekilde internete çıkıyor, buraya kadar tamam ise konuya girebiliriz.

Bu arada docker compose eski fig in yerini aldı , fig duyar iseniz artık o deprecated oldu ve resmi olarak docker compose diye anılıyor.

Öncelikle Docker imajları hakkında bilgi verelim , Her bir docker container ı , bir docker imajının yerel bir kopyasıdır. Docker imajlarını bir linux işletim sistemi gibi düşünebilirsiniz ancak şöşnde sadece minimal gereksinimler bulunmaktadır ve bu imajlar ana host un kernel ini kullanırlar fakat çalışan bir container ın içine girerseniz sadece o container ın dosya sistemini görürsünüz.

En çok kullanılan imaj ları docker hub da bulabilirsiniz , Bunlar docker team tarafından kontrol edilir ve bazı imajların altında official ibaresini görür iseniz bu imajlara güvenebilirsiniz çünkü docker team bunları test etmiştir.

Şimdi docker kurarak başlayalım , bu iş için yine docker team ın hazırladığı bir shell script i çağırıp çalıştıracağız.

Centos 7 de wget öntanımlı gelmiyor , aşağıdaki komut ile indirebilirsiniz.

yum install wget

Şimdi scriptimizi çekiyor ve çalıştırıyoruz.

[root@ayhanarda-containers ~]# wget -qO- https://get.docker.com/ | sh

Yaklaşık 30 sn içinde kurulum tamamlandı , şimdi kurulup kurulmadığını aşağıdaki şekilde doğrulayabiliriz.

[root@ayhanarda-containers ~]# docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 15:39:25 2016
OS/Arch: linux/amd64

Eğer docker ı root olmayan bir kullanıcı ile kullanacak iseniz aşağıdaki komutla kendinizi docker grubuna dahil edebilirsiniz.

usermod -aG docker $(whoami)

Eğer root iseniz yukarıdaki komutu kullanmanıza gerek yok , şimdi docker ı başlatalım ve bundan sonraki rebootlar sonunda tekrar çalışacak hale getirelim , aşağıdaki 2 komutu kullanabilirsiniz.

[root@ayhanarda-containers ~]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@ayhanarda-containers ~]# systemctl start docker.service

Artık docker çalışır durumda. Şimdi docker compose kurulumuna geçebiliriz.

Öncelikle python-pip kuruyorum çünkü docker compose u pip ile kuracağım.

[root@ayhanarda-containers ~]# yum install epel-release

[root@ayhanarda-containers ~]# yum install -y python-pip

Şimdi docker compose u kuruyoruz.

[root@ayhanarda-containers ~]# pip install docker-compose

Kurulum tamamlandı.Şimdi hemen docker compose ile bir container ayağa kaldıralım.

Şimdi yaml dosyamız için bir klasör açıp içine giriyorum.

[root@ayhanarda-containers ~]# mkdir hello-world
[root@ayhanarda-containers ~]# cd hello-world

docker-compose.yml isimli dosyamızı oluşturup içine reçetemizi yazacağız. Ben favori editör olarak nano kullanıyorum , Siz farklı bir editor kullanabilirsiniz.

[root@ayhanarda-containers hello-world]# nano docker-compose.yml

içine aşağıdaki satırları yazabilir ve kaydedebilirsiniz.

ayhanarda-test:
image: hello-world

Yani aşağıdaki gibi gözükmeli.

[root@ayhanarda-containers hello-world]# cat docker-compose.yml
ayhanarda-test:
image: hello-world

Şimdi yapmamız gereken tek bir hareket kaldı , bu prospektüsün yazılı olduğu containerı up etmek , hala hello-world klasörümüzün içinde iken aşağıdaki komutu kullanabilirsiniz.

[root@ayhanarda-containers hello-world]# docker-compose up
Pulling ayhanarda-test (hello-world:latest)…
latest: Pulling from library/hello-world
03f4658f8b78: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest
Creating helloworld_ayhanarda-test_1
Attaching to helloworld_ayhanarda-test_1
ayhanarda-test_1 |
ayhanarda-test_1 | Hello from Docker.

..

Şimdi belirttiğimiz image ı indirdik , hadi bunu doğrulayalım.

[root@ayhanarda-containers hello-world]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 690ed74de00f 5 months ago 960 B

Şimdi aynı yöntemle bir de nginx kuruyorum , bunu yazmayacağım , şimdi docker hub da offical nginx i bulup adını doğrulayıp aynı yöntem ile oluşturabilirsiniz. Docker ps ile çalıştığını görebilirsiniz.

[root@ayhanarda-containers ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e37b79df162b nginx “nginx -g ‘daemon off” About a minute ago Up About a minute 80/tcp, 443/tcp nginx_nginx_1

Yukarıda bir Container id göreceksiniz , her çalışan container ın bir id si vardır, yani eğer biz bu container ın dosya sistemine girmek ister isek aşağıdaki gibi o makinanın içine erişebiliriz , hatta nginx in conf dosyasında değişiklik yapabiliriz , işimiz bitince exit yazarak çıkabiliriz.

[root@ayhanarda-containers ~]# docker exec -it e37b79df162b /bin/bash
root@e37b79df162b:/# cd etc/nginx/conf.d/
root@e37b79df162b:/etc/nginx/conf.d# ls
default.conf

Farklı docker-compose ve multi-container örnekleri ile yakında görüşmek üzere..

Ayhan ARDA

VMware vSphere üzerinde Photon OS ve Docker ve DockerUI Kurulumu

Docker ve container hosting kavramları yayılmaya devam ediyor , Bu kapsamda docker ın PhotonOs üzerinde kurulumunu ele alacağım.

Öncelikle aşağıdaki adresten Photon Os full iso yu indiriyorum.

https://dl.bintray.com/vmware/photon/iso/1.0TP2/x86_64/photon-1.0TP2.iso

Sonra vcenter ım üzerinden yeni bir sanal makina oluşturup indirdiğim iso ile boot ediyorum , buraya kadar detay vermeye gerek yok sanırım , kurulum başlangıç ekranı aşağıdaki gibi olacaktır.

photonos-1

Lisans anlaşmasını onaylamamız gerekecek.

photonos-2

Ben test için 50 Gb lık bir disk vermiştim, aşağıdaki ekran beni karşılıyor ve enter a basarak geçiyorum.Diskin içini sileceğini söylüyor ve Y harfine basarak onay veriyorum.

photonos-3

Bir sonraki ekran kurulum seçenekleri sormakta , screen shot a gerek duymadım, ben full diyerek geçtim.sonrasında bir hostname istiyor , bu tercih Size kalmış, en son olarak ta bir şifre belirlemenizi isteyecek.

Kurulum 220 sn sürdü , sunucu tekrar başlatıldı ve şimdi root kullanıcı adı ve belirlediğim şifre ile işletim sisteminin içindeyim.

Şimdi benim ortamımda dhcp yok , dolayısı ile bir ip adresi kayıtlı değil ve bu neden ile ssh erişimi de yapamıyorum , o halde bir ip adresi verelim.

Öncelikle mevcut dhcp config dosyasını static ismi ile kopyalıyorum. Önce bir ifconfig çıktımıza bakalım.

iki interface görüyorum , biri eno16777728 , diğeri ise lo (loopback)

O halde komutum şu olmalı.

root [ ~ ]# mv /etc/systemd/network/10-dhcp-en.network /etc/systemd/network/10-static-eno16777728.network

Yani 10-dhcp-en.network dosyasının adını 10-static-eno16777728.network olarak değiştirdik.

Şimdi bu dosyamızı açalım.

root [ ~ ]# nano /etc/systemd/network/10-static-eno16777728.network

İçinde aşağıdaki değişiklikleri yapalım ya da içini silelim aşağıdaki örnein aynısını ip adresi ve interface adını değiştirerek yapalım. Ben aslında public ip verdim ama ip range imin belli olmaması için örnekte local ip vermiş gibi yazıyorum.

[Match]
Name=eno16777728

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
DNS=8.8.8.8
Domains=photonos.local

Ip verdiğimize göre şimdi network servisini tekrar başlatabiliriz.

root [ ~ ]# systemctl restart systemd-networkd-service

Şimdi ssh a girebilir durumda mıyız? Tabiki hayır , öncelikle ssh config dosyamızda root girişine izin verelim.

root [ ~ ]# nano /etc/ssh/sshd_config

Bu dosya da #PermitRootLogin yes gördüğünüz kısmı PermitRootLogin yes olarak değiştiriniz. Yani başındaki diez i kaldırıp enable edin ve kaydedin. Şimdi ssh servisimizi başlatabiliriz.

root [ ~ ]# systemctl start sshd

Artık sunucumuza verdiğimiz ip ile ssh 22 nolu porttan bağlanabiliriz.

Şimdi docker daemon unu başlatmanın vakti geldi.

root [ ~ ]# systemctl start docker
root [ ~ ]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
root [ ~ ]# systemctl status docker
* docker.service – Docker Daemon
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
Active: active (running) since Wed 2016-03-23 12:48:42 UTC; 33s ago
Main PID: 429 (docker)

Hemen test için bir nginx container ı aktif etmeye ne dersiniz?

root [ ~ ]# docker run -d -p 80:80 vmwarecna/nginx
Unable to find image ‘vmwarecna/nginx:latest’ locally
latest: Pulling from vmwarecna/nginx
511136ea3c5a: Pull complete
e977d53b9210: Pull complete
c9fa20ecce88: Pull complete
184d60f5cc4f: Pull complete
96d31e36bd8a: Pull complete
fd2224b9a216: Pull complete
7f3a2bd1e995: Pull complete
4c4851e85e94: Pull complete
560d74bc7ae1: Pull complete
07f0aa77ae76: Pull complete
126105e511b8: Pull complete
775024331ffa: Pull complete
db26ae25be15: Pull complete
6d36a12c92d5: Pull complete
Digest: sha256:f73bbae0f31823c06478b1fa5efb4957bc25239802fd5ea94e4442c0a6090d23
Status: Downloaded newer image for vmwarecna/nginx:latest
d3adea692a100ce4020a91018c17433cdd4aedc90e8cd446a9845279059311aa

Mevcut çalışan containerlarımıza bir bakalım.

root [ ~ ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3adea692a10 vmwarecna/nginx “nginx -g ‘daemon off” 24 seconds ago Up 23 seconds 0.0.0.0:80->80/tcp, 443/tcp sleepy_wright

Şimdi browserdan ip adresini yazıp bir test edelim.

photonos-4

Artık elimizde nginx çalışan bir container var.

Peki bu container ları web üzerinden yönetebilir miyiz?

Tabiki evet,  DockerUi Kurulumundan bahsedelim.

root [ ~ ]# docker run -d -p 9000:9000 –privileged -v /var/run/docker.sock:/var/run/docker.sock dockerui/dockerui
Unable to find image ‘dockerui/dockerui:latest’ locally
latest: Pulling from dockerui/dockerui
706db4235055: Pull complete
84f978a622ba: Pull complete
95c8b9dc91e0: Pull complete
Digest: sha256:4bfb5b2498e98baaa4e1fd0e12e9022d0b1eb5d79fd68ee7751941bac7fcfed3
Status: Downloaded newer image for dockerui/dockerui:latest
a45c12f8abcbde61f7f759b626127a3672aa5ddef4115da2a6ccfeef563214b6
root [ ~ ]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a45c12f8abcb dockerui/dockerui “/dockerui” 4 seconds ago Up 3 seconds 0.0.0.0:9000->9000/tcp happy_raman

Şimdi browserdan ip adresiniz ve 9000 nolu port ile dockerui arayüzüne erişebilirsiniz.

Örnek : http://192.168.1.10:9000

 

dockerui-install

Vakit oldukça devamını bu konu ya da farklı bir yazı da getireceğim.

Ayhan ARDA

Docker ile ELKStack Kurulumu

Elkstack ; ElasticSearch, Logstash ve Kibana isimli 3 açık kaynak yazılımın birleşimine verilen isimdir.

Neden Docker ile kurulum derseniz adı geçen tüm bileşenleri tek tek kurmak yerine tek seferde kurmak daha cazip gözüküyor , elimizde yeni kurulmuş bir ubuntu 14 olduğunu ve ssh tan eriştiğimizi varsayalım , muhtemelen curl kurulu gelmeyecek , öncelikle kuralım.

root@ayhanarda:/# apt-get install curl

root@ayhanarda:/# curl -sSL https://get.docker.com/ubuntu/ | sudo sh

Şimdi pip ile Docker Compose kuralım.

root@ayhanarda:/# apt-get install python-pip

root@ayhanarda:/# pip install -U docker-compose

Şimdi docker-compose dosyamıza çalışma izni verelim.

root@ayhanarda:/# chmod +x /usr/local/bin/docker-compose

Şimdi kurulumun buraya kadar doğru olup olmadığını doğrulayalım.

root@ayhanarda:/# docker-compose –version
docker-compose version: 1.4.0

Eğer her şey doğru ise devam edebiliriz.

Docker-elk nın git repository sini çekelim.

root@ubuntu:/# git clone https://github.com/deviantony/docker-elk.git

Şimdi docker-elk dizinine gidip konteyner ı çekip ayağa kaldıralım.

root@ayhanarda:/# cd /docker-elk/
root@ayhanarda:/docker-elk# docker-compose up

Herşey bu kadar , şimdi biraz  beklemeliyiz. Muhtemelen 5 dk sonra aşağıdaki gibi satırlar gördüğünüzde işlem tamamlanmış demektir.

logstash_1 | INFO: [logstash-7f6fc37469c8-1-11622] started
kibana_1 | Starting Kibana
elasticsearch_1 | [2015-08-27 12:06:50,176][DEBUG][action.admin.cluster.health] [Proteus] observer: timeout notification from cluster service. timeout setting [5s], time since start [5s]
kibana_1 | {“name”:”Kibana”,”hostname”:”266bfe27abff”,”pid”:7,”level”:30,”msg”:”No existing kibana index found”,”time”:”2015-08-27T12:06:50.183Z”,”v”:0}
kibana_1 | {“name”:”Kibana”,”hostname”:”266bfe27abff”,”pid”:7,”level”:30,”msg”:”Listening on 0.0.0.0:5601″,”time”:”2015-08-27T12:06:50.364Z”,”v”:0}

Şimdi browserdan ipadresi:5601 adresine erişirsek bizi aşağıdaki Kibana arayüzü karşılayacak. Benim ip adresim 192.168.126.155 şeklinde idi.

http://192.168.126.155:5601/

elkstack1

 

Eğer cluster ı monitor etmek isterseniz aşağıdaki url ye gidebilirsiniz.

http://ipadresi:9200/_plugin/marvel/

marvelŞimdi tek yapılması gereken bu ip adresinin 5000 nolu portuna logstash forwarder ile log göndermek , güzelce işlenip grafiksel olarak Size sunuculacaktır.

Mesela ben bir sitenin access loglarını test için bir dosyaya kaydedip netcat ile sunucuya aşağıdaki komut ile bastım , kibana daki görüntüsü aşağıdaki gibi yansıdı , filtreler ile tam istediğiniz logları alabilir ve grafikler de oluşturabilirsiniz.

root@ayhanarda:/# nc localhost 5000 < /home/arda/look2linux.log

Şimdi tekrar kibana ekranına bakabilirsiniz, loglar gelmiş durumda.

elkstack2

Faydalı olması dileğimle.

Ayhan ARDA

Ubuntu 14.04 üzerine Docker Kurulumu

Bu yazıyı gelecek docker serimizin birinci adımı gibi düşünüyorum , Ubuntu üzerine docker kuracağız.

Elimizde yine sıfır bir ubuntu 14.04 olduğunu varsayıyorum , öncelikle paketleri güncelleyelim.

root@ubuntu:/home/ayhanarda# apt-get update

Şimdi docker.io yükleyelim.

root@ubuntu:/home/ayhanarda# apt-get -y install docker.io

Docker.io dosyasını klasöre bağlayalım ve path i düzeltelim.

root@ubuntu:/home/ayhanarda# ln -sf /usr/bin/docker.io /usr/local/bin/docker
root@ubuntu:/home/ayhanarda# sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

Şimdi restart sonrası tekrar otomatik olarak çalışmasını sağlayalım.

root@ubuntu:/home/ayhanarda# update-rc.d docker.io defaults

hepsi bu kadar , şimdi docker yazarak kurulduğunu görebilirsiniz.

root@ubuntu:/home/ayhanarda# docker
Usage: docker [OPTIONS] COMMAND [arg...]
 -H=[unix:///var/run/docker.sock]: tcp://host:port to bind/connect to or unix://path/to/socket to use
 
A self-sufficient runtime for linux containers.
 
Commands:
    attach    Attach to a running container
    build     Build an image from a Dockerfile
    commit    Create a new image from a container's changes
    cp        Copy files/folders from the containers filesystem to the host path
    diff      Inspect changes on a container's filesystem
    events    Get real time events from the server
    export    Stream the contents of a container as a tar archive
    history   Show the history of an image
    images    List images
    import    Create a new filesystem image from the contents of a tarball
    info      Display system-wide information
    inspect   Return low-level information on a container
    kill      Kill a running container
    load      Load an image from a tar archive
    login     Register or Login to the docker registry server
    logs      Fetch the logs of a container
    port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
    pause     Pause all processes within a container
    ps        List containers
    pull      Pull an image or a repository from the docker registry server
    push      Push an image or a repository to the docker registry server
    restart   Restart a running container
    rm        Remove one or more containers
    rmi       Remove one or more images
    run       Run a command in a new container
    save      Save an image to a tar archive
    search    Search for an image in the docker index
    start     Start a stopped container
    stop      Stop a running container
    tag       Tag an image into a repository
    top       Lookup the running processes of a container
    unpause   Unpause a paused container
    version   Show the docker version information
    wait      Block until a container stops, then print its exit code

Kullanımını bir sonraki docker yazısına sakladım.

Ayhan ARDA