{"id":35070,"date":"2025-11-25T13:31:19","date_gmt":"2025-11-25T10:31:19","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/"},"modified":"2025-11-25T13:31:19","modified_gmt":"2025-11-25T10:31:19","slug":"github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/","title":{"rendered":"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7"},"content":{"rendered":"<p><body><\/p>\n<style>\n  \/* Temel stiller *\/\n  body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.7; margin: 0; padding: 25px; background-color: #f8f9fa; color: #343a40; }\n  .container { max-width: 1000px; margin: auto; padding: 20px; background-color: #ffffff; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.08); }\n  h2 { color: #0056b3; margin-top: 35px; margin-bottom: 20px; border-bottom: 2px solid #e9ecef; padding-bottom: 10px; font-size: 2em; }\n  h3 { color: #007bff; margin-top: 25px; margin-bottom: 15px; font-size: 1.6em; }\n  p { margin-bottom: 15px; text-align: justify; }\n  code { background-color: #e9ecef; padding: 3px 6px; border-radius: 4px; font-family: 'Consolas', 'Monaco', monospace; font-size: 0.9em; color: #c7254e; }\n  pre code { display: block; padding: 15px; background-color: #282c34; color: #abb2bf; border-radius: 6px; overflow-x: auto; line-height: 1.5; margin-bottom: 20px; }\n  ul, ol { margin-bottom: 15px; padding-left: 25px; }\n  li { margin-bottom: 8px; }\n  table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }\n  th, td { border: 1px solid #dee2e6; padding: 12px; text-align: left; }\n  th { background-color: #f1f3f5; color: #495057; font-weight: bold; }\n  tr:nth-child(even) { background-color: #f8f9fa; }\n  .expert-tip { background-color: #e7f5ff; border-left: 5px solid #007bff; padding: 15px 20px; margin: 20px 0; border-radius: 5px; font-style: italic; color: #0056b3; }\n  .expert-tip strong { color: #004085; }<\/p>\n<p>  \/* Mobil uyumluluk i\u00e7in media query \u00f6rnekleri *\/\n  @media (max-width: 768px) {\n    body { padding: 15px; }\n    .container { width: 100%; padding: 15px; }\n    h2 { font-size: 1.7em; margin-top: 30px; }\n    h3 { font-size: 1.4em; margin-top: 20px; }\n    p { font-size: 0.95em; }\n    pre code { font-size: 0.85em; padding: 10px; }\n    .expert-tip { padding: 10px 15px; font-size: 0.9em; }<\/p>\n<p>    \/* Tablo responsive'li\u011fi *\/\n    table, thead, tbody, th, td, tr {\n      display: block;\n    }\n    thead tr {\n      position: absolute;\n      top: -9999px;\n      left: -9999px;\n    }\n    tr { border: 1px solid #dee2e6; margin-bottom: 10px; border-radius: 5px; }\n    td {\n      border: none;\n      border-bottom: 1px solid #e9ecef;\n      position: relative;\n      padding-left: 50%;\n      text-align: right;\n    }\n    td:before {\n      position: absolute;\n      top: 12px;\n      left: 12px;\n      width: 45%;\n      padding-right: 10px;\n      white-space: nowrap;\n      content: attr(data-label);\n      font-weight: bold;\n      text-align: left;\n      color: #495057;\n    }\n    td:last-child { border-bottom: none; }\n  }<\/p>\n<p>  @media (max-width: 480px) {\n    h2 { font-size: 1.5em; }\n    h3 { font-size: 1.2em; }\n    body { padding: 10px; }\n  }\n<\/style>\n<div class=\"container\">\n<p>Yapay zeka (YZ) projelerini geli\u015ftirme s\u00fcre\u00e7leri heyecan verici olsa da, bu projeleri tutarl\u0131 ve g\u00fcvenilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir zorluk te\u015fkil eder. Geli\u015ftirme ortam\u0131n\u0131zda sorunsuz \u00e7al\u0131\u015fan bir modelin, \u00fcretim ortam\u0131na al\u0131nd\u0131\u011f\u0131nda beklenmedik hatalar vermesi veya ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131yla kar\u015f\u0131la\u015f\u0131lmas\u0131 olduk\u00e7a yayg\u0131nd\u0131r. Peki, bu karma\u015f\u0131k YZ modellerini farkl\u0131 sunuculara veya bulut ortamlar\u0131na ta\u015f\u0131rken ayn\u0131 performans\u0131 ve istikrar\u0131 nas\u0131l garantileyebiliriz? \u0130\u015fte bu noktada Docker ve onun temel yap\u0131 ta\u015f\u0131 olan Dockerfile, YZ servislerinizi standartla\u015ft\u0131rma, izole etme ve kolayca da\u011f\u0131tma konusunda devreye giriyor. Bu makalede, GitHub \u00fczerinde Dockerfile kullanarak YZ projelerinizi nas\u0131l u\u00e7tan uca y\u00f6netebilece\u011finizi, temelden ileri d\u00fczeye ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. YZ uygulamalar\u0131n\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 basitle\u015ftirerek geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak ve MLOps (Makine \u00d6\u011frenimi Operasyonlar\u0131) prensiplerini benimsemek i\u00e7in gelin bu yolculu\u011fa birlikte \u00e7\u0131kal\u0131m.<\/p>\n<p>Yapay zeka modelleri genellikle karma\u015f\u0131k ba\u011f\u0131ml\u0131l\u0131klara, belirli k\u00fct\u00fcphane versiyonlar\u0131na ve bazen \u00f6zel donan\u0131m gereksinimlerine (GPU gibi) ihtiya\u00e7 duyar. Bir geli\u015ftirici olarak, projenizi yerel makinenizde kusursuz bir \u015fekilde \u00e7al\u0131\u015f\u0131rken bulut ortam\u0131nda veya ba\u015fka bir ekip \u00fcyesinin bilgisayar\u0131nda ayn\u0131 performansla \u00e7al\u0131\u015ft\u0131ramama sorunuyla s\u0131k s\u0131k kar\u015f\u0131la\u015fabilirsiniz. Bu &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; sendromu, YZ projelerinin geli\u015ftirme ve da\u011f\u0131t\u0131m d\u00f6ng\u00fclerini uzatan, maliyetleri art\u0131ran ve i\u015fbirli\u011fini zorla\u015ft\u0131ran \u00f6nemli bir engeldir. <\/p>\n<p> Docker, bu sorunlara kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunar. Konteynerle\u015ftirme teknolojisi sayesinde, YZ uygulaman\u0131z\u0131 t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131, \u00e7al\u0131\u015fma zaman\u0131 ortam\u0131 ve kodunuzla birlikte tek bir ta\u015f\u0131nabilir birim i\u00e7inde paketleyebilirsiniz. Bu birime &#8220;Docker imaj\u0131&#8221; denir. Docker imaj\u0131, bir kere olu\u015fturuldu\u011funda, Docker&#8217;\u0131n y\u00fckl\u00fc oldu\u011fu herhangi bir yerde, ayn\u0131 tutarl\u0131l\u0131kla \u00e7al\u0131\u015ft\u0131r\u0131labilir. Bu, bir YZ modelini yerel makinenizden bir test sunucusuna, oradan da \u00fcretim ortam\u0131na ta\u015f\u0131rken ortam tutars\u0131zl\u0131\u011f\u0131 riskini ortadan kald\u0131r\u0131r. \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli YZ projelerinde, ekibin farkl\u0131 \u00fcyelerinin ayn\u0131 ortamda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak, ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi karma\u015fas\u0131n\u0131 azaltmak ve model versiyonlama s\u00fcre\u00e7lerini basitle\u015ftirmek i\u00e7in Docker vazge\u00e7ilmez bir ara\u00e7 haline gelmi\u015ftir. Bu sayede, geli\u015ftiriciler modelin kendisini iyile\u015ftirmeye odaklanabilirken, operasyon ekipleri da\u011f\u0131t\u0131m\u0131n sorunsuzlu\u011fundan emin olabilirler. Ayr\u0131ca, \u00f6l\u00e7eklenebilirlik a\u00e7\u0131s\u0131ndan da Docker b\u00fcy\u00fck avantajlar sunar; bir modelin daha fazla kullan\u0131c\u0131ya hizmet vermesi gerekti\u011finde, ayn\u0131 Docker imaj\u0131ndan birden \u00e7ok konteyner kolayca ba\u015flat\u0131labilir. Dolay\u0131s\u0131yla, YZ projelerinizin ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc daha \u00f6ng\u00f6r\u00fclebilir, verimli ve \u00f6l\u00e7eklenebilir hale getirmek istiyorsan\u0131z, Docker&#8217;\u0131 benimsemek stratejik bir ad\u0131md\u0131r.<\/p>\n<h2>Temel Kavramlar: Docker, Dockerfile ve Yapay Zeka \u0130li\u015fkisi Nedir?<\/h2>\n<p>Yapay zeka projelerinizi konteynerle\u015ftirmeden \u00f6nce, temel kavramlar\u0131 anlamak kritik \u00f6neme sahiptir. <\/p>\n<p> <strong>Docker nedir?<\/strong> Docker, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 konteyner ad\u0131 verilen hafif, ta\u015f\u0131nabilir ve izole edilmi\u015f ortamlarda paketlemenize ve \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131yan bir platformdur. Sanal makinelerin aksine, Docker konteynerleri i\u015fletim sistemini tam olarak i\u00e7ermez; bunun yerine ana bilgisayar\u0131n \u00e7ekirde\u011fini payla\u015f\u0131r ve bu da onlar\u0131 \u00e7ok daha h\u0131zl\u0131 ve kaynak a\u00e7\u0131s\u0131ndan daha verimli yapar. Her konteyner, kendi izole dosya sistemine, i\u015flem alan\u0131na ve a\u011f arabirimlerine sahip oldu\u011fundan, birbiriyle \u00e7ak\u0131\u015fmadan farkl\u0131 uygulamalar\u0131 ayn\u0131 sunucuda \u00e7al\u0131\u015ft\u0131rabilirsiniz. Bu izolasyon \u00f6zelli\u011fi, YZ projelerinde \u00f6zellikle \u00f6nemlidir, \u00e7\u00fcnk\u00fc farkl\u0131 modellerin farkl\u0131 Python versiyonlar\u0131na veya k\u00fct\u00fcphane s\u00fcr\u00fcmlerine ihtiya\u00e7 duymas\u0131 yayg\u0131nd\u0131r.<\/p>\n<p> <strong>Dockerfile nedir?<\/strong> Dockerfile, bir Docker imaj\u0131 olu\u015fturmak i\u00e7in gerekli t\u00fcm ad\u0131mlar\u0131 i\u00e7eren metin tabanl\u0131 bir betiktir. Bu betik, temel bir i\u015fletim sistemi imaj\u0131ndan ba\u015flayarak, gerekli yaz\u0131l\u0131mlar\u0131n (\u00f6rne\u011fin Python, pip), ba\u011f\u0131ml\u0131l\u0131klar\u0131n (\u00f6rne\u011fin TensorFlow, PyTorch, scikit-learn) y\u00fcklenmesini, uygulama kodunuzun kopyalanmas\u0131n\u0131 ve uygulaman\u0131n nas\u0131l ba\u015flat\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m tan\u0131mlar. Dockerfile, bir tarif defteri gibidir; ona ne istedi\u011finizi s\u00f6ylersiniz (\u00f6rne\u011fin &#8220;Python 3.9 tabanl\u0131 bir Ubuntu&#8221;, &#8220;numpy ve pandas y\u00fckle&#8221;, &#8220;\u015fu kodu kopyala&#8221;), o da size \u00e7al\u0131\u015fan bir Docker imaj\u0131 \u00fcretir. Bu sayede, ayn\u0131 Dockerfile ile her zaman ayn\u0131 imaj\u0131 olu\u015fturabilir, bu da ortam tutarl\u0131l\u0131\u011f\u0131n\u0131 garantiler. <\/p>\n<p> <strong>Yapay Zeka ve Docker \u0130li\u015fkisi:<\/strong> YZ projeleri, \u00f6zellikle makine \u00f6\u011frenimi modelleri, genellikle b\u00fcy\u00fck veri k\u00fcmeleri, karma\u015f\u0131k matematiksel k\u00fct\u00fcphaneler (\u00f6rne\u011fin CUDA, cuDNN), \u00f6zel donan\u0131m h\u0131zland\u0131rmas\u0131 (GPU) ve belirli yaz\u0131l\u0131m \u00e7er\u00e7eveleri (TensorFlow, PyTorch) gerektirir. Bu bile\u015fenlerin kurulumu ve y\u00f6netimi zorlu olabilir. Docker, bu zorluklar\u0131 \u015fu \u015fekilde a\u015far:<\/p>\n<ul>\n<li><strong>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi:<\/strong> Dockerfile, t\u00fcm YZ ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 tek bir yerde tan\u0131mlaman\u0131z\u0131 ve yal\u0131tman\u0131z\u0131 sa\u011flar. Bu, &#8220;pip install&#8221; \u00e7ak\u0131\u015fmalar\u0131n\u0131n veya sistem genelindeki k\u00fct\u00fcphane sorunlar\u0131n\u0131n \u00f6n\u00fcne ge\u00e7er.<\/li>\n<li><strong>Ortam Tutarl\u0131l\u0131\u011f\u0131:<\/strong> Geli\u015ftirmeden teste, testten \u00fcretime kadar t\u00fcm a\u015famalarda ayn\u0131 ortam\u0131n kullan\u0131lmas\u0131n\u0131 garantiler. Bu, modelin farkl\u0131 ortamlarda farkl\u0131 davranma riskini ortadan kald\u0131r\u0131r.<\/li>\n<li><strong>\u00d6l\u00e7eklenebilirlik:<\/strong> E\u011fitilmi\u015f bir YZ modelini bir konteyner i\u00e7inde \u00e7al\u0131\u015ft\u0131rarak, talebe g\u00f6re kolayca birden \u00e7ok konteyneri aya\u011fa kald\u0131rabilir ve y\u00fck\u00fc da\u011f\u0131tabilirsiniz.<\/li>\n<li><strong>Donan\u0131m H\u0131zland\u0131rma:<\/strong> \u00d6zellikle GPU tabanl\u0131 YZ modelleri i\u00e7in Docker, NVIDIA Container Toolkit gibi ara\u00e7larla sorunsuz GPU entegrasyonu sa\u011flar. Dockerfile i\u00e7erisinde \u00f6zel GPU tabanl\u0131 temel imajlar kullan\u0131larak (\u00f6rne\u011fin <code>nvidia\/cuda<\/code>), donan\u0131m h\u0131zland\u0131rman\u0131n avantajlar\u0131ndan kolayca yararlan\u0131labilir.<\/li>\n<li><strong>Versiyonlama:<\/strong> Her Docker imaj\u0131 bir versiyonla etiketlenebilir, bu da modelin farkl\u0131 versiyonlar\u0131n\u0131n izlenmesini ve kolayca geri al\u0131nabilmesini sa\u011flar.<\/li>\n<\/ul>\n<p>\n  K\u0131sacas\u0131, Docker ve Dockerfile, YZ projelerinizi geli\u015ftirme ve da\u011f\u0131tma \u015feklinizi d\u00f6n\u00fc\u015ft\u00fcrerek, MLOps s\u00fcre\u00e7lerinin temelini olu\u015fturur ve geli\u015ftiricilerin daha verimli olmas\u0131na olanak tan\u0131r. Bu ara\u00e7lar sayesinde, YZ uygulamalar\u0131n\u0131z\u0131 herhangi bir ortamda g\u00fcvenle ve tutarl\u0131l\u0131kla \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<h2>Yapay Zeka Uygulamas\u0131 i\u00e7in Temel Bir Dockerfile Nas\u0131l Olu\u015fturulur?<\/h2>\n<p>\u015eimdi, basit bir yapay zeka uygulamas\u0131n\u0131 Dockerize etmek i\u00e7in ad\u0131m ad\u0131m bir Dockerfile nas\u0131l olu\u015fturulur ona bakal\u0131m. Bu \u00f6rnekte, Python tabanl\u0131 k\u00fc\u00e7\u00fck bir metin s\u0131n\u0131fland\u0131rma modeli kullanaca\u011f\u0131m\u0131z\u0131 varsayal\u0131m. Amac\u0131m\u0131z, uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli t\u00fcm ortam\u0131, k\u00fct\u00fcphaneleri ve kodu tek bir Docker imaj\u0131nda paketlemek.<\/p>\n<p>\u00d6ncelikle, projenizin k\u00f6k dizininde a\u015fa\u011f\u0131daki dosyalara sahip oldu\u011funuzu varsayal\u0131m:<\/p>\n<ul>\n<li><code>app.py<\/code>: YZ uygulamas\u0131n\u0131n ana kodu.<\/li>\n<li><code>requirements.txt<\/code>: Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 listeleyen dosya.<\/li>\n<li><code>Dockerfile<\/code>: Olu\u015fturaca\u011f\u0131m\u0131z Dockerfile dosyas\u0131.<\/li>\n<\/ul>\n<p><strong>1. <code>requirements.txt<\/code> Dosyas\u0131:<\/strong><\/p>\n<p>  <code><br \/>\n    scikit-learn==1.0.2<br \/>\n    flask==2.0.2<br \/>\n    gunicorn==20.1.0<br \/>\n  <\/code><\/p>\n<p><strong>2. <code>app.py<\/code> Dosyas\u0131 (Basit bir Flask API):<\/strong><\/p>\n<p>  <code><br \/>\n    from flask import Flask, request, jsonify<br \/>\n    from sklearn.feature_extraction.text import TfidfVectorizer<br \/>\n    from sklearn.svm import SVC<br \/>\n    import joblib<\/p>\n<p>    app = Flask(__name__)<\/p>\n<p>    # Basit bir model e\u011fitimi (ger\u00e7ek uygulamada model \u00f6nceden e\u011fitilmi\u015f olurdu)<br \/>\n    # Bu k\u0131sm\u0131 sadece \u00f6rnek ama\u00e7l\u0131 dahil ettik.<br \/>\n    corpus = [<br \/>\n        \"bu harika bir film\",<br \/>\n        \"\u00e7ok k\u00f6t\u00fc bir deneyimdi\",<br \/>\n        \"yemekler lezzetliydi\",<br \/>\n        \"hizmet berbatt\u0131\"<br \/>\n    ]<br \/>\n    labels = [\"pozitif\", \"negatif\", \"pozitif\", \"negatif\"]<\/p>\n<p>    vectorizer = TfidfVectorizer()<br \/>\n    X = vectorizer.fit_transform(corpus)<br \/>\n    model = SVC(kernel='linear')<br \/>\n    model.fit(X, labels)<\/p>\n<p>    # Modeli ve vekt\u00f6riz\u00f6r\u00fc kaydedelim (ger\u00e7ekte bu d\u0131\u015far\u0131da yap\u0131l\u0131rd\u0131)<br \/>\n    joblib.dump(model, 'model.pkl')<br \/>\n    joblib.dump(vectorizer, 'vectorizer.pkl')<\/p>\n<p>    # Y\u00fckleme (Uygulama ba\u015flad\u0131\u011f\u0131nda y\u00fcklenecek)<br \/>\n    loaded_model = joblib.load('model.pkl')<br \/>\n    loaded_vectorizer = joblib.load('vectorizer.pkl')<\/p>\n<p>    @app.route('\/predict', methods=['POST'])<br \/>\n    def predict():<br \/>\n        data = request.get_json(force=True)<br \/>\n        text = data['text']<br \/>\n        text_vectorized = loaded_vectorizer.transform([text])<br \/>\n        prediction = loaded_model.predict(text_vectorized)[0]<br \/>\n        return jsonify({'prediction': prediction})<\/p>\n<p>    if __name__ == '__main__':<br \/>\n        app.run(host='0.0.0.0', port=5000)<br \/>\n  <\/code><\/p>\n<p><strong>3. <code>Dockerfile<\/code> Olu\u015fturma:<\/strong><br \/> \u015eimdi bu uygulaman\u0131n nas\u0131l paketlenece\u011fini tan\u0131mlayal\u0131m. \u0130\u015fte temel bir Dockerfile:<\/p>\n<pre><code>\n# Python'\u0131n hafif bir versiyonunu temel imaj olarak kullan\u0131yoruz.\n# -slim-buster etiketi, daha k\u00fc\u00e7\u00fck bir imaj boyutu i\u00e7in gerekli olmayan bile\u015fenleri \u00e7\u0131kar\u0131r.\nFROM python:3.9-slim-buster\n\n# Konteyner i\u00e7inde \u00e7al\u0131\u015fma dizinini belirliyoruz. T\u00fcm i\u015flemler bu dizin alt\u0131nda yap\u0131lacak.\nWORKDIR \/app\n\n# requirements.txt dosyas\u0131n\u0131 ana bilgisayardan \/app dizinine kopyal\u0131yoruz.\n# Bu ad\u0131m, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemeden \u00f6nce gereklidir.\nCOPY requirements.txt .\n\n# requirements.txt i\u00e7inde belirtilen Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fckl\u00fcyoruz.\n# --no-cache-dir, pip'in indirme \u00f6nbelle\u011fini temizleyerek imaj boyutunu azalt\u0131r.\nRUN pip install --no-cache-dir -r requirements.txt\n\n# model.pkl ve vectorizer.pkl dosyalar\u0131n\u0131 ana bilgisayardan \/app dizinine kopyal\u0131yoruz.\n# Bu, e\u011fitilmi\u015f modelimizin konteyner i\u00e7inde eri\u015filebilir olmas\u0131n\u0131 sa\u011flar.\nCOPY model.pkl .\nCOPY vectorizer.pkl .\n\n# app.py ve di\u011fer t\u00fcm uygulama dosyalar\u0131n\u0131 ana bilgisayardan \/app dizinine kopyal\u0131yoruz.\n# . . ifadesi, mevcut dizindeki her \u015feyi \u00e7al\u0131\u015fma dizinine kopyalar.\nCOPY . .\n\n# Flask uygulamas\u0131n\u0131n 5000 numaral\u0131 port \u00fczerinden d\u0131\u015f d\u00fcnyaya hizmet verece\u011fini belirtiyoruz.\n# Bu, Docker'a sadece bir ipucudur, portun d\u0131\u015far\u0131ya a\u00e7\u0131lmas\u0131 i\u00e7in -p parametresi kullan\u0131lmal\u0131d\u0131r.\nEXPOSE 5000\n\n# Konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lacak varsay\u0131lan komutu belirliyoruz.\n# Gunicorn, \u00fcretim ortamlar\u0131 i\u00e7in \u00f6nerilen bir WSGI sunucusudur.\nCMD [\"gunicorn\", \"--bind\", \"0.0.0.0:5000\", \"app:app\"]\n  <\/pre>\n<p><\/code><\/p>\n<p><strong>Dockerfile A\u00e7\u0131klamas\u0131:<\/strong><\/p>\n<ul>\n<li><strong><code>FROM python:3.9-slim-buster<\/code>:<\/strong> Bu sat\u0131r, Dockerfile'\u0131n temel imaj\u0131n\u0131 tan\u0131mlar. Python 3.9'un Debian tabanl\u0131, daha hafif bir s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131yoruz. Bu, imaj boyutunu optimize etmek i\u00e7in \u00f6nemlidir.<\/li>\n<li><strong><code>WORKDIR \/app<\/code>:<\/strong> Konteyner i\u00e7inde t\u00fcm komutlar\u0131n \u00e7al\u0131\u015faca\u011f\u0131 dizini <code>\/app<\/code> olarak ayarlar. Bu, dosya yollar\u0131n\u0131 y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong><code>COPY requirements.txt .<\/code>:<\/strong> Proje dizinimizdeki <code>requirements.txt<\/code> dosyas\u0131n\u0131 konteynerin <code>\/app<\/code> dizinine kopyalar. Bu, ba\u011f\u0131ml\u0131l\u0131klar\u0131n do\u011fru bir \u015fekilde y\u00fcklenmesi i\u00e7in kritiktir.<\/li>\n<li><strong><code>RUN pip install --no-cache-dir -r requirements.txt<\/code>:<\/strong> <code>requirements.txt<\/code> dosyas\u0131nda listelenen t\u00fcm Python paketlerini y\u00fckler. <code>--no-cache-dir<\/code> parametresi, ara \u00f6nbellek dosyalar\u0131n\u0131 temizleyerek nihai imaj\u0131n boyutunu k\u00fc\u00e7\u00fcltmeye yard\u0131mc\u0131 olur.<\/li>\n<li><strong><code>COPY model.pkl .<\/code> ve <code>COPY vectorizer.pkl .<\/code>:<\/strong> E\u011fer \u00f6nceden e\u011fitilmi\u015f bir model ve vekt\u00f6riz\u00f6r\u00fcn\u00fcz varsa, bunlar\u0131 da konteynere kopyalamal\u0131s\u0131n\u0131z.<\/li>\n<li><strong><code>COPY . .<\/code>:<\/strong> Geri kalan t\u00fcm proje dosyalar\u0131n\u0131 (\u00f6rne\u011fin <code>app.py<\/code>) mevcut \u00e7al\u0131\u015fma dizininden konteynerin <code>\/app<\/code> dizinine kopyalar.<\/li>\n<li><strong><code>EXPOSE 5000<\/code>:<\/strong> Konteynerin 5000 numaral\u0131 porttan d\u0131\u015far\u0131ya hizmet verece\u011fini belirtir. Bu sadece bir belgedir; ger\u00e7ek port y\u00f6nlendirmesi <code>docker run -p 5000:5000<\/code> gibi bir komutla yap\u0131l\u0131r.<\/li>\n<li><strong><code>CMD [\"gunicorn\", \"--bind\", \"0.0.0.0:5000\", \"app:app\"]<\/code>:<\/strong> Konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lacak varsay\u0131lan komuttur. Bu \u00f6rnekte, <code>gunicorn<\/code> adl\u0131 bir \u00fcretim s\u0131n\u0131f\u0131 WSGI sunucusunu kullanarak Flask uygulamas\u0131n\u0131 5000 numaral\u0131 portta ba\u015flat\u0131yoruz. <code>app:app<\/code> ifadesi, <code>app.py<\/code> dosyas\u0131ndaki <code>app<\/code> de\u011fi\u015fkenini (Flask uygulamas\u0131n\u0131) referans al\u0131r.<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n    <strong>Uzman \u0130pucu:<\/strong> Dockerfile'\u0131n\u0131zdaki <code>COPY<\/code> komutlar\u0131n\u0131 daha katmanl\u0131 hale getirerek ve <code>requirements.txt<\/code> y\u00fcklemesini ayr\u0131 bir katmanda tutarak Docker'\u0131n katmanlama \u00f6nbelle\u011finden daha iyi yararlanabilirsiniz. Ba\u011f\u0131ml\u0131l\u0131klar s\u0131k de\u011fi\u015fmiyorsa, bu ad\u0131mlar imaj olu\u015fturma s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r.\n  <\/div>\n<p>Bu Dockerfile ile, yapay zeka uygulaman\u0131z\u0131 tutarl\u0131 ve ta\u015f\u0131nabilir bir konteyner imaj\u0131na d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in sa\u011flam bir temele sahip olursunuz.<\/p>\n<h2>GitHub ve Dockerfile Entegrasyonu: CI\/CD S\u00fcre\u00e7leri \u0130\u00e7in Ad\u0131mlar<\/h2>\n<p>Yapay zeka projelerimizi Dockerfile ile konteynerle\u015ftirdikten sonra, bu s\u00fcre\u00e7leri otomatikle\u015ftirmek ve s\u00fcrd\u00fcr\u00fclebilir hale getirmek i\u00e7in GitHub'\u0131n g\u00fcc\u00fcnden yararlanmak olduk\u00e7a \u00f6nemlidir. GitHub, sadece kod depolama platformu olman\u0131n \u00f6tesinde, GitHub Actions ile CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Teslimat) i\u015f ak\u0131\u015flar\u0131 olu\u015fturarak projelerinizin otomatik olarak derlenmesini, test edilmesini ve da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flayabilir. Bu, YZ projeleri i\u00e7in \u00f6zellikle de\u011ferli \u00e7\u00fcnk\u00fc model g\u00fcncellemeleri veya ba\u011f\u0131ml\u0131l\u0131k de\u011fi\u015fiklikleri oldu\u011funda h\u0131zl\u0131 ve hatas\u0131z bir \u015fekilde yeni versiyonlar\u0131 da\u011f\u0131tabilmenizi sa\u011flar.<\/p>\n<p>  <strong>GitHub \u00dczerinde Dockerfile Depolama:<\/strong><br \/>\n  \u0130lk ad\u0131m, olu\u015fturdu\u011funuz Dockerfile'\u0131 ve di\u011fer t\u00fcm uygulama kodunu GitHub deponuza y\u00fcklemektir. Dockerfile genellikle projenin k\u00f6k dizininde bulunur. Bu sayede, her kod de\u011fi\u015fikli\u011finde, Dockerfile da versiyon kontrol\u00fc alt\u0131nda olur ve projenin o anki haliyle hangi imaj\u0131n nas\u0131l olu\u015fturuldu\u011fu her zaman takip edilebilir.<\/p>\n<p>  <strong>GitHub Actions ile Otomatik Docker \u0130maj\u0131 Olu\u015fturma ve Da\u011f\u0131tma:<\/strong><br \/>\n  \u015eimdi en heyecan verici k\u0131sma ge\u00e7elim: GitHub Actions kullanarak her kod g\u00f6nderme (push) i\u015fleminde otomatik olarak Docker imaj\u0131n\u0131z\u0131 derleyip bir konteyner kay\u0131t defterine (\u00f6rne\u011fin Docker Hub veya GitHub Container Registry) nas\u0131l g\u00f6nderebilece\u011finizi g\u00f6relim. <\/p>\n<p>  Bu i\u015flem i\u00e7in, GitHub deponuzun <code>.github\/workflows\/<\/code> dizini alt\u0131na bir YAML dosyas\u0131 (\u00f6rne\u011fin <code>docker-ci.yml<\/code>) olu\u015fturman\u0131z gerekir:<\/p>\n<pre><code>\n# \u0130\u015f ak\u0131\u015f\u0131n\u0131n ad\u0131\nname: Docker YZ Servis CI\n\n# \u0130\u015f ak\u0131\u015f\u0131n\u0131n ne zaman tetiklenece\u011fini tan\u0131mlar\non:\n  push:\n    # Sadece 'main' dal\u0131na yap\u0131lan push i\u015flemlerinde \u00e7al\u0131\u015f\u0131r\n    branches: [ \"main\" ]\n  pull_request:\n    # 'main' dal\u0131na yap\u0131lan pull request'lerde de \u00e7al\u0131\u015f\u0131r (iste\u011fe ba\u011fl\u0131)\n    branches: [ \"main\" ]\n\n# \u00c7al\u0131\u015ft\u0131r\u0131lacak i\u015fler (jobs)\njobs:\n  build_and_push_image:\n    # \u0130\u015fin \u00e7al\u0131\u015faca\u011f\u0131 ortam\n    runs-on: ubuntu-latest\n\n    # \u0130\u015fin ad\u0131mlar\u0131\n    steps:\n    - name: Depoyu \u00c7\u0131kart (Checkout Repository)\n      uses: actions\/checkout@v4 # Depoyu runner'a kopyalar\n\n    - name: Docker Hub'a Giri\u015f Yap (Log in to Docker Hub)\n      uses: docker\/login-action@v3\n      with:\n        username: ${{ secrets.DOCKER_USERNAME }} # GitHub Secrets'tan Docker Hub kullan\u0131c\u0131 ad\u0131\n        password: ${{ secrets.DOCKER_TOKEN }} # GitHub Secrets'tan Docker Hub eri\u015fim token\u0131\n\n    - name: Docker \u0130maj\u0131n\u0131 Olu\u015ftur ve G\u00f6nder (Build and Push Docker Image)\n      uses: docker\/build-push-action@v5\n      with:\n        context: . # Dockerfile'\u0131n bulundu\u011fu dizin (mevcut dizin)\n        push: true # \u0130maj\u0131 kay\u0131t defterine g\u00f6nderme\n        tags: | # Olu\u015fturulacak imaj\u0131n etiketleri\n          ${{ secrets.DOCKER_USERNAME }}\/my-ai-app:latest\n          ${{ secrets.DOCKER_USERNAME }}\/my-ai-app:${{ github.sha }} # Commit SHA ile versiyonlama\n        cache-from: type=gha # GitHub Actions \u00f6nbelle\u011fini kullan\u0131r\n        cache-to: type=gha,mode=max # GitHub Actions \u00f6nbelle\u011fine kaydeder\n  <\/pre>\n<p><\/code><\/p>\n<p><strong>Bu GitHub Actions \u0130\u015f Ak\u0131\u015f\u0131n\u0131n A\u00e7\u0131klamas\u0131:<\/strong><\/p>\n<ul>\n<li><strong><code>name: Docker YZ Servis CI<\/code>:<\/strong> \u0130\u015f ak\u0131\u015f\u0131na anla\u015f\u0131l\u0131r bir isim verir.<\/li>\n<li><strong><code>on: push: branches: [\"main\"]<\/code>:<\/strong> Bu i\u015f ak\u0131\u015f\u0131n\u0131n, deponuzun <code>main<\/code> dal\u0131na yeni bir kod g\u00f6nderildi\u011finde otomatik olarak tetiklenmesini sa\u011flar. Bu, her yeni de\u011fi\u015fiklikte YZ servisinizin yeni bir imaj\u0131n\u0131n olu\u015fturulaca\u011f\u0131 anlam\u0131na gelir.<\/li>\n<li><strong><code>jobs: build_and_push_image:<\/code>:<\/strong> \u0130\u015f ak\u0131\u015f\u0131n\u0131n ana bile\u015feni olan bir \"i\u015f\" tan\u0131mlar.<\/li>\n<li><strong><code>runs-on: ubuntu-latest<\/code>:<\/strong> Bu i\u015fin Ubuntu i\u015fletim sistemine sahip bir GitHub Actions \u00e7al\u0131\u015ft\u0131r\u0131c\u0131s\u0131 \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir.<\/li>\n<li><strong><code>steps:<\/code>:<\/strong> \u0130\u015fin i\u00e7inde ger\u00e7ekle\u015ftirilecek ad\u0131mlar\u0131 s\u0131ralar.\n<ul>\n<li><strong><code>uses: actions\/checkout@v4<\/code>:<\/strong> \u0130lk ad\u0131m olarak, projenizin kodunu \u00e7al\u0131\u015fan ortama kopyalar.<\/li>\n<li><strong><code>uses: docker\/login-action@v3<\/code>:<\/strong> Docker Hub'a veya ba\u015fka bir konteyner kay\u0131t defterine giri\u015f yapmay\u0131 sa\u011flar. Kullan\u0131c\u0131 ad\u0131 ve parola bilgileri <strong>GitHub Secrets<\/strong> \u00fczerinden g\u00fcvenli bir \u015fekilde al\u0131nmal\u0131d\u0131r (<code>DOCKER_USERNAME<\/code> ve <code>DOCKER_TOKEN<\/code> ad\u0131nda gizli de\u011fi\u015fkenler olu\u015fturman\u0131z gerekir). Bu, hassas bilgilerin kodunuzda g\u00f6r\u00fcnmesini engeller.<\/li>\n<li><strong><code>uses: docker\/build-push-action@v5<\/code>:<\/strong> Docker imaj\u0131n\u0131 olu\u015fturan (<code>build<\/code>) ve belirtilen kay\u0131t defterine g\u00f6nderen (<code>push<\/code>) temel aksiyondur.\n<ul>\n<li><code>context: .<\/code>: Dockerfile'\u0131n mevcut dizinde oldu\u011funu belirtir.<\/li>\n<li><code>push: true<\/code>: \u0130maj\u0131 kay\u0131t defterine g\u00f6nderme i\u015flemini etkinle\u015ftirir.<\/li>\n<li><code>tags:<\/code>: Olu\u015fturulan imaja birden fazla etiket (tag) ataman\u0131z\u0131 sa\u011flar. Burada hem <code>latest<\/code> etiketi hem de ilgili commit'in SHA de\u011feri ile versiyonlanm\u0131\u015f bir etiket kullan\u0131yoruz. Bu, ge\u00e7mi\u015fe d\u00f6n\u00fck versiyonlar\u0131 takip etmek i\u00e7in harikad\u0131r.<\/li>\n<li><code>cache-from: type=gha<\/code> ve <code>cache-to: type=gha,mode=max<\/code>: GitHub Actions \u00f6nbelle\u011fini kullanarak Docker katmanlar\u0131n\u0131 \u00f6nbelle\u011fe almay\u0131 sa\u011flar. Bu, tekrarlayan derleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n    <strong>Uzman \u0130pucu:<\/strong> GitHub Secrets'\u0131 kullanmak, API anahtarlar\u0131, parolalar ve tokenlar gibi hassas bilgileri g\u00fcvenli bir \u015fekilde saklaman\u0131n en iyi yoludur. Deponuzda Ayarlar > Secrets > Actions yolunu izleyerek bu de\u011fi\u015fkenleri tan\u0131mlayabilirsiniz.\n  <\/div>\n<p>Bu entegrasyon sayesinde, YZ projenizde her kod de\u011fi\u015fikli\u011fi yapt\u0131\u011f\u0131n\u0131zda ve bunu GitHub'a g\u00f6nderdi\u011finizde, yeni bir Docker imaj\u0131 otomatik olarak olu\u015fturulacak ve se\u00e7ti\u011finiz kay\u0131t defterine y\u00fcklenecektir. Bu, MLOps d\u00fcnyas\u0131nda \"S\u00fcrekli Entegrasyon\" (CI) ad\u0131m\u0131d\u0131r ve YZ servislerinizin her zaman g\u00fcncel, test edilebilir ve da\u011f\u0131t\u0131ma haz\u0131r olmas\u0131n\u0131 sa\u011flar. Daha sonra, bu imajlar\u0131 \u00fcretim ortam\u0131na otomatik olarak da\u011f\u0131tmak i\u00e7in \"S\u00fcrekli Teslimat\/Da\u011f\u0131t\u0131m\" (CD) ad\u0131mlar\u0131na ge\u00e7ilebilir.<\/p>\n<h2>Yapay Zeka Servisleri \u0130\u00e7in \u0130leri D\u00fczey Dockerfile Optimizasyonlar\u0131 ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>Basit bir Dockerfile ile YZ uygulaman\u0131z\u0131 konteynerle\u015ftirmeyi \u00f6\u011frendik. Ancak, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k YZ modelleriyle \u00e7al\u0131\u015f\u0131rken, performans, g\u00fcvenlik ve kaynak verimlili\u011fi a\u00e7\u0131s\u0131ndan Dockerfile'\u0131n\u0131z\u0131 optimize etmek kritik hale gelir. \u0130\u015fte YZ servisleriniz i\u00e7in ileri d\u00fczey Dockerfile ipu\u00e7lar\u0131 ve en iyi uygulamalar:<\/p>\n<p>  <strong>1. \u00c7ok A\u015famal\u0131 Yap\u0131lar (Multi-stage Builds) Kullan\u0131n:<\/strong><br \/>\n  YZ modellerinin e\u011fitimi s\u0131ras\u0131nda genellikle derleyiciler, test ara\u00e7lar\u0131 veya b\u00fcy\u00fck geli\u015ftirme k\u00fct\u00fcphaneleri gibi sadece derleme a\u015famas\u0131nda gerekli olan bir\u00e7ok araca ihtiya\u00e7 duyulur. Bu ara\u00e7lar\u0131n hepsi nihai \u00fcretim imaj\u0131nda yer al\u0131rsa, imaj boyutu gereksiz yere \u015fi\u015fer. \u00c7ok a\u015famal\u0131 yap\u0131lar, farkl\u0131 a\u015famalar tan\u0131mlayarak bu sorunu \u00e7\u00f6zer. \u0130lk a\u015famada (build stage) t\u00fcm derleme ve test i\u015flemleri yap\u0131l\u0131r, ikinci a\u015famada (runtime stage) ise sadece uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli olan minimum bile\u015fenler kopyalan\u0131r.<\/p>\n<pre><code>\n# A\u015eAMA 1: Derleme A\u015famas\u0131\nFROM python:3.9-slim-buster AS builder\n\nWORKDIR \/app\n\n# Ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckle\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\n# Model e\u011fitim kodunu veya testlerini \u00e7al\u0131\u015ft\u0131r (iste\u011fe ba\u011fl\u0131)\n# RUN python train_model.py\n\n# E\u011fitilmi\u015f modeli kaydet\n# COPY . . # Di\u011fer dosyalar\u0131 da kopyalayabiliriz\n# RUN python build_assets.py # Modeli veya varl\u0131klar\u0131 olu\u015fturur\n\n# A\u015eAMA 2: \u00c7al\u0131\u015fma Zaman\u0131 A\u015famas\u0131\n# Daha minimal bir temel imaj kullanabiliriz\nFROM python:3.9-slim-buster\n\nWORKDIR \/app\n\n# Sadece \u00fcretimde gerekli olan ba\u011f\u0131ml\u0131l\u0131klar\u0131 kopyala\n# E\u011fer \u00fcretim i\u00e7in farkl\u0131 bir requirements.txt varsa\nCOPY --from=builder \/app\/requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\n# Model ve uygulama kodunu derleme a\u015famas\u0131ndan kopyala\nCOPY --from=builder \/app\/model.pkl .\nCOPY --from=builder \/app\/vectorizer.pkl .\nCOPY --from=builder \/app\/app.py .\n\nEXPOSE 5000\nCMD [\"gunicorn\", \"--bind\", \"0.0.0.0:5000\", \"app:app\"]\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu yakla\u015f\u0131m, nihai imaj\u0131n boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r, g\u00fcvenlik risklerini d\u00fc\u015f\u00fcr\u00fcr ve da\u011f\u0131t\u0131m\u0131 h\u0131zland\u0131r\u0131r.<\/p>\n<div class=\"expert-tip\">\n    <strong>Uzman \u0130pucu:<\/strong> B\u00fcy\u00fck modelleriniz varsa, modeli Dockerfile'a dahil etmek yerine, onu bir nesne depolama hizmetinden (AWS S3, Google Cloud Storage) \u00e7al\u0131\u015fma zaman\u0131nda indirmeyi d\u00fc\u015f\u00fcnebilirsiniz. Bu, imaj boyutunu daha da k\u00fc\u00e7\u00fclt\u00fcr ve model versiyonlamay\u0131 imajdan ba\u011f\u0131ms\u0131z hale getirir.\n  <\/div>\n<p><strong>2. GPU Deste\u011fi Entegrasyonu:<\/strong><br \/>\n  Derin \u00f6\u011frenme modelleri genellikle GPU h\u0131zland\u0131rmas\u0131ndan faydalan\u0131r. Docker konteynerlerinin GPU'lara eri\u015febilmesi i\u00e7in NVIDIA Container Toolkit (\u00f6nceden nvidia-docker olarak biliniyordu) kullanman\u0131z gerekir. Dockerfile'\u0131n\u0131zda, CUDA ve cuDNN gibi NVIDIA k\u00fct\u00fcphanelerini i\u00e7eren \u00f6zel NVIDIA temel imajlar\u0131n\u0131 kullanman\u0131z \u00f6nemlidir.<\/p>\n<pre><code>\n# NVIDIA CUDA ve cuDNN deste\u011fi olan bir temel imaj kullan\u0131n\nFROM nvidia\/cuda:11.8.0-cudnn8-runtime-ubuntu22.04\n\n# Python'\u0131 ve pip'i bu imaj \u00fczerine kurun\nRUN apt-get update && apt-get install -y python3 python3-pip && rm -rf \/var\/lib\/apt\/lists\/*\n\nWORKDIR \/app\nCOPY requirements.txt .\n\n# GPU destekli TensorFlow veya PyTorch gibi k\u00fct\u00fcphaneleri y\u00fckleyin\nRUN pip install --no-cache-dir -r requirements.txt\n\nCOPY . .\n\nEXPOSE 5000\nCMD [\"python3\", \"app_gpu.py\"]\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu imaj\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rken <code>docker run --gpus all ...<\/code> komutunu kullanarak konteynerin GPU'lara eri\u015fmesini sa\u011flamal\u0131s\u0131n\u0131z. Unutmay\u0131n ki ana bilgisayar\u0131n\u0131zda NVIDIA s\u00fcr\u00fcc\u00fclerinin ve Docker'\u0131n NVIDIA Container Toolkit eklentisinin do\u011fru \u015fekilde kurulmu\u015f olmas\u0131 gerekmektedir.<\/p>\n<p><strong>3. G\u00fcvenlik En \u0130yi Uygulamalar\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Ayr\u0131cal\u0131kl\u0131 Olmayan Kullan\u0131c\u0131 Kullan\u0131m\u0131:<\/strong> Konteynerleri varsay\u0131lan olarak root kullan\u0131c\u0131s\u0131yla \u00e7al\u0131\u015ft\u0131rmak g\u00fcvenlik riski ta\u015f\u0131r. Dockerfile i\u00e7inde \u00f6zel bir kullan\u0131c\u0131 olu\u015fturup uygulamay\u0131 bu kullan\u0131c\u0131yla \u00e7al\u0131\u015ft\u0131rmak iyi bir uygulamad\u0131r:\n<pre><code>\n# ... (\u00f6nceki ad\u0131mlar)\nRUN adduser --disabled-password --gecos \"\" appuser\nUSER appuser\n# ... (sonraki ad\u0131mlar)\n      <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>En Az Ayr\u0131cal\u0131k Prensibi:<\/strong> Sadece uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli olan paketleri ve izinleri ekleyin. Gereksiz ba\u011f\u0131ml\u0131l\u0131klar ve ara\u00e7lar g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir.<\/li>\n<li><strong><code>.dockerignore<\/code> Dosyas\u0131:<\/strong> Gereksiz dosyalar\u0131 (\u00f6rne\u011fin <code>.git<\/code> dizini, <code>.env<\/code> dosyalar\u0131, b\u00fcy\u00fck veri k\u00fcmeleri) Docker imaj\u0131n\u0131za kopyalamamak i\u00e7in bir <code>.dockerignore<\/code> dosyas\u0131 kullan\u0131n. Bu, imaj boyutunu k\u00fc\u00e7\u00fclt\u00fcr ve hassas bilgilerin yanl\u0131\u015fl\u0131kla imaja dahil edilmesini engeller.<\/li>\n<\/ul>\n<p><strong>4. Ortam De\u011fi\u015fkenleri ile Yap\u0131land\u0131rma:<\/strong><br \/>\n  YZ modellerinin hiperparametreleri, API anahtarlar\u0131 veya veritaban\u0131 ba\u011flant\u0131 dizeleri gibi yap\u0131land\u0131rma parametrelerini do\u011frudan Dockerfile'a g\u00f6mmek yerine ortam de\u011fi\u015fkenleri olarak tan\u0131mlamak daha esnektir. Bu, ayn\u0131 imaj\u0131 farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in farkl\u0131 konfig\u00fcrasyonlarla \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r.<\/p>\n<pre><code>\nFROM python:3.9-slim-buster\nWORKDIR \/app\n# ... di\u011fer ad\u0131mlar\nENV MODEL_VERSION=v1.0\nENV DB_HOST=localhost\nCMD [\"python\", \"app.py\"]\n  <\/pre>\n<p><\/code><\/p>\n<p>Daha sonra konteyneri \u00e7al\u0131\u015ft\u0131r\u0131rken <code>docker run -e MODEL_VERSION=v2.0 ...<\/code> \u015feklinde bu de\u011fi\u015fkenleri ge\u00e7ersiz k\u0131labilirsiniz.<\/p>\n<p><strong>Dockerfile Optimizasyonlar\u0131 Tablosu:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Optimizasyon Tekni\u011fi<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<th>Faydalar\u0131<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-label=\"Optimizasyon Tekni\u011fi\">\u00c7ok A\u015famal\u0131 Yap\u0131lar<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Derleme ve \u00e7al\u0131\u015fma zaman\u0131 ortamlar\u0131n\u0131 ay\u0131rarak, yaln\u0131zca nihai uygulaman\u0131n ihtiya\u00e7 duydu\u011fu bile\u015fenleri i\u00e7eren daha k\u00fc\u00e7\u00fck bir son imaj olu\u015fturma.<\/td>\n<td data-label=\"Faydalar\u0131\">\u0130maj boyutunu k\u00fc\u00e7\u00fclt\u00fcr, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azalt\u0131r, da\u011f\u0131t\u0131m s\u00fcresini h\u0131zland\u0131r\u0131r.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Optimizasyon Tekni\u011fi\"><code>.dockerignore<\/code> Kullan\u0131m\u0131<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Dockerfile ba\u011flam\u0131na gereksiz dosyalar\u0131n (\u00f6rn. <code>.git<\/code>, <code>__pycache__<\/code>, <code>venv<\/code>, veri dosyalar\u0131) eklenmesini engelleme.<\/td>\n<td data-label=\"Faydalar\u0131\">\u0130maj boyutunu k\u00fc\u00e7\u00fclt\u00fcr, derleme h\u0131z\u0131n\u0131 art\u0131r\u0131r, hassas verilerin s\u0131zmas\u0131n\u0131 \u00f6nler.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Optimizasyon Tekni\u011fi\">Katman \u00d6nbellekleme<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Dockerfile komutlar\u0131n\u0131n s\u0131ras\u0131n\u0131 optimize etme (s\u0131k de\u011fi\u015fmeyenleri ba\u015fa alma) ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 ayr\u0131 bir katmanda tutma.<\/td>\n<td data-label=\"Faydalar\u0131\">Tekrarlayan derleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Optimizasyon Tekni\u011fi\">En Az Ayr\u0131cal\u0131kl\u0131 Kullan\u0131c\u0131<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Konteyneri root olmayan bir kullan\u0131c\u0131 ile \u00e7al\u0131\u015ft\u0131rma.<\/td>\n<td data-label=\"Faydalar\u0131\">Konteynerin g\u00fcvenli\u011fini art\u0131r\u0131r, olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n etkisini s\u0131n\u0131rlar.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Optimizasyon Tekni\u011fi\">Ortam De\u011fi\u015fkenleri<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Uygulama yap\u0131land\u0131rmalar\u0131n\u0131 (portlar, anahtarlar vb.) ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netme.<\/td>\n<td data-label=\"Faydalar\u0131\">Daha esnek ve yeniden kullan\u0131labilir imajlar sa\u011flar, hassas bilgileri Dockerfile'dan ay\u0131r\u0131r.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bu ileri d\u00fczey optimizasyonlar\u0131 uygulayarak, YZ servisleriniz i\u00e7in daha verimli, g\u00fcvenli ve performansl\u0131 Docker imajlar\u0131 olu\u015fturabilirsiniz. Unutmay\u0131n, iyi bir Dockerfile, YZ projenizin ba\u015far\u0131l\u0131 bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131n\u0131n anahtarlar\u0131ndan biridir.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryosu: Bir NLP Modelini Docker ile Da\u011f\u0131tma<\/h2>\n<p>\u015eimdi \u00f6\u011frendiklerimizi somut bir ger\u00e7ek d\u00fcnya senaryosunda uygulayal\u0131m: Hugging Face k\u00fct\u00fcphanesini kullanarak \u00f6nceden e\u011fitilmi\u015f bir Do\u011fal Dil \u0130\u015fleme (NLP) modelini Docker ile nas\u0131l da\u011f\u0131taca\u011f\u0131m\u0131z\u0131 inceleyelim. Bu t\u00fcr modeller genellikle b\u00fcy\u00fck boyutludur ve spesifik Python k\u00fct\u00fcphaneleri (<code>transformers<\/code>, <code>torch<\/code> veya <code>tensorflow<\/code>) gerektirir. Modelin indirilmesi ve y\u00fcklenmesi de dikkate al\u0131nmas\u0131 gereken bir fakt\u00f6rd\u00fcr.<\/p>\n<p>  Bu senaryoda, bir metin s\u0131n\u0131fland\u0131rma g\u00f6revini yerine getiren bir BERT modeli kullanaca\u011f\u0131z. Uygulamam\u0131z, kullan\u0131c\u0131dan gelen bir metni al\u0131p model arac\u0131l\u0131\u011f\u0131yla analiz edecek ve bir s\u0131n\u0131fland\u0131rma sonucu d\u00f6nd\u00fcrecek basit bir Flask API olarak tasarlanacak.<\/p>\n<p><strong>1. Proje Yap\u0131s\u0131 ve Dosyalar:<\/strong><\/p>\n<ul>\n<li><code>app.py<\/code>: Flask uygulamas\u0131n\u0131 ve model y\u00fckleme\/\u00e7\u0131kar\u0131m mant\u0131\u011f\u0131n\u0131 i\u00e7erir.<\/li>\n<li><code>requirements.txt<\/code>: Gerekli Python ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 listeler.<\/li>\n<li><code>Dockerfile<\/code>: Modelin konteynerle\u015ftirilmesi i\u00e7in talimatlar.<\/li>\n<\/ul>\n<p><strong>2. <code>requirements.txt<\/code> Dosyas\u0131:<\/strong><\/p>\n<p>  <code><br \/>\n    transformers==4.35.2<br \/>\n    torch==2.1.0<br \/>\n    flask==2.0.2<br \/>\n    gunicorn==20.1.0<br \/>\n  <\/code><\/p>\n<p><strong>3. <code>app.py<\/code> Dosyas\u0131 (Basit bir NLP Flask API):<\/strong><\/p>\n<pre><code>\nfrom flask import Flask, request, jsonify\nfrom transformers import pipeline\nimport torch\nimport os\n\napp = Flask(__name__)\n\n# Model ve tokenizer'\u0131 y\u00fcklemek i\u00e7in bir NLP pipeline'\u0131 olu\u015ftur\n# Bu i\u015flem biraz zaman alabilir, bu y\u00fczden uygulama ba\u015flang\u0131c\u0131nda yap\u0131l\u0131r.\n# Modeli indirmek i\u00e7in ortam de\u011fi\u015fkeni kullanabiliriz.\nMODEL_NAME = os.getenv(\"MODEL_NAME\", \"distilbert-base-uncased-finetuned-sst-2-english\")\nclassifier = pipeline(\"sentiment-analysis\", model=MODEL_NAME, tokenizer=MODEL_NAME)\n\n@app.route('\/classify', methods=['POST'])\ndef classify_text():\n    data = request.get_json(force=True)\n    text = data.get('text', '')\n\n    if not text:\n        return jsonify({'error': 'Metin bo\u015f olamaz!'}), 400\n\n    # Metni s\u0131n\u0131fland\u0131r\n    result = classifier(text)[0]\n    return jsonify(result)\n\nif __name__ == '__main__':\n    # PyTorch'un CPU'da m\u0131 yoksa GPU'da m\u0131 \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edelim\n    print(f\"CUDA mevcut mu: {torch.cuda.is_available()}\")\n    print(f\"Kullan\u0131lan cihaz: {'cuda' if torch.cuda.is_available() else 'cpu'}\")\n    \n    # Gunicorn ile \u00e7al\u0131\u015ft\u0131rma, Flask'\u0131n dahili sunucusunu kullanmaktan daha iyidir\n    # Gunicorn, 0.0.0.0:5000 \u00fczerinde app'i dinler.\n    app.run(host='0.0.0.0', port=5000)\n  <\/pre>\n<p><\/code><\/p>\n<p><strong>4. <code>Dockerfile<\/code> Olu\u015fturma (\u00c7ok A\u015famal\u0131 Yap\u0131 ile):<\/strong><br \/>\n  B\u00fcy\u00fck NLP modelleri ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 nedeniyle, \u00e7ok a\u015famal\u0131 bir yap\u0131 ve potansiyel GPU deste\u011fi bu senaryoda idealdir.<\/p>\n<pre><code>\n# A\u015eAMA 1: Ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurma ve modeli \u00f6nbelle\u011fe alma\nFROM python:3.9-slim-buster AS builder\n\n# Sistem ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fckle (e\u011fer \u00f6zel bir \u015feye ihtiya\u00e7 duyulursa)\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n    git \\\n    && rm -rf \/var\/lib\/apt\/lists\/*\n\nWORKDIR \/app\n\n# requirements.txt dosyas\u0131n\u0131 kopyala\nCOPY requirements.txt .\n\n# Ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckle\n# --no-cache-dir ve -U pip'i g\u00fcncelleyip \u00f6nbellek olmadan y\u00fckleme yapar\nRUN pip install --no-cache-dir -r requirements.txt\n\n# Modelin indirilmesini ve \u00f6nbelle\u011fe al\u0131nmas\u0131n\u0131 sa\u011flayan ge\u00e7ici bir script \u00e7al\u0131\u015ft\u0131r\n# Bu, nihai imajda modelin zaten var olmas\u0131n\u0131 sa\u011flar ve ilk \u00e7al\u0131\u015ft\u0131rmay\u0131 h\u0131zland\u0131r\u0131r.\n# Ortam de\u011fi\u015fkeni ile model ad\u0131n\u0131 belirleyebiliriz.\nENV MODEL_NAME=distilbert-base-uncased-finetuned-sst-2-english\nRUN python -c \"from transformers import pipeline; pipeline('sentiment-analysis', model='${MODEL_NAME}', tokenizer='${MODEL_NAME}')\"\n\n# A\u015eAMA 2: \u00dcretim A\u015famas\u0131\n# Daha da hafif bir Python imaj\u0131 kullanabiliriz, veya ayn\u0131 slim-buster devam edebiliriz\nFROM python:3.9-slim-buster\n\nWORKDIR \/app\n\n# \u00d6nceki a\u015famadan sadece gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 kopyala\nCOPY --from=builder \/app\/requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\n# \u00d6nceden indirilmi\u015f modeli ve tokenizer'\u0131 kopyala\n# transformers k\u00fct\u00fcphanesi modelleri genellikle ~\/.cache\/huggingface\/hub dizinine kaydeder\nCOPY --from=builder \/root\/.cache\/huggingface\/ \/root\/.cache\/huggingface\/\n\n# Uygulama kodunu kopyala\nCOPY app.py .\n\n# Flask uygulamas\u0131n\u0131n 5000 numaral\u0131 port \u00fczerinden hizmet verece\u011fini belirtiyoruz\nEXPOSE 5000\n\n# Model ad\u0131n\u0131 ortam de\u011fi\u015fkeni olarak ayarla\nENV MODEL_NAME=distilbert-base-uncased-finetuned-sst-2-english\n\n# Konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lacak varsay\u0131lan komut\nCMD [\"gunicorn\", \"--bind\", \"0.0.0.0:5000\", \"app:app\"]\n  <\/pre>\n<p><\/code><\/p>\n<p><strong>Senaryoya \u00d6zel Dockerfile \u0130pu\u00e7lar\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Model \u00d6nbellekleme:<\/strong> A\u015eAMA 1'de <code>transformers<\/code> pipeline'\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak modelin ve tokenizer'\u0131n Docker imaj\u0131 olu\u015fturulurken indirilmesini ve \u00f6nbelle\u011fe al\u0131nmas\u0131n\u0131 sa\u011fl\u0131yoruz. Bu sayede konteyner ilk kez ba\u015flat\u0131ld\u0131\u011f\u0131nda model indirme s\u00fcresini ortadan kald\u0131r\u0131r. Hugging Face modelleri genellikle <code>\/root\/.cache\/huggingface\/<\/code> dizinine kaydedilir ve bu dizini A\u015eAMA 2'ye kopyalar\u0131z.<\/li>\n<li><strong>GPU Deste\u011fi (Opsiyonel):<\/strong> E\u011fer bu modelin GPU'da \u00e7al\u0131\u015fmas\u0131n\u0131 isteseydik, <code>FROM<\/code> sat\u0131r\u0131n\u0131 <code>nvidia\/cuda:...<\/code> tabanl\u0131 bir imajla de\u011fi\u015ftirmemiz ve <code>requirements.txt<\/code> i\u00e7ine <code>torch<\/code> yerine <code>torch-cuda<\/code> veya uygun TensorFlow GPU versiyonunu eklememiz gerekirdi.<\/li>\n<li><strong>Ortam De\u011fi\u015fkeni Kullan\u0131m\u0131:<\/strong> <code>MODEL_NAME<\/code> gibi model adlar\u0131n\u0131 ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netmek, Dockerfile'\u0131 farkl\u0131 modelleri da\u011f\u0131tmak i\u00e7in daha esnek hale getirir.<\/li>\n<li><strong>Minimal \u0130maj Boyutu:<\/strong> <code>slim-buster<\/code> Python imaj\u0131 ve \u00e7ok a\u015famal\u0131 yap\u0131, nihai imaj boyutunu m\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck tutmaya yard\u0131mc\u0131 olur. Model dosyalar\u0131 hala bir miktar yer kaplasa da, gereksiz derleme ara\u00e7lar\u0131ndan ka\u00e7\u0131n\u0131r\u0131z.<\/li>\n<\/ul>\n<p>Bu senaryo, karma\u015f\u0131k YZ modellerinin bile Docker ile nas\u0131l g\u00fcvenilir, tutarl\u0131 ve optimize edilmi\u015f bir \u015fekilde da\u011f\u0131t\u0131labilece\u011fini g\u00f6stermektedir. GitHub Actions ile birle\u015ftirildi\u011finde, bu s\u00fcre\u00e7 tamamen otomatikle\u015ftirilebilir ve YZ projelerinizin ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc modern MLOps uygulamalar\u0131na uygun hale getirir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Yapay zeka projelerinin geli\u015ftirilmesi kadar, onlar\u0131n g\u00fcvenilir ve verimli bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131 da b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. Bu makale boyunca, Docker ve Dockerfile'\u0131n bu s\u00fcre\u00e7teki kritik rol\u00fcn\u00fc, GitHub Actions ile entegrasyonunu ve ileri d\u00fczey optimizasyon tekniklerini detayl\u0131 bir \u015fekilde ele ald\u0131k. Geli\u015ftirme ortam\u0131ndaki \"benim makinemde \u00e7al\u0131\u015f\u0131yor\" sorunsal\u0131ndan, \u00fcretim ortam\u0131nda \u00f6l\u00e7eklenebilir ve tutarl\u0131 YZ servisleri sunmaya kadar uzanan bu yolculukta, konteynerle\u015ftirmenin ne denli g\u00fc\u00e7l\u00fc bir ara\u00e7 oldu\u011funu g\u00f6rd\u00fck. \u00c7ok a\u015famal\u0131 yap\u0131larla imaj boyutunu k\u00fc\u00e7\u00fcltmekten, GPU deste\u011fini entegre etmeye ve g\u00fcvenli uygulamalar geli\u015ftirmeye kadar bir\u00e7ok farkl\u0131 ba\u015fl\u0131k alt\u0131nda pratik bilgiler edindik. GitHub ile CI\/CD i\u015f ak\u0131\u015flar\u0131 olu\u015fturarak, YZ model g\u00fcncellemelerinizin otomatik olarak derlenip da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flayabilir, b\u00f6ylece MLOps prensiplerini etkin bir \u015fekilde uygulayabilirsiniz.<\/p>\n<p>  K\u0131sacas\u0131, Docker ve GitHub entegrasyonu, YZ projelerinizin t\u00fcm ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc basitle\u015ftirir, h\u0131zland\u0131r\u0131r ve standartla\u015ft\u0131r\u0131r. Bu sayede, geli\u015ftirme ekipleri daha verimli \u00e7al\u0131\u015fabilir, operasyonel y\u00fck azal\u0131r ve kullan\u0131c\u0131lar\u0131n\u0131za s\u00fcrekli olarak g\u00fcncel ve g\u00fcvenilir YZ servisleri sunabilirsiniz. Umar\u0131z bu makale, yapay zeka projelerinizi konteynerle\u015ftirme ve da\u011f\u0131tma yolculu\u011funuzda size sa\u011flam bir ba\u015flang\u0131\u00e7 noktas\u0131 sunmu\u015ftur.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<div class=\"faq\">\n<h4>1. Dockerfile olmadan da bir AI projesi da\u011f\u0131tabilir miyim?<\/h4>\n<p><strong>Cevap:<\/strong> Evet, da\u011f\u0131tabilirsiniz ancak bu, genellikle \u00f6nerilen bir y\u00f6ntem de\u011fildir. Manuel olarak ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurmak, sanal ortamlar (conda, venv) kullanmak veya do\u011frudan bir sanal makineye kurmak gibi y\u00f6ntemler mevcut olsa da, Dockerfile'\u0131n sa\u011flad\u0131\u011f\u0131 ortam tutarl\u0131l\u0131\u011f\u0131, izolasyon, kolay da\u011f\u0131t\u0131m ve \u00f6l\u00e7eklenebilirlik avantajlar\u0131ndan mahrum kal\u0131rs\u0131n\u0131z. \u00d6zellikle karma\u015f\u0131k ba\u011f\u0131ml\u0131l\u0131klar\u0131 olan veya birden fazla ortamda \u00e7al\u0131\u015fmas\u0131 gereken YZ projeleri i\u00e7in Dockerfile neredeyse vazge\u00e7ilmezdir.<\/p>\n<\/p><\/div>\n<div class=\"faq\">\n<h4>2. GPU deste\u011fini Docker'a nas\u0131l entegre ederim?<\/h4>\n<p><strong>Cevap:<\/strong> GPU deste\u011fi i\u00e7in ana bilgisayar\u0131n\u0131zda NVIDIA s\u00fcr\u00fcc\u00fclerinin ve NVIDIA Container Toolkit'in (eski ad\u0131yla nvidia-docker) kurulu olmas\u0131 gerekir. Dockerfile i\u00e7inde ise <code>nvidia\/cuda<\/code> tabanl\u0131 bir temel imaj (\u00f6rne\u011fin <code>nvidia\/cuda:11.8.0-cudnn8-runtime-ubuntu22.04<\/code>) kullanarak CUDA ve cuDNN k\u00fct\u00fcphanelerini i\u00e7eren bir ortam olu\u015fturmal\u0131s\u0131n\u0131z. Konteyneri \u00e7al\u0131\u015ft\u0131r\u0131rken <code>docker run --gpus all [imaj_ad\u0131]<\/code> komutunu kullanarak konteynerin t\u00fcm GPU'lara eri\u015fmesini sa\u011flars\u0131n\u0131z.<\/p>\n<\/p><\/div>\n<div class=\"faq\">\n<h4>3. Docker imaj boyutunu nas\u0131l k\u00fc\u00e7\u00fcltebilirim?<\/h4>\n<p><strong>Cevap:<\/strong> \u0130maj boyutunu k\u00fc\u00e7\u00fcltmek i\u00e7in birka\u00e7 etkili y\u00f6ntem vard\u0131r:<\/p>\n<ul>\n<li><strong>\u00c7ok A\u015famal\u0131 Yap\u0131lar (Multi-stage builds):<\/strong> Derleme ve \u00e7al\u0131\u015fma zaman\u0131 ortamlar\u0131n\u0131 ay\u0131r\u0131n.<\/li>\n<li><strong>Daha k\u00fc\u00e7\u00fck temel imajlar kullan\u0131n:<\/strong> <code>-slim<\/code> veya <code>-alpine<\/code> etiketli Python imajlar\u0131 gibi.<\/li>\n<li><strong><code>.dockerignore<\/code> kullan\u0131n:<\/strong> Gereksiz dosyalar\u0131n (\u00f6rne\u011fin <code>.git<\/code>, <code>__pycache__<\/code>, veri k\u00fcmeleri) imaja dahil edilmesini engelleyin.<\/li>\n<li><strong><code>RUN<\/code> komutlar\u0131n\u0131 birle\u015ftirin:<\/strong> Ayn\u0131 katmanda birden fazla komut \u00e7al\u0131\u015ft\u0131rmak (<code>RUN apt-get update && apt-get install -y ...<\/code> gibi) katman say\u0131s\u0131n\u0131 azalt\u0131r.<\/li>\n<li><strong>\u00d6nbelle\u011fi temizleyin:<\/strong> <code>pip install --no-cache-dir<\/code> ve <code>apt-get clean<\/code> gibi komutlarla gereksiz \u00f6nbellek dosyalar\u0131n\u0131 silin.<\/li>\n<\/ul>\n<\/p><\/div>\n<div class=\"faq\">\n<h4>4. GitHub Actions ile birden fazla Docker imaj\u0131n\u0131 veya servisini nas\u0131l da\u011f\u0131t\u0131r\u0131m?<\/h4>\n<p><strong>Cevap:<\/strong> Birden fazla imaj veya servisi da\u011f\u0131tmak i\u00e7in GitHub Actions i\u015f ak\u0131\u015f\u0131n\u0131zda birden fazla \"job\" tan\u0131mlayabilirsiniz. Her job farkl\u0131 bir Dockerfile'a veya farkl\u0131 bir servis da\u011f\u0131t\u0131m\u0131na odaklanabilir. Ayr\u0131ca, tek bir job i\u00e7inde, farkl\u0131 ba\u011flamlar (<code>context<\/code>) belirterek birden fazla <code>docker\/build-push-action<\/code> ad\u0131m\u0131 kullanarak farkl\u0131 Dockerfile'lar\u0131 derleyip g\u00f6nderebilirsiniz. Kompozit eylemler veya matris stratejileri de karma\u015f\u0131k senaryolarda i\u015f ak\u0131\u015f\u0131n\u0131 basitle\u015ftirmek i\u00e7in kullan\u0131labilir.<\/p>\n<\/p><\/div>\n<\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Yapay zeka (YZ) projelerini geli\u015ftirme s\u00fcre\u00e7leri heyecan verici olsa da, bu projeleri tutarl\u0131 ve g\u00fcvenilir bir \u015fekilde da\u011f\u0131tmak&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1407],"tags":[],"class_list":{"0":"post-35070","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-docker","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7<\/title>\n<meta name=\"description\" content=\"Yapay zeka (YZ) projelerini geli\u015ftirme s\u00fcre\u00e7leri heyecan verici olsa da, bu projeleri tutarl\u0131 ve g\u00fcvenilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir zorluk te\u015fkil eder. Geli\u015ftirme ortam\u0131n\u0131zda sorunsuz \u00e7al\u0131\u015fan bir modelin, \u00fcretim ortam\u0131na al\u0131nd\u0131\u011f\u0131nda beklenmedik hatalar vermesi veya ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131yla kar\u015f\u0131la\u015f\u0131lmas\u0131 olduk\u00e7a yayg\u0131nd\u0131r. Peki, bu karma\u015f\u0131k YZ modellerini farkl\u0131 sunuculara veya bulut ortamlar\u0131na ta\u015f\u0131rken ayn\u0131 performans\u0131 ve istikrar\u0131 nas\u0131l garantileyebiliriz? \u0130\u015fte bu noktada Docker ve onun temel yap\u0131 ta\u015f\u0131 olan Dockerfile, YZ servislerinizi standartla\u015ft\u0131rma, izole etme ve kolayca da\u011f\u0131tma konusunda devreye giriyor. Bu makalede, GitHub \u00fczerinde Dockerfile kullanarak YZ projelerinizi nas\u0131l u\u00e7tan uca y\u00f6netebilece\u011finizi, temelden ileri d\u00fczeye ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. YZ uygulamalar\u0131n\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 basitle\u015ftirerek geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak ve MLOps (Makine \u00d6\u011frenimi Operasyonlar\u0131) prensiplerini benimsemek i\u00e7in gelin bu yolculu\u011fa birlikte \u00e7\u0131kal\u0131m.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7\" \/>\n<meta property=\"og:description\" content=\"Yapay zeka (YZ) projelerini geli\u015ftirme s\u00fcre\u00e7leri heyecan verici olsa da, bu projeleri tutarl\u0131 ve g\u00fcvenilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir zorluk te\u015fkil eder. Geli\u015ftirme ortam\u0131n\u0131zda sorunsuz \u00e7al\u0131\u015fan bir modelin, \u00fcretim ortam\u0131na al\u0131nd\u0131\u011f\u0131nda beklenmedik hatalar vermesi veya ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131yla kar\u015f\u0131la\u015f\u0131lmas\u0131 olduk\u00e7a yayg\u0131nd\u0131r. Peki, bu karma\u015f\u0131k YZ modellerini farkl\u0131 sunuculara veya bulut ortamlar\u0131na ta\u015f\u0131rken ayn\u0131 performans\u0131 ve istikrar\u0131 nas\u0131l garantileyebiliriz? \u0130\u015fte bu noktada Docker ve onun temel yap\u0131 ta\u015f\u0131 olan Dockerfile, YZ servislerinizi standartla\u015ft\u0131rma, izole etme ve kolayca da\u011f\u0131tma konusunda devreye giriyor. Bu makalede, GitHub \u00fczerinde Dockerfile kullanarak YZ projelerinizi nas\u0131l u\u00e7tan uca y\u00f6netebilece\u011finizi, temelden ileri d\u00fczeye ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. YZ uygulamalar\u0131n\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 basitle\u015ftirerek geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak ve MLOps (Makine \u00d6\u011frenimi Operasyonlar\u0131) prensiplerini benimsemek i\u00e7in gelin bu yolculu\u011fa birlikte \u00e7\u0131kal\u0131m.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-25T10:31:19+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7\",\"datePublished\":\"2025-11-25T10:31:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/\"},\"wordCount\":3931,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Docker\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/\",\"name\":\"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-25T10:31:19+00:00\",\"description\":\"Yapay zeka (YZ) projelerini geli\u015ftirme s\u00fcre\u00e7leri heyecan verici olsa da, bu projeleri tutarl\u0131 ve g\u00fcvenilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir zorluk te\u015fkil eder. Geli\u015ftirme ortam\u0131n\u0131zda sorunsuz \u00e7al\u0131\u015fan bir modelin, \u00fcretim ortam\u0131na al\u0131nd\u0131\u011f\u0131nda beklenmedik hatalar vermesi veya ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131yla kar\u015f\u0131la\u015f\u0131lmas\u0131 olduk\u00e7a yayg\u0131nd\u0131r. Peki, bu karma\u015f\u0131k YZ modellerini farkl\u0131 sunuculara veya bulut ortamlar\u0131na ta\u015f\u0131rken ayn\u0131 performans\u0131 ve istikrar\u0131 nas\u0131l garantileyebiliriz? \u0130\u015fte bu noktada Docker ve onun temel yap\u0131 ta\u015f\u0131 olan Dockerfile, YZ servislerinizi standartla\u015ft\u0131rma, izole etme ve kolayca da\u011f\u0131tma konusunda devreye giriyor. Bu makalede, GitHub \u00fczerinde Dockerfile kullanarak YZ projelerinizi nas\u0131l u\u00e7tan uca y\u00f6netebilece\u011finizi, temelden ileri d\u00fczeye ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. YZ uygulamalar\u0131n\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 basitle\u015ftirerek geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak ve MLOps (Makine \u00d6\u011frenimi Operasyonlar\u0131) prensiplerini benimsemek i\u00e7in gelin bu yolculu\u011fa birlikte \u00e7\u0131kal\u0131m.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7","description":"Yapay zeka (YZ) projelerini geli\u015ftirme s\u00fcre\u00e7leri heyecan verici olsa da, bu projeleri tutarl\u0131 ve g\u00fcvenilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir zorluk te\u015fkil eder. Geli\u015ftirme ortam\u0131n\u0131zda sorunsuz \u00e7al\u0131\u015fan bir modelin, \u00fcretim ortam\u0131na al\u0131nd\u0131\u011f\u0131nda beklenmedik hatalar vermesi veya ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131yla kar\u015f\u0131la\u015f\u0131lmas\u0131 olduk\u00e7a yayg\u0131nd\u0131r. Peki, bu karma\u015f\u0131k YZ modellerini farkl\u0131 sunuculara veya bulut ortamlar\u0131na ta\u015f\u0131rken ayn\u0131 performans\u0131 ve istikrar\u0131 nas\u0131l garantileyebiliriz? \u0130\u015fte bu noktada Docker ve onun temel yap\u0131 ta\u015f\u0131 olan Dockerfile, YZ servislerinizi standartla\u015ft\u0131rma, izole etme ve kolayca da\u011f\u0131tma konusunda devreye giriyor. Bu makalede, GitHub \u00fczerinde Dockerfile kullanarak YZ projelerinizi nas\u0131l u\u00e7tan uca y\u00f6netebilece\u011finizi, temelden ileri d\u00fczeye ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. YZ uygulamalar\u0131n\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 basitle\u015ftirerek geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak ve MLOps (Makine \u00d6\u011frenimi Operasyonlar\u0131) prensiplerini benimsemek i\u00e7in gelin bu yolculu\u011fa birlikte \u00e7\u0131kal\u0131m.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/","og_locale":"tr_TR","og_type":"article","og_title":"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7","og_description":"Yapay zeka (YZ) projelerini geli\u015ftirme s\u00fcre\u00e7leri heyecan verici olsa da, bu projeleri tutarl\u0131 ve g\u00fcvenilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir zorluk te\u015fkil eder. Geli\u015ftirme ortam\u0131n\u0131zda sorunsuz \u00e7al\u0131\u015fan bir modelin, \u00fcretim ortam\u0131na al\u0131nd\u0131\u011f\u0131nda beklenmedik hatalar vermesi veya ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131yla kar\u015f\u0131la\u015f\u0131lmas\u0131 olduk\u00e7a yayg\u0131nd\u0131r. Peki, bu karma\u015f\u0131k YZ modellerini farkl\u0131 sunuculara veya bulut ortamlar\u0131na ta\u015f\u0131rken ayn\u0131 performans\u0131 ve istikrar\u0131 nas\u0131l garantileyebiliriz? \u0130\u015fte bu noktada Docker ve onun temel yap\u0131 ta\u015f\u0131 olan Dockerfile, YZ servislerinizi standartla\u015ft\u0131rma, izole etme ve kolayca da\u011f\u0131tma konusunda devreye giriyor. Bu makalede, GitHub \u00fczerinde Dockerfile kullanarak YZ projelerinizi nas\u0131l u\u00e7tan uca y\u00f6netebilece\u011finizi, temelden ileri d\u00fczeye ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. YZ uygulamalar\u0131n\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 basitle\u015ftirerek geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak ve MLOps (Makine \u00d6\u011frenimi Operasyonlar\u0131) prensiplerini benimsemek i\u00e7in gelin bu yolculu\u011fa birlikte \u00e7\u0131kal\u0131m.","og_url":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-25T10:31:19+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7","datePublished":"2025-11-25T10:31:19+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/"},"wordCount":3931,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Docker"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/","url":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/","name":"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-25T10:31:19+00:00","description":"Yapay zeka (YZ) projelerini geli\u015ftirme s\u00fcre\u00e7leri heyecan verici olsa da, bu projeleri tutarl\u0131 ve g\u00fcvenilir bir \u015fekilde da\u011f\u0131tmak \u00e7o\u011fu zaman b\u00fcy\u00fck bir zorluk te\u015fkil eder. Geli\u015ftirme ortam\u0131n\u0131zda sorunsuz \u00e7al\u0131\u015fan bir modelin, \u00fcretim ortam\u0131na al\u0131nd\u0131\u011f\u0131nda beklenmedik hatalar vermesi veya ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131yla kar\u015f\u0131la\u015f\u0131lmas\u0131 olduk\u00e7a yayg\u0131nd\u0131r. Peki, bu karma\u015f\u0131k YZ modellerini farkl\u0131 sunuculara veya bulut ortamlar\u0131na ta\u015f\u0131rken ayn\u0131 performans\u0131 ve istikrar\u0131 nas\u0131l garantileyebiliriz? \u0130\u015fte bu noktada Docker ve onun temel yap\u0131 ta\u015f\u0131 olan Dockerfile, YZ servislerinizi standartla\u015ft\u0131rma, izole etme ve kolayca da\u011f\u0131tma konusunda devreye giriyor. Bu makalede, GitHub \u00fczerinde Dockerfile kullanarak YZ projelerinizi nas\u0131l u\u00e7tan uca y\u00f6netebilece\u011finizi, temelden ileri d\u00fczeye ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. YZ uygulamalar\u0131n\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 basitle\u015ftirerek geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rmak ve MLOps (Makine \u00d6\u011frenimi Operasyonlar\u0131) prensiplerini benimsemek i\u00e7in gelin bu yolculu\u011fa birlikte \u00e7\u0131kal\u0131m.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/github-dockerfile-ve-yapay-zeka-entegrasyonu-baslangic\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Github Dockerfile ve Yapay Zeka Entegrasyonu: Ba\u015flang\u0131\u00e7"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35070","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35070"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35070\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35070"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35070"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35070"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}