Docker nedir, ne değildir? Gökhan Şengün’ün tüm detaylarıyla anlatılan çok güzel bir blog yazı serisi var. Buradan inceleyebilirsiniz.
Bu
yazıda kendi python uygulamamızı nasıl docker image haline getiririz ve
başka bir makinede kullanmak üzere docker hub’a nasıl yükleriz
sorularının cevaplarını adım adım göreceğiz.
Python Web Sitenizi Oluşturun
Her zamanki gibi python web uygulaması için Flask framework’ünden yararlanacağız.
Dosya oluşturun
İlk önce komut satırından uygulamanız için yeni bir dizin oluşturun, sonra dizine geçin:
mkdir my_test_flaskapp
cd my_test_flaskapp
Ardından iki dosya oluşturun: main.py ve requirements.txt
Python Kodu Ekleyin
En sevdiğiniz düzenleyicide main.py dosyasını açın ve aşağıdaki kodu yapıştırın:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def main():
return "Hello Docker Image Web App!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
Bu, basit bir merhaba dünya mesajı görüntüleyen basit bir web uygulaması oluşturur. Flask ile web uygulaması geliştirme ile ilgili daha detaylı bilgi için resmi sitesini inceleyebilirsiniz.
NOT: app.run (), 0.0.0.0 değerinde host denilen bir argüman alır. Docker ile çalışmak için bu önemlidir. Bu stackoverflow yanıtında bu konuda daha fazla bilgi edinebilirsiniz.
Gereksinimlerinizi ekleyin
requirements.txt dosyasını açın ve aşağıdakileri ekleyin:
Flask
Bu, Flask Kütüphanesini kurmak için pip tarafından kullanılacaktır.
Sitenizi çalıştırın
Son olarak, aşağıdakileri bir komut satırında çalıştırarak sitenizin çalıştığından emin olabilirsiniz:
pip3 install -r requirements.txt
python3 main.py
Web tarayıcınızdan localhost:5000‘e giderseniz, yeni web sitenizi görürsünüz. Şuanda basit bir Flask uygulamasını oluşturmuş oldunuz.
Docker dosyası ekleyin
Uygulamanızı Docker kullanarak dağıtmaya hazır hale getirmenin ilk adımı bir Dockerfile eklemektir.
Python Uygulamanızın kök dizininde Dockerfile adlı bir dosya oluşturun ve aşağıdakileri ekleyin:
FROM python:alpine
LABEL Name=my_test_flaskapp Version=0.0.1
EXPOSE 5000
WORKDIR /app
ADD . /app
# Using pip:
RUN python3 -m pip install -r requirements.txt
CMD ["python3", "/app/main.py"]
Bu
Dockerfile, resmi Python alpine image’ını kullanır. Docker dosyası daha
sonra bir klasör kodu oluşturur ve tüm dosyaları geçerli dizinden docker
image’ına kopyalar. Daha sonra, gereksinimler dosyasındaki tüm
kütüphane bağımlılıklarını yükleyen pip çalıştırır (bu örnekte sadece
Flask). Bağlantı noktasını açar ve sonunda web sitesini başlatan komutu
çalıştırır.
Yukarıdaki Dockerfile, 5000 portunu erişimi açar ve flask uygulamamızı başlatan python /app/main.py komutunu çağırır.
Docker İmajınızı oluşturun
Uygulamanızı dağıtıma hazır hale getirmek için, Dockerfile oluşturmanızdan docker image’ınızı build işlemini gerçekleştirmeniz gerekir. Dockerfile oluşturduğunuz klasördeki komut isteminden aşağıdakini çalıştırın:
docker build -f Dockerfile -t testflaskapp:latest .
Bu build
işlemi, Python alpine image’ı eğer local’de değilse indirir ve
Dockerfile’ınızdaki işlemleri gerçekleştirir (dosya oluşturma / pip
install / vs.) ve yeni docker image’ını testflaskapp olarak etiketler.
Yeni docker image’ını gerçekten çalıştırmak ve test etmek için, yeni oluşturulan image’ı docker kullanarak çalıştırın.
docker run -p 5000:5000 --rm testflaskapp
Aşağıdakine benzer şekilde çıktı almalısınız.
Şimdi localhost: 5000’e gidebilirsiniz ve Flask Uygulamanızın bir docker container içinde çalıştığını görmelisiniz.
Docker Image’ınızı Yayınlayın
Docker Hub‘da yayınlamak için bir hesap oluşturun.
Docker image’ı yayınlamadan önce, “docker images” komutunu çalıştırarak ve testflaskapp container’ının image id’sini bulun:
Daha sonra, mevcut docker image’ı Docker Hub kullanıcı adınız ve image id’niz ile etiketleyin.
Not: Aşağıdaki komutta kendi image id ve docker hub kullanıcı adınız ile değiştirin.
docker tag 4ff3582fc461 yavuzkomecoglu/testflaskapp
Şimdi docker image’ınızı etiketlediğinize göre Docker Hub’da oturum açmanız ve resmi docker hub’a push işlemini gerçekleştirmeniz gerekir:
docker login #follow prompts for login
docker push yavuzkomecoglu/testflaskapp
Ve artık docker image’ı docker hub deponuzda görmelisiniz:
Uzak Depodaki Image’ı Çekip Çalıştırın
Şu andan itibaren “docker run” komutunu kullanabilir ve bu komut ile beraber uygulamanızı istediğiniz makinede çalıştırabilirsiniz:
docker run -p 5000:5000 yavuzkomecoglu/testflaskapp
Eğer image lokalinizdeki makinede mevcut değilse, Docker bunu depodan indirerek çalıştırır.