Bilgisayar Mühendisleri Odası, Docker Eğitimi
12 Kasım 2016
1 of 50
Downloaded 33 times
More Related Content
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
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.
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
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