Geleceğin Teknolojisi Docker Nedir? Nasıl Kullanılır?

kondanta

Katılımcı Üye
29 Tem 2017
910
0
CNCF

Merhaba arkadaşlar, bugün sizlere parlamakta olan container teknolojisi "docker"dan bahsedeceğim. Öncelikle, docker nedir sorusuna cevap vererek başlayalım. Docker aslında bir DevOps tooludur. Kernel seviyesinde virtualization ya da daha bilinen adıyla "containerization" yapar. Low levelda nasıl çalıştığına dair daha uzun detayları
buradan bulabilirsiniz, ben uzun uzadıya değinmek istemiyorum.
Bir de neden docker sorusuna yanıt verelim. Bir sistemi bir yerden alıp, başka bir yere taşıma ihtiyacı, taşınan sistemde bütün herşeyin sıfırdan kurulum gerektirmesi gibi problemlerden dolayı diyebilirim. Tabii ki arkasında yatan başka sebepler de var, lakin bize en yakın olanı bu zannımca. Docker bize bir "image" seçtirir. Bu image yeri gelir bir OS (evet ubuntudur, centosdur) yeri gelir bir applikasyon olur.(databasedir, nodejsdir gccdir) Bu imageı bulunduran container aslında sistem de izole olmuş bir şeklide çalışmaktadır. Bu da bir diğer deyişle, kendi minik dünyasında çalışmaktadır.

Bunun dışında bilinmesi gerektiğini düşündüğüm bir diğer şey ise, docker, docker-compose
ve docker swarm (veya bir benzeri olan kubernetes) arasındaki farklar ve ne zaman hangi şartlarda neyin kullanılması gerektiği.

* Docker, bir adet container, yani bir servistir. İçerisinde belirtilen işi izole ederek çalıştırır.
* Docker-compose, birden fazla işi tek bir servis olarak çalıştırmanızı sağlar.
Yani tek bir servis içerisinde birden fazla container bulundurup, bunları
tek bir servis olarak serve eder.
* Docker swarm (ya da kubernetes), birbirinden farklı docker hostlarını(clusterlarını)
organize etmeye birbirleri arasındaki network ayarlarını değiştirmeye
ve bütün hepsini tek bir ürün olarak birbirine bağlamaya yarar.

Bu konuda ağırlıklı olarak Docker-compose üzerinden ilerleyeceğim. Lakin compose içerisinde kullanılan tüm ayarlar sadece 1 docker instanceı için de kullanılabilir, aklınızda bulunsun.


Öncelikle, dockerı ve docker composeu sistemimize kurarak başlayaylım.
Ben arch linux kullanıyorum, siz kendi distronuza uygun olan komutları yazarak devam edersiniz.
Kod:
$ sudo pacman -S docker
$ sudo pacman -S docker-compose
kurulum yapıldıktan sonra docker servisimizi kontrol edelim.
ddfAKU.png
ben işim bittiğinde kapatıyorum genelde servisleri, o yüzden açalım,
9I9B2f.png

A4xbLa.png

Not düşeyim, eğer docker servisi açık değilse ps komutunu çalıştırdığınız zaman
hata alacaksınız, o yüzden servisin çalıştığından emin olun.

Docker servisimizi başarılı bir şekilde çalışır hale getirdikten sonra yeni bir klasör oluşturup, docker-compose dosyasını tutacağımız bir klasör belirliyoruz.
09RSNz.png


eveet, gelelim docker-compose dosyasını yazma aşamasına.
QcCPay.png

Bende hazır yazılmışı var. Lakin burayı size detaylı şekilde açıklamaya çalışacağım. Öncelikle, kullanmak istediğiniz imagei hub.docker.com adresinden arayın. docker pull komutu ile sisteminize indirin. Eğer ben imaj kullanmak istemiyorum, Dockerfile'ımı kendim yazacağım diyorsanız image kısmına Dockerfile'ın bulunduğu yolu belirtmeniz gerekmekte. "./serviceX" gibi.

Şimdi yaml dosyasının içeriğine gelecek olursak,
version, docker-compose versiyonu. Versiyon arttıkça yeni bir kaç özellik ekleniyor tahmin edebileceğiniz gibi. Son versiyonu 3.7, ama ben 3 olarak kullanıyorum. Yeni eklenen özelliklere ihtiyaç duymadıkça tabii ki.
services, kullanılacak servisleri belirttiğimiz kısım.
postgres, bu servisin adı image'dan yukarıda bahsettim zaten ama, kısaca kullanılacak aplikasyon.
environment, Environment değişkenleri tıpkı PATH gibi.
!!!Port: Bunu belirtmek zorundasınız arkadaşlar, ve kullanacağınız uygulamanın hangi portu kullandığını da bilmek zorundasınız. ":" solundaki port sizin expose, yani kullanılmasını istediğiniz port. Sağdaki ise uygulamanın kendi kullandığı port. Yorum satırına alınmış pgadminde görebileceğiniz üzere, 80i kullanmasına rağmen ben 8080i kullansın diye belirtmişim.

Evet bu kadar, daha sonrasında "docker-compose up" komutu ile çalıştırıp belirttiğimiz porttan bağlanabiliriz.
Not2: Eğer server üzerinde çalışıyor ve docker-compose'un detach şekilde çalışmasını istiyorsanız(yani ctrl+c yaptığında kapanmasın istiyorsanız) -d parametresini ekleyin.
Nf0d7T.png
Gördüğünüz gibi, portlar belirlenmiş, ve database bağlantı için hazır diyor. Hemen lokal hostumuza bağlantı atıyoruz.
WKQQUS.png
gerekli bilgileri dolduruyoruz. Bu arada server postgres olacak, sebebi ise services de postgres olarak belirttiğimiz için. Eğer ismini db yapsaydınız hostname db olacaktı. Bunu da belirterek, kullanıcı adı ve passwordu environment variableı olarak eklemiştik, o değerleri girip login oluyoruz
f9y9H3.png

y7VdRx.png
Ve buda basit bir query, ben db ye bir tablo ve 2 mock data ekledim. Konu postgresql olmadığı için orayı dahil etmiyorum.

Son olarak bunu docker compose olmadan nasıl yapardık diyorsanız,
Kod:
docker run -e ENVIRONMENT VARIABLES -p PORTS --name NAME --detach
şeklinde çalıştırabilirsiniz.

Ekstra:
Yukarıda bahsi geçen Dockerfile'ı nasıl yazarımcılar için
Kod:
FROM gcc:4.9
COPY . /HelloWorld
WORKDIR /HelloWorld
RUN gcc --o HelloWorld main.cpp --lstdc++
CMD ["./HelloWorld"]

FROM ile başlayan şey, kullanılacak tool, copy folder içerisindeki dosyaları izole ettiğimiz docker insanceının içerisine taşımak için kullanıyoruz. Workdir, dockerda uygulamanın çalışacağı klasörü belirtmek için run, komut çalıştırma, CMD ise commandline dan yazdığınız "command"
diye özetleyebilirim.

Umarım açıklayıcı olabilmişimdir, projelerinizde kullanmaya özen gösterin derim ben çünkü gündemde olan bir teknoloji ve bu alanda çalışacaksanız yakın gelecekte her şirketin talep edeceği bir teknoloji.

Saygılarımla.
 
Moderatör tarafında düzenlendi:

kondanta

Katılımcı Üye
29 Tem 2017
910
0
CNCF
Elinize sağlık


Eline sağlık. Docker hakkında güzel bir anlatım olmuş :)

Tesekkur ederim, olabildigince yalin bir sekilde anlatmaya calistim.

Ben mi cahilim yoksa çok mu karmaşık? Hiç bir şey anlamadım vallahi :D Elinize sağlık :)

Aslinda olabildigince yalin bir sekilde anlatmaya calismistim ama, demekki becerememisim :yorgun
 

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Deployment süreçlerinin ve devopsun gülüdür. Severek kullanırız.

Hızlıca development environmentının oluşturulmasını sağlaması da ayrı bir güzelliği.

Solomon Hykes ın ilk sunumunda 5 dakika konuşturup "thankkk youu" diyip göndermişlerdir efendim. Nereden bilecekler bugünün en önemli toolları arasında yer alacağını.

[ame]https://www.youtube.com/watch?v=wW9CAH9nSLs[/ame]
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.