Yeni nesil geliştirme ortamı Bölüm 1: Docker

Yeni nesil geliştirme ortamı Bölüm 1: Docker

Yeni nesil geliştirme ortamı adı altında başladığımız, 4.bölümlük yazı dizisinin 1. bölümüne hoş geldiniz.

Bu bölümde Docker, Dockerfile, Docker Container(Konteyner), Docker Image(imaj), nedir ? Docker biz geliştiriciler için ne ifade ediyor ? Neden Docker kullanalım ? Dockerı nasıl kullanırız vb. gibi sorulara cevap arıyacağız.

Docker Nedir ?

Docker çeşitli sanallaştırma ortamları Virtual box ve benzerlerine alternatif uygulama geliştirme ve yayınlama alt yapı aracıdır.

Not: bu makalede Docker ve Docker teknojisinden ziyade. Docker biz geliştiriciler için ne ifade ediyor ? Neden Docker kullanalım ? Dockerı nasıl kullanırız vb. gibi sorulara cevap arıyoruz. Docker ve Docker teknolojisi hakkında detaylı bilgi için Gökhan Şengünün websitesini ziyaret edebilirsiniz.


Dockerfile Nedir ?

Dockerfile geliştirdiğimiz uygulamamızın / yazılımın gerekliklerinin ( örneğin: nginx apache mysql vb.) tanımlandığı dosyadır.


Docker Image Nedir ?

Docker image, Dockerfile da tanımladığımız gerekliliklerin kurulup hazırlanmış görüntüsüdür.


Docker Container Nedir ?

Docker Container, Docker imajlarımızın (image) çalıştırıldığı alandır.


Peki Docker Bunu Nasıl Yapıyor / Nasıl Çalışıyor ?

Docker, Dockerfile da tanımlanan gereklilikleri docker build . komutu ile yeni bir Docker İmajı oluşturup içerisine, Dockerfile da tanımladığımız komutları tek tek çalıştırıp, gerekliliklerin kurulumlarını gerçekleştiriyor. Sistemin çalışır halde olduğunu onayladıktan sonra sistemin yedeğini yani imajını (image) alıp saklıyor. Hazırlanıp saklanan imajları

docker images komutu ile görüntüleyebiliriz.

docker run {çalıştırmak_istediğimiz_imaj_idsi} komut ile de imajını aldığımız sistemleri Docker Konteynerına koyup çalıştırıyor. Hali hazırda çalışan imajları docker ps komutu ile görüntüleyebiliriz. docker ps -a komutu ile daha önce çalıştırılmış fakat şuanda çalışmayan konteynerları görüntüleyebiliriz.


Biz Geliştiriciler İçin Docker Ne Anlam İfade Ediyor ?

Geliştirdiğimiz herhangi bir uygulamayı yayına alırken kendi bilgisayarımızda çalışırken sunucuda çalışmadığına en az 1 kere şahit olmuşuzdur. Docker sayesinde “ benim bilgisayarımda çalışıyordu “ sendromundan kurtuluyoruz. :) Çünkü Docker sunucu ve çalışma ortamınızı eşitliyor. Kulağa hoş geliyor değil mi ?


Docker Kurulumu

Kurulumu Linux üzerinden anlatacağım diğer işletim sistemleri için docker dökümantasyonunda ki kurulum adımlarını takip edebilirsiniz.

Windows - Mac

Docker kurulumu:

# https://docs.docker.com/install/linux/docker-ce/ubuntu/
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
sudo apt-get update
sudo apt-get install docker-ce

Docker Compose kurulumu:

# https://docs.docker.com/compose/install/
sudo curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Herhangi bir izin problemiyle karşılaşmamak için. “docker” kullanıcı grubu oluşturuyoruz ve mevcut kullanıcımızı oluşturduğumuz “docker” kullanıcı grubuna atıyoruz.

# https://docs.docker.com/install/linux/linux-postinstall/
sudo groupadd docker
sudo usermod -aG docker $USER

Basit Bir Örnek Yapalım

Linux kullandığım için Linux komut satırı ( terminal ) üzerinden devam edeceğim.

İlk önce bir klasör oluşturalım ve içerisine girelim.

#docker-example adında klasör oluşturuyoruz.
mkdir docker-example

#docker-example klasörünün içerisine giriyoruz
cd docker-example

#Dockerfile ismiyle dosya oluşturuyoruz.
touch Dockerfile

#www adında klasör oluşturuyoruz.
mkdir www 

#oluşturduğumuz www klasörünün içerisine " index.html" adında bir dosya oluşturuyoruz.
touch www/index.html

# bir üst satırda oluşturduğumuz index.html içerisine ' <h1>Hello World</h1>' satırını ekliyoruz.
echo "<h1>Hello World</h1>" > www/index.html 

Dockerfile oluşturalım. Ve içerisine aşağıdaki komutları yazalım.

# nginx imajını referans alıyoruz.
FROM nginx 

# www klasörümüzü Docker konteyner içerisinde ki /usr/share/nginx/html içerisine kopyalıyoruz.
COPY /www /usr/share/nginx/html

# Docker konteynerımızın içerisindeki 80 portunu dışarıya açıyoruz.
EXPOSE 80

Dockerfile ile görüntü oluşturalım. Daha rahat kullanım için etiketliyelim. Ve görüntünün oluşup oluşmadığını kontrol edelim.

#Oluşturduğumuz Dockerfile ile görüntü(image) alıyoruz / oluşturuyoruz.
docker build -t oguzcandemircan/nginx:1.0 . 

#docker images komutu ile görüntümüzün(image) oluşup oluşmadığını kontrol ediyoruz.
docker images

Aşığıdakine benzer bir çıktı almalısınız. docker images çıktısı

Oluşturduğumuz imajı çalıştırıyoruz.

#Oluşturduğumuz imajı(image) çalıştırıyoruz.
docker run -p 81:80 oguzcandemircan/nginx:1.0 

#curl istek atıyoruz.
curl http://localhost:81 

curl yüklü değilse Herhangi bir tarayıcıdan http://localhost:81 adresine giderek aynı işlemi gerçekleştirebilirsiniz.

Herhangi bir sorun ile karşılaşmadıysanız aşağıda ki çıktıyı almalısınız. docker - curl istek çıktısı


Sonuç

Bu makalede Docker, Dockerfile, Docker Image, Docker Container nedir ? Nasıl çalışır ? Öğrenmiş olduk. Basit bir örnekle öğrendiklerimizi uygulamaya dökerek pekiştirdik. 4 bölümlük “ yeni nesil geliştirme ortamı “ serisinin 1. bölümünü tamamladık. Bir sonraki bölümde Docker Compose ile oluşturduğumuz konteynerları yönetme konusuna değineceğiz.

27 Mart 2019
© 2019 Oğuzcan Demircan All Rights Reserved