SlideShare a Scribd company logo
1 of 50
Download to read offline
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
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 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

Viewers also liked (18)

Eticaret Güvenliği
Eticaret GüvenliğiEticaret Güvenliği
Eticaret Güvenliği
 
Web Onyuzu Nasil Olmali
Web Onyuzu Nasil OlmaliWeb Onyuzu Nasil Olmali
Web Onyuzu Nasil Olmali
 
Git ile Sürüm Takibi
Git ile Sürüm TakibiGit ile Sürüm Takibi
Git ile Sürüm Takibi
 
PHP Sunusu - 1
PHP Sunusu - 1PHP Sunusu - 1
PHP Sunusu - 1
 
Algoritma kurmak
Algoritma kurmakAlgoritma kurmak
Algoritma kurmak
 
Php mysql sunum
Php mysql sunumPhp mysql sunum
Php mysql sunum
 
Özgür Yazılım & GNU/Linux
Özgür Yazılım & GNU/LinuxÖzgür Yazılım & GNU/Linux
Özgür Yazılım & GNU/Linux
 
Java script
Java scriptJava script
Java script
 
Php MySQL
Php MySQLPhp MySQL
Php MySQL
 
REST yoluyla Web Servis Geliştirme
REST yoluyla Web Servis GeliştirmeREST yoluyla Web Servis Geliştirme
REST yoluyla Web Servis Geliştirme
 
PHPUnit ve Laravel
PHPUnit ve LaravelPHPUnit ve Laravel
PHPUnit ve Laravel
 
Jquery Giriş
Jquery GirişJquery Giriş
Jquery Giriş
 
Linux sunum
Linux sunumLinux sunum
Linux sunum
 
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım KılavuzuNmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
 
JavaScript sunumu
JavaScript sunumuJavaScript sunumu
JavaScript sunumu
 
Agile proje yönetimi
Agile proje yönetimiAgile proje yönetimi
Agile proje yönetimi
 
OSv at Cassandra Summit
OSv at Cassandra SummitOSv at Cassandra Summit
OSv at Cassandra Summit
 
Linux'a Giris ve VirtualBox a Ubuntu Kurulumu
Linux'a Giris ve VirtualBox a Ubuntu KurulumuLinux'a Giris ve VirtualBox a Ubuntu Kurulumu
Linux'a Giris ve VirtualBox a Ubuntu Kurulumu
 

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

Docker - Ankara Cloud Meetup
Docker - Ankara Cloud Meetup Docker - Ankara Cloud Meetup
Docker - Ankara Cloud Meetup Mustafa AKIN
 
vSphere Integrated Containers
vSphere Integrated ContainersvSphere Integrated Containers
vSphere Integrated ContainersVahric Muhtaryan
 
Abis Teknoloji şirket içi Docker sunumu
Abis Teknoloji şirket içi Docker sunumuAbis Teknoloji şirket içi Docker sunumu
Abis Teknoloji şirket içi Docker sunumuMahmut Gündoğdu
 
Docker ve kubernetes ile ilgili kısa bilgilendirmeler
Docker ve kubernetes ile ilgili kısa bilgilendirmeler Docker ve kubernetes ile ilgili kısa bilgilendirmeler
Docker ve kubernetes ile ilgili kısa bilgilendirmeler Oğuzhan İğrek
 
Sanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - DockerSanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - DockerOguz Yarimtepe
 
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
 
Sanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: DockerSanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: DockerOguz Yarimtepe
 
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
 
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
 
Android mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerAndroid mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerErcan Pinar
 
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
 
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
 
Microsoft private cloud
Microsoft private cloudMicrosoft private cloud
Microsoft private cloudMustafa
 

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

Docker - Ankara Cloud Meetup
Docker - Ankara Cloud Meetup Docker - Ankara Cloud Meetup
Docker - Ankara Cloud Meetup
 
vSphere Integrated Containers
vSphere Integrated ContainersvSphere Integrated Containers
vSphere Integrated Containers
 
Openstack Magnum CaaS
Openstack Magnum CaaSOpenstack Magnum CaaS
Openstack Magnum CaaS
 
12factor apps
12factor apps12factor apps
12factor apps
 
Abis Teknoloji şirket içi Docker sunumu
Abis Teknoloji şirket içi Docker sunumuAbis Teknoloji şirket içi Docker sunumu
Abis Teknoloji şirket içi Docker sunumu
 
Docker ve kubernetes ile ilgili kısa bilgilendirmeler
Docker ve kubernetes ile ilgili kısa bilgilendirmeler Docker ve kubernetes ile ilgili kısa bilgilendirmeler
Docker ve kubernetes ile ilgili kısa bilgilendirmeler
 
Sanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - DockerSanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - Docker
 
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
 
Sanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: DockerSanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: Docker
 
Docker 101
Docker 101Docker 101
Docker 101
 
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...
 
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
 
Bmup_v1
Bmup_v1Bmup_v1
Bmup_v1
 
Microservices Architecture
Microservices ArchitectureMicroservices Architecture
Microservices Architecture
 
Kubernate
KubernateKubernate
Kubernate
 
Android mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-schedulerAndroid mimari-cekirdek-binding-scheduler
Android mimari-cekirdek-binding-scheduler
 
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
 
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
 
Microsoft private cloud
Microsoft private cloudMicrosoft private cloud
Microsoft private cloud
 
Cloud_Computer
Cloud_ComputerCloud_Computer
Cloud_Computer
 

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
  • 4.
  • 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.
  • 22.
  • 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