SlideShare a Scribd company logo
1 of 60
Download to read offline
Docker
Ankara Cloud Meetup
11 Mayıs 2017
Mustafa Akın
Mustafa Akın
• 2014’ten beri Docker kullanıcısı, Docker üzerine
sistemler
• Container Scheduling üzerine Bilkent CS Master
& PhD devam
• 2 yıldır Havelsan’da Bulut Bilişim üzerinde
çalışma ve proje
• Mayıs itibariyle OpsGenie DevOps
• Linux & Golang
Container
Docker Nedir?
• Açık bir platform
• Taşınabilir, hafif çalıştırma ve paketleme aracı
• Uygulamaların otomatik containerlar içinde
otomatik deploy edilmesi
• İşletim sistemi seviyesi sanallaştırma
• İzole containerlar
Sanallaştırma
• 4 core, 2 diskli 100 tane sunucu vs 24 core, 36
disk 10 sunucu
• Donanımı büyük ölçeklerde almak bir noktaya
kadar daha uygun ve mantıklı
• Ama büyük bir donanımı da tamamen bir
kullanıcıya ayırmak mantıklı değil
Sanallaştırma
• KVM: Kernel based Virtual Machine
• Sanal CPU
• Sanal RAM
• QEMU: Quick EMUlator
• Sanal Disk
• Sanal CD Sürücü
• Sanal Ekran Kartı
Sanallaştırma
Sanallaştırma
Container
• Container’lar aynı Linux kernelini paylaşır
• İzolasyon namespace ve cgroups ile sağlanır
• Microsoft da kendi container teknolojisini
geliştirdi, Windows Server 2016
Container Performansı
Docker nasıl çalışıyor?
• İşletim sistemi size system call mimarisi sunar
• Siz gerçekten dosyayı/ağı kullanamazsınız,
işletim sisteminden rica edersiniz
• Docker namespace kullanarak system call ların
izole olmasını sağlar
• Cgroups ile de kaynak ayrımı ve takibi
yapılmasını sağlar
Namespace
• Mount: Dosya sistemi bağlantı noktası izolasyonu
• UTS: Domain ve bilgisayar adı izolasyonu
• IPC: Interprocess communication izolasyonu
• PID: Process küme izolasyonu
• Network: Farklı ağ cihazları ve yönlendirme tablosu
• User: Container içinde farklı user id’ye sahip
olunması
Cgroups
• blkio: Blok cihazları, disk
• cpu: CPU scheduling, görev ağırlıkları
• cpuacct: CPU kullanım raporları
• cpuset: İzin verilen CPU’lar
• devices: Fiziksel ve sanal cihazlar, webcam, GPU
• memory: RAM Limitleri ve kullanım raporları
• net_prio: Network paket önceliği
İşletim sisteminde htop
Container içinde htop
Docker Demo
Docker Demo
Docker Demo
Docker Demo
Docker Run Yapısı
• docker run -ti ubuntu:14.04 bash myscript.sh
• -ti - Flag, örnek t=terminal ve i=input aç
• ubuntu:14.04 - imaj adı
• bash - process adı
• myscript.sh - parametre(ler)
Docker İmajları
• Her docker run komutu ile yeni bir container açılır
• Docker container açmak için bir imaj adına ihtiyaç
duyar, açılan container bu imajı temel alır
• Yapılan değişiklikler o container’da kalır, orjinal
imaj bozulmaz
• Bunu hızlandırmak için COW (copy-on-write)
dosya sistemleri kullanılmaktadır (AUFS, BTRFS,
Overlay)
Docker İmajları
Java
Ubuntu
Tomcat
Go Python
Alpine Linux
Yeni Container
Yeni Container Yeni Container Yeni Container
Docker Hub
Docker Store
docker pull
docker pull
Manuel olarak Docker imajı
oluşturmak
docker images
Dockerfile
docker build
docker build
Kaynak Limitleme
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
Docker Yükleme
Docker Kullanım Örnekleri
Docker Kullanım Örnekleri
Gerçekçi Docker Kullanım
Örnekleri
• İzole veri tabanları oluşturup ve kullanıp atmak
(MySQL, Oracle, MSSQL Linux)
• Uygulama sunucuları çalıştırma (Tomcat,
Glassfish)
• Tekrarlanabilir ortamlarda Unit Testler çalıştırma
• Entegrasyon testleri çalıştırma
• Continous Integration ortamı oluşturma
Gerçekçi Docker Kullanım
Örnekleri
• Onlarca micro-servisi deploy etmek
• Deployment versiyonlamayı sağlayıp, kolaylıkla
versiyonlar arası geçiş yapabilmek
• Aynı uygulamanın birden fazla versiyonunu aynı anda
çalıştırabilmek
• Binlerce container açıyıp sistemde etki yaratmadan
kaldırabilmek
• Host’lardan bağımsız ortamlar oluşturup
tekrarlanabilirliği sağlamak
İleri Docker Kullanım
Teknikleri
• 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ı, mikro servisler kalıcı bigileri kendinde tutmamalı,
gerektiğinde sayıları dinamik olarak arttırılıp azaltılabilmeli
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 açıkça ayrılmalı
• VI. Prosesler: Uygulama bir ya da birden fazla durum
barındırmayacak şekilde processler olarak çalıştırmalı
• VII. Port ilişkiledirme: Servisler portlar aracılığı ile
dünyaya sağlanmalı
• 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 4000
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
Docker Üzerine Gelişmiş
Sistemler
• Docker Swarm
• Kubernetes
• Mesosphere
• IBM Bluemix
• Amazon Container Service
• Google Container Engine (GKE)
Docker yükleme
• Linux: curl -SsL get.docker.com | sh
• Mac: Docker for Mac
• Windows: Docker for Windows
Mustafa Akın
@mustafaakin
mustafa91@gmail com
Teşekkürler!
Sorularınız?

More Related Content

What's hot

React Bootcamp Day 1 - Yunus Demirpolat
React Bootcamp Day 1 - Yunus DemirpolatReact Bootcamp Day 1 - Yunus Demirpolat
React Bootcamp Day 1 - Yunus Demirpolatkloia
 
Event Driven Architecture And Message Queues by Orçun Çolak
Event Driven Architecture And Message Queues by Orçun ÇolakEvent Driven Architecture And Message Queues by Orçun Çolak
Event Driven Architecture And Message Queues by Orçun ÇolakOrçun Çolak
 
React Bootcamp Day 2 - Yunus Demirpolat
React Bootcamp Day 2 - Yunus DemirpolatReact Bootcamp Day 2 - Yunus Demirpolat
React Bootcamp Day 2 - Yunus Demirpolatkloia
 
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - TürkçeApache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - TürkçeEmre Akış
 
Docker node-nginx-redis ipnordic demo
Docker node-nginx-redis ipnordic demoDocker node-nginx-redis ipnordic demo
Docker node-nginx-redis ipnordic demoCemal Erdemir
 

What's hot (13)

Openstack Magnum CaaS
Openstack Magnum CaaSOpenstack Magnum CaaS
Openstack Magnum CaaS
 
12factor apps
12factor apps12factor apps
12factor apps
 
React Bootcamp Day 1 - Yunus Demirpolat
React Bootcamp Day 1 - Yunus DemirpolatReact Bootcamp Day 1 - Yunus Demirpolat
React Bootcamp Day 1 - Yunus Demirpolat
 
Git ve GitHub
Git ve GitHubGit ve GitHub
Git ve GitHub
 
Event Driven Architecture And Message Queues by Orçun Çolak
Event Driven Architecture And Message Queues by Orçun ÇolakEvent Driven Architecture And Message Queues by Orçun Çolak
Event Driven Architecture And Message Queues by Orçun Çolak
 
Hyper-v v2 - MSHowto.Org
Hyper-v v2 - MSHowto.OrgHyper-v v2 - MSHowto.Org
Hyper-v v2 - MSHowto.Org
 
Docker 101
Docker 101Docker 101
Docker 101
 
React Bootcamp Day 2 - Yunus Demirpolat
React Bootcamp Day 2 - Yunus DemirpolatReact Bootcamp Day 2 - Yunus Demirpolat
React Bootcamp Day 2 - Yunus Demirpolat
 
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - TürkçeApache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
 
NodeJS Nedir
NodeJS NedirNodeJS Nedir
NodeJS Nedir
 
Hyper v
Hyper vHyper v
Hyper v
 
Docker node-nginx-redis ipnordic demo
Docker node-nginx-redis ipnordic demoDocker node-nginx-redis ipnordic demo
Docker node-nginx-redis ipnordic demo
 
JavaScript Sunumu
JavaScript SunumuJavaScript Sunumu
JavaScript Sunumu
 

Similar to Docker - Ankara Cloud Meetup

System Center 2012 SP1 ve R2 Yenilikleri
System Center 2012 SP1 ve R2 YenilikleriSystem Center 2012 SP1 ve R2 Yenilikleri
System Center 2012 SP1 ve R2 YenilikleriMustafa
 
System Center 2012 R2 ile Gelen Yenilikler
System Center 2012 R2 ile Gelen YeniliklerSystem Center 2012 R2 ile Gelen Yenilikler
System Center 2012 R2 ile Gelen YeniliklerMustafa
 
Microservices Architecture
Microservices ArchitectureMicroservices Architecture
Microservices ArchitectureDilaver Demirel
 
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...Tolga Kaprol
 
Windows Server 2008 R2 ile Gelen Yenilikler
Windows Server 2008 R2 ile Gelen YeniliklerWindows Server 2008 R2 ile Gelen Yenilikler
Windows Server 2008 R2 ile Gelen YeniliklerSerhad MAKBULOĞLU, MBA
 
Microsoft Private Cloud ve Datacenter Yönetimi
Microsoft Private Cloud ve Datacenter YönetimiMicrosoft Private Cloud ve Datacenter Yönetimi
Microsoft Private Cloud ve Datacenter YönetimiMSHOWTO Bilisim Toplulugu
 
WordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli sitelerWordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli sitelerMustafa UYSAL
 
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017Serhat Dirik
 
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1Önder Değer
 
Microsoft private cloud
Microsoft private cloudMicrosoft private cloud
Microsoft private cloudMustafa
 
Android mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerAndroid mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerErcan Pinar
 
System Center 2012 Ürün Ailesi Yenilikleri ve Uçtan Uca Yönetimi
System Center 2012 Ürün Ailesi Yenilikleri ve Uçtan Uca YönetimiSystem Center 2012 Ürün Ailesi Yenilikleri ve Uçtan Uca Yönetimi
System Center 2012 Ürün Ailesi Yenilikleri ve Uçtan Uca YönetimiMustafa
 
Azure Sanal Makineler
Azure Sanal MakinelerAzure Sanal Makineler
Azure Sanal MakinelerMustafa
 
Ağ i̇şleti̇m si̇stemleri̇ne örnekler
Ağ i̇şleti̇m si̇stemleri̇ne örneklerAğ i̇şleti̇m si̇stemleri̇ne örnekler
Ağ i̇şleti̇m si̇stemleri̇ne örneklerAlonelaz
 

Similar to Docker - Ankara Cloud Meetup (20)

System Center 2012 SP1 ve R2 Yenilikleri
System Center 2012 SP1 ve R2 YenilikleriSystem Center 2012 SP1 ve R2 Yenilikleri
System Center 2012 SP1 ve R2 Yenilikleri
 
System Center 2012 R2 ile Gelen Yenilikler
System Center 2012 R2 ile Gelen YeniliklerSystem Center 2012 R2 ile Gelen Yenilikler
System Center 2012 R2 ile Gelen Yenilikler
 
Microservices Architecture
Microservices ArchitectureMicroservices Architecture
Microservices Architecture
 
Kubernate
KubernateKubernate
Kubernate
 
Bmup_v1
Bmup_v1Bmup_v1
Bmup_v1
 
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
Sinema Seans Bilgi ve Rezervasyon Sisteminin Mikro Servis Yaklaşımıyla Gelişt...
 
Capulus Product Overview
Capulus Product OverviewCapulus Product Overview
Capulus Product Overview
 
Windows Server 2008 R2 ile Gelen Yenilikler
Windows Server 2008 R2 ile Gelen YeniliklerWindows Server 2008 R2 ile Gelen Yenilikler
Windows Server 2008 R2 ile Gelen Yenilikler
 
Cloud_Computer
Cloud_ComputerCloud_Computer
Cloud_Computer
 
Devnot - Dev Summit 2018
Devnot - Dev Summit 2018Devnot - Dev Summit 2018
Devnot - Dev Summit 2018
 
Microsoft Azure Temelleri - Modul 2
Microsoft Azure Temelleri - Modul 2Microsoft Azure Temelleri - Modul 2
Microsoft Azure Temelleri - Modul 2
 
Microsoft Private Cloud ve Datacenter Yönetimi
Microsoft Private Cloud ve Datacenter YönetimiMicrosoft Private Cloud ve Datacenter Yönetimi
Microsoft Private Cloud ve Datacenter Yönetimi
 
WordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli sitelerWordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli siteler
 
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
OPENSHIFT KONTEYNER PLATFORM İLE GELİŞTİRMEYE HIZLI BAŞLANGIÇ - Webinar-Aug2017
 
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
Microsoft Azure ITPro - Microsoft Azure'a Giriş- Bölüm 1
 
Microsoft private cloud
Microsoft private cloudMicrosoft private cloud
Microsoft private cloud
 
Android mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerAndroid mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-scheduler
 
System Center 2012 Ürün Ailesi Yenilikleri ve Uçtan Uca Yönetimi
System Center 2012 Ürün Ailesi Yenilikleri ve Uçtan Uca YönetimiSystem Center 2012 Ürün Ailesi Yenilikleri ve Uçtan Uca Yönetimi
System Center 2012 Ürün Ailesi Yenilikleri ve Uçtan Uca Yönetimi
 
Azure Sanal Makineler
Azure Sanal MakinelerAzure Sanal Makineler
Azure Sanal Makineler
 
Ağ i̇şleti̇m si̇stemleri̇ne örnekler
Ağ i̇şleti̇m si̇stemleri̇ne örneklerAğ i̇şleti̇m si̇stemleri̇ne örnekler
Ağ i̇şleti̇m si̇stemleri̇ne örnekler
 

Docker - Ankara Cloud Meetup

  • 1. Docker Ankara Cloud Meetup 11 Mayıs 2017 Mustafa Akın
  • 2. Mustafa Akın • 2014’ten beri Docker kullanıcısı, Docker üzerine sistemler • Container Scheduling üzerine Bilkent CS Master & PhD devam • 2 yıldır Havelsan’da Bulut Bilişim üzerinde çalışma ve proje • Mayıs itibariyle OpsGenie DevOps • Linux & Golang
  • 4. Docker Nedir? • Açık bir platform • Taşınabilir, hafif çalıştırma ve paketleme aracı • Uygulamaların otomatik containerlar içinde otomatik deploy edilmesi • İşletim sistemi seviyesi sanallaştırma • İzole containerlar
  • 5.
  • 6. Sanallaştırma • 4 core, 2 diskli 100 tane sunucu vs 24 core, 36 disk 10 sunucu • Donanımı büyük ölçeklerde almak bir noktaya kadar daha uygun ve mantıklı • Ama büyük bir donanımı da tamamen bir kullanıcıya ayırmak mantıklı değil
  • 7. Sanallaştırma • KVM: Kernel based Virtual Machine • Sanal CPU • Sanal RAM • QEMU: Quick EMUlator • Sanal Disk • Sanal CD Sürücü • Sanal Ekran Kartı
  • 10. Container • Container’lar aynı Linux kernelini paylaşır • İzolasyon namespace ve cgroups ile sağlanır • Microsoft da kendi container teknolojisini geliştirdi, Windows Server 2016
  • 12. Docker nasıl çalışıyor? • İşletim sistemi size system call mimarisi sunar • Siz gerçekten dosyayı/ağı kullanamazsınız, işletim sisteminden rica edersiniz • Docker namespace kullanarak system call ların izole olmasını sağlar • Cgroups ile de kaynak ayrımı ve takibi yapılmasını sağlar
  • 13. Namespace • Mount: Dosya sistemi bağlantı noktası izolasyonu • UTS: Domain ve bilgisayar adı izolasyonu • IPC: Interprocess communication izolasyonu • PID: Process küme izolasyonu • Network: Farklı ağ cihazları ve yönlendirme tablosu • User: Container içinde farklı user id’ye sahip olunması
  • 14. Cgroups • blkio: Blok cihazları, disk • cpu: CPU scheduling, görev ağırlıkları • cpuacct: CPU kullanım raporları • cpuset: İzin verilen CPU’lar • devices: Fiziksel ve sanal cihazlar, webcam, GPU • memory: RAM Limitleri ve kullanım raporları • net_prio: Network paket önceliği
  • 21. Docker Run Yapısı • docker run -ti ubuntu:14.04 bash myscript.sh • -ti - Flag, örnek t=terminal ve i=input aç • ubuntu:14.04 - imaj adı • bash - process adı • myscript.sh - parametre(ler)
  • 22. Docker İmajları • Her docker run komutu ile yeni bir container açılır • Docker container açmak için bir imaj adına ihtiyaç duyar, açılan container bu imajı temel alır • Yapılan değişiklikler o container’da kalır, orjinal imaj bozulmaz • Bunu hızlandırmak için COW (copy-on-write) dosya sistemleri kullanılmaktadır (AUFS, BTRFS, Overlay)
  • 23. Docker İmajları Java Ubuntu Tomcat Go Python Alpine Linux Yeni Container Yeni Container Yeni Container Yeni Container
  • 28. Manuel olarak Docker imajı oluşturmak
  • 34. 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.
  • 35. Docker’da Kalıcı Veri • Container içinde: • docker run -d mysql —name db • docker kill db • docker start db
  • 36. 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
  • 37. 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
  • 41. Gerçekçi Docker Kullanım Örnekleri • İzole veri tabanları oluşturup ve kullanıp atmak (MySQL, Oracle, MSSQL Linux) • Uygulama sunucuları çalıştırma (Tomcat, Glassfish) • Tekrarlanabilir ortamlarda Unit Testler çalıştırma • Entegrasyon testleri çalıştırma • Continous Integration ortamı oluşturma
  • 42. Gerçekçi Docker Kullanım Örnekleri • Onlarca micro-servisi deploy etmek • Deployment versiyonlamayı sağlayıp, kolaylıkla versiyonlar arası geçiş yapabilmek • Aynı uygulamanın birden fazla versiyonunu aynı anda çalıştırabilmek • Binlerce container açıyıp sistemde etki yaratmadan kaldırabilmek • Host’lardan bağımsız ortamlar oluşturup tekrarlanabilirliği sağlamak
  • 43. İleri Docker Kullanım Teknikleri • 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
  • 45. 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ı, mikro servisler kalıcı bigileri kendinde tutmamalı, gerektiğinde sayıları dinamik olarak arttırılıp azaltılabilmeli
  • 46. 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
  • 47. Heroku ve 12 Factor App • V. Build, release, run: Build alma işlemi ve çalıştırma işlemi birbirinden açıkça ayrılmalı • VI. Prosesler: Uygulama bir ya da birden fazla durum barındırmayacak şekilde processler olarak çalıştırmalı • VII. Port ilişkiledirme: Servisler portlar aracılığı ile dünyaya sağlanmalı • VIII. Paralel Çalıştırma: Process ler arttırılarak kolaylıkla paralel çalıştırılabilmeli
  • 48. 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ı
  • 49. 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
  • 50. Klasik Yaklaşım MEGA SPRING SERVICE Veritabanı
  • 51. 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ı
  • 53. 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
  • 54. 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 .
  • 55. 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 .
  • 56. 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 4000 CMD ["java", "-jar", "target/myapp.jar"] docker build -t imgproc .
  • 57. 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
  • 58. Docker Üzerine Gelişmiş Sistemler • Docker Swarm • Kubernetes • Mesosphere • IBM Bluemix • Amazon Container Service • Google Container Engine (GKE)
  • 59. Docker yükleme • Linux: curl -SsL get.docker.com | sh • Mac: Docker for Mac • Windows: Docker for Windows