Docker Nedir, Ne işe
yarar, Nasıl
Kullanılmalıdır?
Mustafa Akın
Bilgisayar Mühendisleri Odası, Docker Eğitimi
12 Kasım 2016
Docker Nedir?
• Docker açık bir platformdur.
• Taşınabilir, hafif bir çalıştırma ve paketleme aracıdır.
• Uygulamaların ‘container’ lar içinde kurulmasına
olanak sağlar.
• İşletim sistemi seviyesinde bir sanallaştırmadır.
• Container / Taşıyıcı teknolojisini kullanmaktadır.
Sanal Makineler
• Herkesin bildiği, bilgisayar içinde sanal bir bilgisayar
açılmasına olanak sağlarlar.
• Örnekleri:
• KVM
• Xen
• HyperV
• VMware ESXi
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?
Geleneksel Sanallaştırma
• Sanal İşlemci
• Sanal RAM
• Sanal Disk
• Sanal Ağ
Geleneksel Sanallaştırma
Container
• Taşıyıcılar aynı Linux çekirdeğini paylaşır
• İzolasyon namespace ve cgroups teknolojileri ile
sağlanır
• Microsoft Server 2016’dan itibaren Windows
Container desteği gelmiştir.
Container
Docker Peformansı
Docker nasıl çalışır?
• Bir dosya okunacağı zaman, bir cihazla iletişim
yapılacağı zaman ya da ekrana birşey bastırılacağı
zaman bunlar doğrudan değil, işletim sisteminin
sağladığı sistem çağrıları ile yapılır.
• Bu sistem çağrılarının izolasyonu namespace
teknolojisi ile izole ve kontrol edilebilir hale
getirilebilir.
• Cgroups teknolojisi ile de kaynakların kullanım
miktarları ve haklar sınırlanabilmektedir.
Namespace türleri
• Mount: Bir klasör ya da cihaz altında bulunan dosyaların
izolasyonu
• UTS: Farklı hostname lerin sahip olunmas
• IPC: Processler arası iletişimin, ortak alanların izolasyonu
• PID: Processlerin birbirinden izolasyonu
• Network: İzole ağ cihazları ve yönlendirme tabloları
• User: Container içinde farklı kullanıcıların eşlenmesi
cgroups Türleri
• blkio: Blok cihazları (disk) için kaynak limitleri ve kullanım
istatistikleri
• cpu: Process zamanlama ve öncelik ağırlıkları
• cpuacct: CPU kullanım miktarları
• cpuset: Container’a ayrılan işlemcilerin ve RAM modüllerinin
eşleştirilmesi
• devices: Cihazlar üzerinde kullanım hakları
• memory: RAM kullanım miktarları ve limitlenmesi
• net_prio: Network cihazlarında önceliklendirme
Sunucu’da htop
Docker’da htop
Docker İmajları
• Docker imajları açılan her container’ın kök dizinine
açar
• Docker’daki imajlar katmanlıdır, bu yüzden yeni bir
container açıldığında dosyalar eski dosyalar
kopyalanmaz, sadece değişikliklerin bilgisi tutulur.
• Bu sayede katmanlar birden fazla container
tarafından paylaşılabilir, bu da performansın
artmasını ve yer kazancını sağlar.
Docker imajları
İmaj Katmanları
Ubuntu
Java 8
Tomcat
Golang
Uygulama 2Uygulama 1
Uygulama 3
Docker Hub
Docker Store (beta)
docker pull mysql:5.6
Docker İmajı Yaratmak
• Docker imajları dosyalardan oluşur.
• Bu dosyaların yanı sıra hangi portların dinlenmesi
gerektiği, hangi dosyaların dışarıdan verilmesi
gerektiği de belirtilir
• Bunun için Dockerfile formatı bulunmaktadır.
Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?
Docker Kullanımı
• Kullanılacak olan Docker imajı indirilir
• Spesifik bir versiyon kullanılacaksa o imaj da
indirlilr, aksi takdirde en son versiyon çalışıtırılır.
• docker run ubuntu ps aux
Docker Run
• Her Docker run komutu verildiğinde belirtilen imaj
temel alınarak yeni bir container oluşturulur.
• Bu container oluşturulurken çalıştırılması gereken
komut verilmelidir, aksi takdirde imajda belirtilen
komut çalışmaktadır.
• Container içinde yapılan değişiklikler o container
içinde kalır, eğer değişiklikler saklanmak isteniyorsa
o container’dan yeni bir imaj oluşturulmalıdır.
Örnek - Sonarqube
docker run -d --name sonarqube 
-p 19000:9000 -p 19092:9092 
-e SONARQUBE_JDBC_USERNAME=sonar 
-e SONARQUBE_JDBC_PASSWORD=sonar1234 
-e SONARQUBE_JDBC_URL="jdbc:mysql://mysqlserver/sonar?
useUnicode=true&characterEncoding=utf8&rewriteBatchedState
ments=true" 
sonarqube
Örnek - MySQL
$ docker run -d --name db55 
-p 5005:3306 
-e MYQL_ROOT_PASSWORD=1234 
mysql:5.5
$ docker run -d --name db56 
-p 5007:3306 
-e MYQL_ROOT_PASSWORD=1234 
mysql:5.6
$ docker run -d --name db57 
-p 5007:3306 
-e MYQL_ROOT_PASSWORD=1234 
mysql:5.7
Docker’da Kalıcı Veri
• <Docker containerları kalıcı verilerin tutulması için
uygun değildir, bu yüzden veritabanları için
kullanılamaz> — YANLIŞ
• Kalıcı veriler container içinde tutulabildiği gibi
container dışında da volume sağlanarak
tutulabilmektedir.
Docker’da Kalıcı Veri
• Container içinde:
• docker run -d mysql —name db
• docker kill db
• docker start db
Docker’da Kalıcı Veri
• Container dışında:
• docker run -v /mydata:/var/lib/mysql mysql —
name db
• docker rm -f db
• docker run -v /mydata:/var/lib/mysql mysql —
name db
Docker’da Kalıcı Veri
• Container dışında:
• docker volume create —name mysql-dataset1
• docker run -v mysql-dataset1:/var/lib/mysql
mysql —name db
Kaynak Kullanımı
Docker Kullanım Alanları
• İzole kod çalıştırma ortamları
• Geçici temiz ortamlar
• Continous integration
• Tekrar edilebilirlik
• Kolay uygulama dağıtımı
• Uygulama ayağa kaldırma
• Mikroservisler
İleri Docker Kullanım
Tekinkleri
• Compose: Birden fazla container’dan oluşan
uygulamaların ayağa kaldırılması ve yönetimi
• Swarm: Birden fazla sunucuda bulunan Docker
kurulumlarının yönetimi ve izlenmesi
• Multi-Host Networking: Ayrı sunucularda bulunan
containerlar arasında Software Defined Networking ile
izole ağ kurulumu
• Plugins: Docker’da bulunan network, volume, IP
yönetimi, erişim hakkı yönetmi için eklentiler
Mikro servisler
Mikro servisler
• Farklı bir uygulama yazılım şekli denilebilir, klasik yöntemlerden
farklı düşünmek gerekir. Monolitik uygulamalardan vazgeçilmelidir
• Fakat, sadece havalı bir adı var diye Mikroservisler kullanılmamalı,
her uygulamaya uygun olmadığı gibi, yapılması da normalinden
fazla efor gerektirebilir.
• Uygulanabildiği alanlarda mikroservisler küçük parçaların kolay
yönetimi, ölçeklenebilmesi ve hata anında sadece ilgili servisin
değiştirilebilmesini sağlayarak hızlı geliştirme ve uygulama olanağı
sağlar.
• Kısaca, İşlevsellikler bazında uygulama küçük (mikro) servislere
ayrılmalıdır. Bu mikro servisler kalıcı bigileri kendinde tutmamalı,
gerektiğinde sayıları dinamik olarak arttırılıp azaltılabilmelidir.
Heroku ve 12 Factor App
• I. Kod: Kodlar versiyon kontrolünde tutulmalı,
versiyonlardan deploy edilmeli.
• II. Bağımlılık: Kütüphaneler ve kullanılan diğer
bileşenler açıkça belirtilmeli
• III. Konfigürasyon: Konfigürasyon dışarıdan parametre
olarak alınmalı
• IV. Destekleyici servisler: Veri tabanı gibi uygulama ile
doğrudan alakası bulunmayan servisler takıp
çıkarılabilir görülmeli
Heroku ve 12 Factor App
• V. Build, release, run: Build alma işlemi ve
çalıştırma işlemi birbirinden ayrılmalı
• VI. Prosesler: Uygulama bir ya da birden fazla
durum barındırmayacak şekilde çalıştırmalı
• VII. Port ilişkiledirme: Servisler portlar aracılığı ile
dünyaya verilmeli
• VIII. Paralel Çalıştırma: Process ler arttırılarak
kolaylıkla paralel çalıştırılabilmeli
Heroku ve 12 Factor App
• IX. Gözden çıkarılabilirlik: Uygulama kolayca
başlatılıp sorun olmadan kapatılabilmeli
• X. Ortam Eşliği: Uygulama geliştirme, test ve kullanım
ortamları olabildiğince benzer olmalı
• XI. Logs: Loglar uygulamalardan olay akışı şeklinde
toplanmalı
• XII. Yönetim prosessleri: Yönetim ve ayarlama için
gereken processler bir kez çalışacak şekilde
ayarlanmalı
Docker ve Mikroservisler
• Aşağıdaki bileşenlerden oluşan bir web uygulaması
yazdığınızı düşünün:
• Business Logic API
• Veritabanı
• Resim İşleme Servisi
• Web Sunucu
Klasik Yaklaşım
MEGA SPRING SERVICE
Veritabanı
Klasik Servis Ölçeklendirmesi
Oluşturuan mega servis için yine bir mega kaynak ayrılması gerekmektedir, fakat
sadece işlemci gücünün artması gerekse bile servisin bir kopyasının daha
düzgünce çalışabilmesi için diğer kaynakların da gereksiz yere ayrılması ile
kaynak israfı oluşur
MEGA SPRING SERVICE MEGA SPRING SERVICE
Veritabanı
Web Sunucu
Resim İşleme
Servisi
API
Veritabanı
Mikro Servis Yaklaşımı
Web Sunucu
Resim İşleme
Servisi
API
Veritabanı
Mikro Servis Ölçeklendirmesi
Her servis ihtiyaca göre ayrı sunucuya konulabilir

Resim işleme servisi sadece CPU ya daha çok bağlı iken API servisi herhangi
bir sunucuya konulabilir
Resim İşleme
Servisi
Resim İşleme
Servisi
Resim İşleme
Servisi
API
Statik Dosya Sunucusu
Dockerfile
FROM nginx:latest
ADD nginx.conf /etc/nginx/config
nginx.conf
upstream api {
server api_service_1:8000;
server api_service_2:8000;
}
upstream img {
server img_service1:4000;
server img_service2:4000;
server img_service3:4000;
server img_service4:4000;
}
server {
listen 80;
location /api {
proxy_pass http://api;
}
location /img {
proxy_pass http://img;
}
}
docker build -t web .
API
Dockerfile
FROM node:6
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 8000
CMD [ "npm", "start" ]
docker build -t api .
Resim işleme
Dockerfile
FROM java:8
RUN apt-get update
RUN apt-get install -y maven
WORKDIR /code
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]
ADD src /code/src
RUN ["mvn", "package"]
EXPOSE 4567
CMD ["java", "-jar", "target/myapp.jar"]
docker build -t imgproc .
Container’ların Çalıştırılması
• docker run -d web
• docker run -d —name=api1 
-e MYSQL=mysqlhost:3306 api
• docker run -d —name=imgproc1 imgproc
* Kaynak ihtiyaçlarına göre birden fazla
sunucuda istenilen servisler başlatılabilir
Container Yönetim
Platformları
• Container’ları elle yönetmek küçük kullanımlarda
kolay olsa da büyük ölçekli kullanımlarda bir
orkestrasyon aracı gerekebilir:
• Docker Swarm
• Kubernetes
• Mesosphere
curl -SsL get.docker.io | sh
Docker’ı Linux’ta masaüstü ya da
suncuda denemek için:
http://www.docker.com/products/overview
Docker’ı Mac ya da
Windows’ta Denemek İçin
Mustafa Akın
Teşekkürler

More Related Content

PDF
Instalacion y uso basico de Jenkins
PDF
Docker 101
PDF
Sanallaştırmada Yeni Akım - Docker
PPTX
Docker-Dasar.pptx
PDF
Docker in real life
PDF
Introduction to Docker - VIT Campus
PPTX
Slides cloud computing
PDF
Cloud-Azure.pdf
Instalacion y uso basico de Jenkins
Docker 101
Sanallaştırmada Yeni Akım - Docker
Docker-Dasar.pptx
Docker in real life
Introduction to Docker - VIT Campus
Slides cloud computing
Cloud-Azure.pdf

What's hot (20)

ODP
Docker Fundamental
PPTX
Docker: From Zero to Hero
PPTX
Docker introduction
PDF
DevOps avec Ansible et Docker
PPTX
Virtualization And Containerization.pptx
PDF
kubernetes, pourquoi et comment
PDF
Microservices, Containers and Docker
PDF
Qu'est ce que le Cloud computing ?
PDF
Introduction to docker and docker compose
DOCX
Laporan 5 routing static mikrotic router
PDF
[오픈소스컨설팅] OpenInfra Asia 2024_OpenStack & K8S로 혁신하는 기상청
PDF
Docker Introduction
PDF
Docker Introduction
PDF
Docker 101: An Introduction
PDF
Mise en place d'un système de messagerie sous debian avec: postfix, dovecot, ...
PDF
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
PPTX
Docker Networking
PDF
éTude et mise_en_place_d_une_solution_voip_sécurisée
PPT
Implentation d'une solution Cloud IAAS
PDF
왕초보를 위한 도커 사용법
Docker Fundamental
Docker: From Zero to Hero
Docker introduction
DevOps avec Ansible et Docker
Virtualization And Containerization.pptx
kubernetes, pourquoi et comment
Microservices, Containers and Docker
Qu'est ce que le Cloud computing ?
Introduction to docker and docker compose
Laporan 5 routing static mikrotic router
[오픈소스컨설팅] OpenInfra Asia 2024_OpenStack & K8S로 혁신하는 기상청
Docker Introduction
Docker Introduction
Docker 101: An Introduction
Mise en place d'un système de messagerie sous debian avec: postfix, dovecot, ...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Docker Networking
éTude et mise_en_place_d_une_solution_voip_sécurisée
Implentation d'une solution Cloud IAAS
왕초보를 위한 도커 사용법
Ad

Viewers also liked (20)

PPTX
Docker - Ankara JUG, Nisan 2015
PDF
PHPkonf'15 - PHP Uygulamanızı Güçlendirin
PDF
Jenkins
PDF
Varnish
PDF
Eticaret Güvenliği
ODP
Web Onyuzu Nasil Olmali
PDF
Git ile Sürüm Takibi
PDF
PHP Sunusu - 1
PDF
Algoritma kurmak
PPT
Php mysql sunum
PDF
Özgür Yazılım & GNU/Linux
PPT
PPT
PDF
REST yoluyla Web Servis Geliştirme
PDF
PHPUnit ve Laravel
PPT
Jquery Giriş
PPT
PPTX
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
ODP
JavaScript sunumu
Docker - Ankara JUG, Nisan 2015
PHPkonf'15 - PHP Uygulamanızı Güçlendirin
Jenkins
Varnish
Eticaret Güvenliği
Web Onyuzu Nasil Olmali
Git ile Sürüm Takibi
PHP Sunusu - 1
Algoritma kurmak
Php mysql sunum
Özgür Yazılım & GNU/Linux
REST yoluyla Web Servis Geliştirme
PHPUnit ve Laravel
Jquery Giriş
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
JavaScript sunumu
Ad

Similar to Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır? (20)

PDF
Docker - Ankara Cloud Meetup
PPTX
Docker Egitimi
PDF
PDF
Sanallastirmada yeni akim: Docker
PPTX
Docker ve kubernetes ile ilgili kısa bilgilendirmeler
PPTX
vSphere Integrated Containers
PPSX
Teknolojide Atılım - Docker İle Konforlu Geliştirme Ortamı
PDF
OpenStack Türkiye 15.Meetup Ankara: Containers, Kubernetes and OpenStack
PPTX
Azure Container Service
PPTX
Docker İle Web Hosting
PPTX
Azure Container Service
PPTX
Openstack Magnum CaaS
PPTX
Linkle mimari
PPTX
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
PPTX
12factor apps
PDF
Docker, Konteyner Teknolojisi Nedir? Docker Güvenliği Nasıl Sağlanır?
PPTX
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
PPTX
Windows Server Containers
PPTX
Microservices Architecture
PPTX
Azure Cloud Engineer - Bölüm 2
Docker - Ankara Cloud Meetup
Docker Egitimi
Sanallastirmada yeni akim: Docker
Docker ve kubernetes ile ilgili kısa bilgilendirmeler
vSphere Integrated Containers
Teknolojide Atılım - Docker İle Konforlu Geliştirme Ortamı
OpenStack Türkiye 15.Meetup Ankara: Containers, Kubernetes and OpenStack
Azure Container Service
Docker İle Web Hosting
Azure Container Service
Openstack Magnum CaaS
Linkle mimari
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
12factor apps
Docker, Konteyner Teknolojisi Nedir? Docker Güvenliği Nasıl Sağlanır?
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
Windows Server Containers
Microservices Architecture
Azure Cloud Engineer - Bölüm 2

Docker Nedir, Ne İşe Yarar, Nasıl Kullanılmalıdır?

  • 1. Docker Nedir, Ne işe yarar, Nasıl Kullanılmalıdır? Mustafa Akın Bilgisayar Mühendisleri Odası, Docker Eğitimi 12 Kasım 2016
  • 2. Docker Nedir? • Docker açık bir platformdur. • Taşınabilir, hafif bir çalıştırma ve paketleme aracıdır. • Uygulamaların ‘container’ lar içinde kurulmasına olanak sağlar. • İşletim sistemi seviyesinde bir sanallaştırmadır. • Container / Taşıyıcı teknolojisini kullanmaktadır.
  • 3. Sanal Makineler • Herkesin bildiği, bilgisayar içinde sanal bir bilgisayar açılmasına olanak sağlarlar. • Örnekleri: • KVM • Xen • HyperV • VMware ESXi
  • 5. Geleneksel Sanallaştırma • Sanal İşlemci • Sanal RAM • Sanal Disk • Sanal Ağ
  • 7. Container • Taşıyıcılar aynı Linux çekirdeğini paylaşır • İzolasyon namespace ve cgroups teknolojileri ile sağlanır • Microsoft Server 2016’dan itibaren Windows Container desteği gelmiştir.
  • 10. Docker nasıl çalışır? • Bir dosya okunacağı zaman, bir cihazla iletişim yapılacağı zaman ya da ekrana birşey bastırılacağı zaman bunlar doğrudan değil, işletim sisteminin sağladığı sistem çağrıları ile yapılır. • Bu sistem çağrılarının izolasyonu namespace teknolojisi ile izole ve kontrol edilebilir hale getirilebilir. • Cgroups teknolojisi ile de kaynakların kullanım miktarları ve haklar sınırlanabilmektedir.
  • 11. Namespace türleri • Mount: Bir klasör ya da cihaz altında bulunan dosyaların izolasyonu • UTS: Farklı hostname lerin sahip olunmas • IPC: Processler arası iletişimin, ortak alanların izolasyonu • PID: Processlerin birbirinden izolasyonu • Network: İzole ağ cihazları ve yönlendirme tabloları • User: Container içinde farklı kullanıcıların eşlenmesi
  • 12. cgroups Türleri • blkio: Blok cihazları (disk) için kaynak limitleri ve kullanım istatistikleri • cpu: Process zamanlama ve öncelik ağırlıkları • cpuacct: CPU kullanım miktarları • cpuset: Container’a ayrılan işlemcilerin ve RAM modüllerinin eşleştirilmesi • devices: Cihazlar üzerinde kullanım hakları • memory: RAM kullanım miktarları ve limitlenmesi • net_prio: Network cihazlarında önceliklendirme
  • 15. Docker İmajları • Docker imajları açılan her container’ın kök dizinine açar • Docker’daki imajlar katmanlıdır, bu yüzden yeni bir container açıldığında dosyalar eski dosyalar kopyalanmaz, sadece değişikliklerin bilgisi tutulur. • Bu sayede katmanlar birden fazla container tarafından paylaşılabilir, bu da performansın artmasını ve yer kazancını sağlar.
  • 21. Docker İmajı Yaratmak • Docker imajları dosyalardan oluşur. • Bu dosyaların yanı sıra hangi portların dinlenmesi gerektiği, hangi dosyaların dışarıdan verilmesi gerektiği de belirtilir • Bunun için Dockerfile formatı bulunmaktadır.
  • 23. Docker Kullanımı • Kullanılacak olan Docker imajı indirilir • Spesifik bir versiyon kullanılacaksa o imaj da indirlilr, aksi takdirde en son versiyon çalışıtırılır. • docker run ubuntu ps aux
  • 24. Docker Run • Her Docker run komutu verildiğinde belirtilen imaj temel alınarak yeni bir container oluşturulur. • Bu container oluşturulurken çalıştırılması gereken komut verilmelidir, aksi takdirde imajda belirtilen komut çalışmaktadır. • Container içinde yapılan değişiklikler o container içinde kalır, eğer değişiklikler saklanmak isteniyorsa o container’dan yeni bir imaj oluşturulmalıdır.
  • 25. Örnek - Sonarqube docker run -d --name sonarqube -p 19000:9000 -p 19092:9092 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar1234 -e SONARQUBE_JDBC_URL="jdbc:mysql://mysqlserver/sonar? useUnicode=true&characterEncoding=utf8&rewriteBatchedState ments=true" sonarqube
  • 26. Örnek - MySQL $ docker run -d --name db55 -p 5005:3306 -e MYQL_ROOT_PASSWORD=1234 mysql:5.5 $ docker run -d --name db56 -p 5007:3306 -e MYQL_ROOT_PASSWORD=1234 mysql:5.6 $ docker run -d --name db57 -p 5007:3306 -e MYQL_ROOT_PASSWORD=1234 mysql:5.7
  • 27. Docker’da Kalıcı Veri • <Docker containerları kalıcı verilerin tutulması için uygun değildir, bu yüzden veritabanları için kullanılamaz> — YANLIŞ • Kalıcı veriler container içinde tutulabildiği gibi container dışında da volume sağlanarak tutulabilmektedir.
  • 28. Docker’da Kalıcı Veri • Container içinde: • docker run -d mysql —name db • docker kill db • docker start db
  • 29. Docker’da Kalıcı Veri • Container dışında: • docker run -v /mydata:/var/lib/mysql mysql — name db • docker rm -f db • docker run -v /mydata:/var/lib/mysql mysql — name db
  • 30. Docker’da Kalıcı Veri • Container dışında: • docker volume create —name mysql-dataset1 • docker run -v mysql-dataset1:/var/lib/mysql mysql —name db
  • 32. Docker Kullanım Alanları • İzole kod çalıştırma ortamları • Geçici temiz ortamlar • Continous integration • Tekrar edilebilirlik • Kolay uygulama dağıtımı • Uygulama ayağa kaldırma • Mikroservisler
  • 33. İleri Docker Kullanım Tekinkleri • Compose: Birden fazla container’dan oluşan uygulamaların ayağa kaldırılması ve yönetimi • Swarm: Birden fazla sunucuda bulunan Docker kurulumlarının yönetimi ve izlenmesi • Multi-Host Networking: Ayrı sunucularda bulunan containerlar arasında Software Defined Networking ile izole ağ kurulumu • Plugins: Docker’da bulunan network, volume, IP yönetimi, erişim hakkı yönetmi için eklentiler
  • 35. Mikro servisler • Farklı bir uygulama yazılım şekli denilebilir, klasik yöntemlerden farklı düşünmek gerekir. Monolitik uygulamalardan vazgeçilmelidir • Fakat, sadece havalı bir adı var diye Mikroservisler kullanılmamalı, her uygulamaya uygun olmadığı gibi, yapılması da normalinden fazla efor gerektirebilir. • Uygulanabildiği alanlarda mikroservisler küçük parçaların kolay yönetimi, ölçeklenebilmesi ve hata anında sadece ilgili servisin değiştirilebilmesini sağlayarak hızlı geliştirme ve uygulama olanağı sağlar. • Kısaca, İşlevsellikler bazında uygulama küçük (mikro) servislere ayrılmalıdır. Bu mikro servisler kalıcı bigileri kendinde tutmamalı, gerektiğinde sayıları dinamik olarak arttırılıp azaltılabilmelidir.
  • 36. Heroku ve 12 Factor App • I. Kod: Kodlar versiyon kontrolünde tutulmalı, versiyonlardan deploy edilmeli. • II. Bağımlılık: Kütüphaneler ve kullanılan diğer bileşenler açıkça belirtilmeli • III. Konfigürasyon: Konfigürasyon dışarıdan parametre olarak alınmalı • IV. Destekleyici servisler: Veri tabanı gibi uygulama ile doğrudan alakası bulunmayan servisler takıp çıkarılabilir görülmeli
  • 37. Heroku ve 12 Factor App • V. Build, release, run: Build alma işlemi ve çalıştırma işlemi birbirinden ayrılmalı • VI. Prosesler: Uygulama bir ya da birden fazla durum barındırmayacak şekilde çalıştırmalı • VII. Port ilişkiledirme: Servisler portlar aracılığı ile dünyaya verilmeli • VIII. Paralel Çalıştırma: Process ler arttırılarak kolaylıkla paralel çalıştırılabilmeli
  • 38. Heroku ve 12 Factor App • IX. Gözden çıkarılabilirlik: Uygulama kolayca başlatılıp sorun olmadan kapatılabilmeli • X. Ortam Eşliği: Uygulama geliştirme, test ve kullanım ortamları olabildiğince benzer olmalı • XI. Logs: Loglar uygulamalardan olay akışı şeklinde toplanmalı • XII. Yönetim prosessleri: Yönetim ve ayarlama için gereken processler bir kez çalışacak şekilde ayarlanmalı
  • 39. Docker ve Mikroservisler • Aşağıdaki bileşenlerden oluşan bir web uygulaması yazdığınızı düşünün: • Business Logic API • Veritabanı • Resim İşleme Servisi • Web Sunucu
  • 40. Klasik Yaklaşım MEGA SPRING SERVICE Veritabanı
  • 41. Klasik Servis Ölçeklendirmesi Oluşturuan mega servis için yine bir mega kaynak ayrılması gerekmektedir, fakat sadece işlemci gücünün artması gerekse bile servisin bir kopyasının daha düzgünce çalışabilmesi için diğer kaynakların da gereksiz yere ayrılması ile kaynak israfı oluşur MEGA SPRING SERVICE MEGA SPRING SERVICE Veritabanı
  • 43. Web Sunucu Resim İşleme Servisi API Veritabanı Mikro Servis Ölçeklendirmesi Her servis ihtiyaca göre ayrı sunucuya konulabilir
 Resim işleme servisi sadece CPU ya daha çok bağlı iken API servisi herhangi bir sunucuya konulabilir Resim İşleme Servisi Resim İşleme Servisi Resim İşleme Servisi API
  • 44. Statik Dosya Sunucusu Dockerfile FROM nginx:latest ADD nginx.conf /etc/nginx/config nginx.conf upstream api { server api_service_1:8000; server api_service_2:8000; } upstream img { server img_service1:4000; server img_service2:4000; server img_service3:4000; server img_service4:4000; } server { listen 80; location /api { proxy_pass http://api; } location /img { proxy_pass http://img; } } docker build -t web .
  • 45. API Dockerfile FROM node:6 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN npm install COPY . /usr/src/app EXPOSE 8000 CMD [ "npm", "start" ] docker build -t api .
  • 46. Resim işleme Dockerfile FROM java:8 RUN apt-get update RUN apt-get install -y maven WORKDIR /code ADD pom.xml /code/pom.xml RUN ["mvn", "dependency:resolve"] RUN ["mvn", "verify"] ADD src /code/src RUN ["mvn", "package"] EXPOSE 4567 CMD ["java", "-jar", "target/myapp.jar"] docker build -t imgproc .
  • 47. Container’ların Çalıştırılması • docker run -d web • docker run -d —name=api1 -e MYSQL=mysqlhost:3306 api • docker run -d —name=imgproc1 imgproc * Kaynak ihtiyaçlarına göre birden fazla sunucuda istenilen servisler başlatılabilir
  • 48. Container Yönetim Platformları • Container’ları elle yönetmek küçük kullanımlarda kolay olsa da büyük ölçekli kullanımlarda bir orkestrasyon aracı gerekebilir: • Docker Swarm • Kubernetes • Mesosphere
  • 49. curl -SsL get.docker.io | sh Docker’ı Linux’ta masaüstü ya da suncuda denemek için: http://www.docker.com/products/overview Docker’ı Mac ya da Windows’ta Denemek İçin