15 Ocak 2019 Salı

Docker ile Python ve OpenCV uygulaması - Giriş

Docker ile sanal ortamlar oluşturup, uygulamaları bu sanal ortam üzerinde çalıştırıp "benim makinemde çalışıyordu sende neden çalışmadı!" problemini ortadan kaldırabiliriz. Detayları için benim de istifade ettiğim şu linkteki yazıya göz atmanızı tavsiye ederim. 
Bu yazı kapsamında sizlere (python+opencv) uygulamasını, bilgisayarımıza ilgili kütüphanelerin kurulumu ile uğraşmadan nasıl docker üzerinde çalıştırabileceğimizi açıklamaya çalışacağım. Bu basit örnek üzerinden, docker ile ilgili linkini verdiğim yazıdaki bazı noktaları da açıklamış olacağım.


Docker ile ilgili uygulamamıza geçmeden önce, en azından bazı temel terimleri açıklamada fayda var (detaylı bilgi için); Image, içerisinde uygulamaları barındıran hazır paket olarak düşünülebilir. Container ise image üzerinden oluşturulmuş, ve host makine üzerinde çalışan veya çalışmaya hazır hale getirilmiş ortamdır. Bir image üzerinden birden fazla container oluşturulabilir. Bir image oluşturmak için, belirli komutlar ile hazırlanmış Dockerfile dosyaları kullanılır. Hazırlanan Dockerfile isimli dosya build edilerek, Dockerfile 'da tanımlanan özelliklerde image oluşturulmuş olur. Bunun dışında hali hazırda üretilmiş image'ların yayınlandığı Dockerhub üzerinden de ihtiyaç duyacağımız birçok image'a ulaşmak mümkün. Yani spesifik bir ortam hazırlamayacak isek, docker mağazasında ihtiyaç duyacağımız ortamı bulabiliriz ve bir Dockerfile dosyası hazırlayıp build etmemize gerek kalmayabilir.

Bu noktada örnek uygulamamıza geçecek olursak, mini bir araştırma ile python ve opencv kurulumları içeren birçok image'ı dockerhub üzerinde bulabilirsiniz. 

python ve opencv için örnek docker image

Üstteki linke tıklarsanız python ve opencv içeren image detaylarını görüntüleyebilirsiniz. Kullanımı için tek yapmanız gereken docker run -it jjanzic/docker-python3-opencv python komutunu çalıştırmak. -it 'den sonra yazılı olan image dockerhub dan otomatik olarak indirilecek ve bilgisayarınızda kullanıma hazır bir image oluşacaktır. Ve bu image üzerinde python çalıştırılacaktır.


Yazdığımız komut ile belirttiğimiz image üzerinden bir container oluşturup, container üzerinde de python komutunu çalıştırmış olduk. Kullandığımız hazır image'ın Dockerfile ına göz atarsanız, gerçekleştirilen kurulumları vs görebilirsiniz. Bu noktada sadece bu hazır Dockerfile üzerinde küçük bir değişiklik yapıp, bu defa Dockerfile kullanarak bir image oluşturacağız. 

jjanzic tarafında hazırlanmış Dockerfile'ı aldık, sadece sonuna ENTRYPOINT [ "python" ] satırını ekledik. Böylece oluşturacağımız image için bir entrypoint tanımlamış oluyoruz. Dockerfile isimli dosyamızın bulunduğu klasöre gelerek,

docker build -t myopencv .  komutu ile myopencv isimli kendi image'ımızı oluşturuyoruz. Bu işlem biraz zaman alıyor, çünkü hazır ortam indirmeyip kendimiz sıfırdan bir image oluşturuyoruz. Dolayısıyla kütüphane kurulumları biraz zaman alıyor.

Kurulum bittikten sonra "docker images"  komutu ile bilgisayarınızda kurulu olan bütün image'ları listeleyebilirsiniz. Şimdi isterseniz bu yeni oluşturduğumuz image'ı çalıştıralım.

docker run -it myopencv  komutunu yazdığımızda ilk olarak python'un çalıştığını görüyoruz. Yani bu image'dan bir container oluşturup çalıştırıldığında direk python çalışmış oluyor.

Şimdi ise, bir python dosyasını makinemizden oluşturduğumuz bir container içerisine kopyalayalım. İk olarak "docker ps" komutu ile çalışmakta olan container'ları listeleyelim.

myopencv image'ı üzerinden oluşturduğum 1 tane container görülmekte. Bu container'ın içerisine D:/docker/ klasöründeki bir python dosyasını kopyalamak istiyorum, bunun için;

docker cp D:/docker/example.py 685c285cff53:/home/example.py

komutu ile, D:/docker/example.py dosyasını, ilgili container ID'si ile container'daki home/ klasörüne kopyalıyorum. Şimdi ilgili container'a bağlanıp, dosyamız kopyalandı mı kontrol edelim.

Artık ilgili container içerisinde, home/ klasöründe example.py isimli bir dosya mevcut. İçerisine python kodu attığımız bu container'ı, yeni bir image olarak kaydedebiliriz. Böylece oluşan bu image içerisinde home klasöründe bir example.py dosyası yer alacaktır. 

docker commit 685c285cff53 myopencv-2


Oluşturduğumuz myopencv-2 üzerinden çalıştırılmış bir container ile, example.py dosyasını şu şekilde çalıştırabiliriz.

docker exec -it f35bb4221da6 python home/example.py



example.py dosyasının içeriği







Bu yazı kapsamında python ve opencv içeren basit bir uygulamayı docker üzerinde çalıştırmayı öğrendik. Aynı zamanda entrypoint'in ne olduğunu ve üzerinde değişiklik yaptığımız bir container'ı nasıl kaydedeceğimizi de öğrenmiş olduk.

Hiç yorum yok:

Yorum Gönder