{"id":32498,"date":"2025-10-22T12:42:17","date_gmt":"2025-10-22T09:42:17","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32498"},"modified":"2025-10-22T12:42:17","modified_gmt":"2025-10-22T09:42:17","slug":"node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/","title":{"rendered":"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme"},"content":{"rendered":"<p><body><\/p>\n<h2>Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme<\/h2>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde tutarl\u0131l\u0131k, izolasyon ve kolay kurulum b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. Node.js uygulamalar\u0131 i\u00e7in bu gereksinimleri kar\u015f\u0131laman\u0131n en etkili yollar\u0131ndan biri de Docker ve Docker Compose kullanarak uygulamay\u0131 konteynerle\u015ftirmektir. Bu rehberde, Node.js uygulaman\u0131z\u0131 Docker Compose ile geli\u015ftirme ortam\u0131n\u0131z i\u00e7in nas\u0131l konteynerle\u015ftirece\u011finizi ad\u0131m ad\u0131m \u00f6\u011freneceksiniz.<\/p>\n<h3>Giri\u015f: Konteynerle\u015ftirme ve Neden \u00d6nemli?<\/h3>\n<p>Konteynerle\u015ftirme, bir uygulamay\u0131 ve t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 (k\u00fct\u00fcphaneler, ayarlar vb.) izole edilmi\u015f bir ortamda paketleme s\u00fcrecidir. Bu, uygulaman\u0131n farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Docker, bu konteynerleri olu\u015fturmak ve y\u00f6netmek i\u00e7in kullan\u0131lan pop\u00fcler bir platformdur.<\/p>\n<p>Node.js geli\u015ftiricileri i\u00e7in konteynerle\u015ftirmenin ba\u015fl\u0131ca faydalar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>Ortam Tutarl\u0131l\u0131\u011f\u0131:<\/strong> &#8220;Benim makinemde \u00e7al\u0131\u015f\u0131yordu!&#8221; sorununu ortadan kald\u0131r\u0131r. Her geli\u015ftirici ayn\u0131, izole edilmi\u015f ortamda \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k \u0130zolasyonu:<\/strong> Uygulaman\u0131z\u0131n ba\u011f\u0131ml\u0131l\u0131klar\u0131, ana sisteminizdeki di\u011fer uygulamalarla \u00e7ak\u0131\u015fmaz.<br \/>\n*   <strong>Kolay Kurulum:<\/strong> Yeni bir geli\u015ftirici ekibe kat\u0131ld\u0131\u011f\u0131nda veya yeni bir proje \u00fczerinde \u00e7al\u0131\u015fmaya ba\u015flad\u0131\u011f\u0131n\u0131zda, t\u00fcm geli\u015ftirme ortam\u0131n\u0131 saniyeler i\u00e7inde aya\u011fa kald\u0131rabilirsiniz.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik ve Ta\u015f\u0131nabilirlik:<\/strong> Konteynerler, bulut ortamlar\u0131na veya farkl\u0131 sunuculara kolayca ta\u015f\u0131nabilir ve \u00f6l\u00e7eklenebilir.<\/p>\n<p>Docker Compose ise birden fazla Docker konteynerini (\u00f6rne\u011fin, bir Node.js uygulamas\u0131 ve bir veritaban\u0131) tan\u0131mlaman\u0131za ve tek bir komutla y\u00f6netmenize olanak tan\u0131yan bir ara\u00e7t\u0131r. Geli\u015ftirme ortamlar\u0131 genellikle uygulama, veritaban\u0131, \u00f6nbellek gibi birden fazla servisten olu\u015ftu\u011fu i\u00e7in Docker Compose vazge\u00e7ilmezdir.<\/p>\n<h3>Gereksinimler ve \u00d6n Haz\u0131rl\u0131k<\/h3>\n<p>Bu rehbere ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki gereksinimlere sahip olman\u0131z gerekmektedir:<\/p>\n<p>1.  <strong>Docker Desktop Kurulumu:<\/strong> Windows veya macOS kullan\u0131yorsan\u0131z, Docker Desktop&#8217;\u0131 y\u00fcklemi\u015f olman\u0131z gerekir. Linux kullan\u0131yorsan\u0131z, Docker Engine ve Docker Compose&#8217;u kurmal\u0131s\u0131n\u0131z. Kurulum talimatlar\u0131 i\u00e7in Docker&#8217;\u0131n resmi web sitesini ziyaret edebilirsiniz.<br \/>\n2.  <strong>Temel Node.js Uygulamas\u0131:<\/strong> Konteynerle\u015ftirece\u011fimiz basit bir Node.js uygulamas\u0131na ihtiyac\u0131m\u0131z var. E\u011fer yoksa, projenizin ana dizininde <code>package.json<\/code> ve <code>index.js<\/code> dosyalar\u0131 bulunan basit bir Express uygulamas\u0131 olu\u015fturabilirsiniz.<\/p>\n<p>    \u00d6rnek bir <code>index.js<\/code> dosyas\u0131:<\/p>\n<pre><code class=\"language-javascript\">\/\/ index.js\n    const express = require('express');\n    const app = express();\n    const port = 3000;\n\n    app.get('\/', (req, res) => {\n      res.send('Merhaba Docker! Node.js uygulamam konteynerde \u00e7al\u0131\u015f\u0131yor.');\n    });\n\n    app.listen(port, () => {\n      console.log(<code>Uygulama http:\/\/localhost:${port} adresinde \u00e7al\u0131\u015f\u0131yor.<\/code>);\n    });<\/code><\/pre>\n<p>    Ve <code>package.json<\/code> dosyas\u0131:<\/p>\n<pre><code class=\"language-json\">\/\/ package.json\n    {\n      \"name\": \"my-node-app\",\n      \"version\": \"1.0.0\",\n      \"description\": \"A simple Node.js app for Docker demo\",\n      \"main\": \"index.js\",\n      \"scripts\": {\n        \"start\": \"node index.js\",\n        \"dev\": \"nodemon index.js\"\n      },\n      \"keywords\": [],\n      \"author\": \"\",\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"express\": \"^4.18.2\"\n      },\n      \"devDependencies\": {\n        \"nodemon\": \"^3.0.1\"\n      }\n    }<\/code><\/pre>\n<p>    Uygulaman\u0131z\u0131n k\u00f6k dizininde <code>npm install<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckledi\u011finizden emin olun.<\/p>\n<h3>Ad\u0131m 1: Node.js Uygulamas\u0131 \u0130\u00e7in Dockerfile Olu\u015fturma<\/h3>\n<p><code>Dockerfile<\/code>, Docker&#8217;\u0131n bir konteyner imaj\u0131n\u0131 nas\u0131l olu\u015fturaca\u011f\u0131n\u0131 anlatan talimatlar listesidir. Projenizin k\u00f6k dizininde <code>Dockerfile<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi doldurun:<\/p>\n<pre><code class=\"language-dockerfile\"># Dockerfile\n\n<h2>1. Temel \u0130maj\u0131 Belirle: Node.js'nin belirli bir s\u00fcr\u00fcm\u00fcn\u00fc ve Alpine Linux'u kullan\u0131yoruz.<\/h2>\n<h2>Alpine, daha k\u00fc\u00e7\u00fck boyutlu imajlar olu\u015fturmak i\u00e7in idealdir.<\/h2>\nFROM node:lts-alpine\n\n<h2>2. \u00c7al\u0131\u015fma Dizinini Belirle: Konteyner i\u00e7inde \u00e7al\u0131\u015faca\u011f\u0131m\u0131z dizin.<\/h2>\n<h2>T\u00fcm sonraki komutlar bu dizin i\u00e7inde \u00e7al\u0131\u015f\u0131r.<\/h2>\nWORKDIR \/app\n\n<h2>3. Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Kopyala ve Kur:<\/h2>\n<h2>package.json ve package-lock.json dosyalar\u0131n\u0131 WORKDIR'a kopyalar\u0131z.<\/h2>\n<h2>Bu ad\u0131m, ba\u011f\u0131ml\u0131l\u0131klar de\u011fi\u015fmedi\u011fi s\u00fcrece Docker'\u0131n bu katman\u0131 \u00f6nbelle\u011fe almas\u0131n\u0131 sa\u011flar,<\/h2>\n<h2>b\u00f6ylece daha h\u0131zl\u0131 imaj olu\u015fturulur.<\/h2>\nCOPY package*.json .\/\n\n<h2>npm install komutu ile t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurar\u0131z.<\/h2>\n<h2>--only=production bayra\u011f\u0131n\u0131 kullanm\u0131yoruz \u00e7\u00fcnk\u00fc geli\u015ftirme ortam\u0131 i\u00e7in devDependencies'e de ihtiyac\u0131m\u0131z olabilir (\u00f6rn. nodemon).<\/h2>\nRUN npm install\n\n<h2>4. Uygulama Kodunu Kopyala:<\/h2>\n<h2>Mevcut dizindeki t\u00fcm dosyalar\u0131 (uygulama kodu) konteyner i\u00e7indeki \/app dizinine kopyalar\u0131z.<\/h2>\nCOPY . .\n\n<h2>5. Portu A\u00e7\u0131\u011fa \u00c7\u0131kar:<\/h2>\n<h2>Uygulaman\u0131n konteyner i\u00e7inde hangi portta \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 Docker'a bildirir.<\/h2>\n<h2>Bu, d\u0131\u015far\u0131dan eri\u015fim i\u00e7in bir ipucu sa\u011flar ancak do\u011frudan bir port e\u015fle\u015ftirmesi yapmaz.<\/h2>\nEXPOSE 3000\n\n<h2>6. Uygulamay\u0131 Ba\u015flatma Komutu:<\/h2>\n<h2>Konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015facak varsay\u0131lan komut.<\/h2>\n<h2>Geli\u015ftirme ortam\u0131 i\u00e7in nodemon kullanmak, kod de\u011fi\u015fikliklerinde otomatik yeniden ba\u015flatma sa\u011flar.<\/h2>\n<h2>E\u011fer nodemon'u devDependencies'e eklediyseniz, npm run dev komutunu kullanabilirsiniz.<\/h2>\nCMD [\"npm\", \"run\", \"dev\"]\n<h2>Veya nodemon kullanm\u0131yorsan\u0131z:<\/h2>\n<h2>CMD [\"node\", \"index.js\"]<\/code><\/pre>\n<\/h2>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <code>FROM node:lts-alpine<\/code>: Node.js&#8217;nin uzun s\u00fcreli destek (LTS) s\u00fcr\u00fcm\u00fcn\u00fc ve hafif Alpine Linux tabanl\u0131 bir imaj\u0131 kullan\u0131r\u0131z. Bu, daha k\u00fc\u00e7\u00fck imaj boyutlar\u0131 sa\u011flar.<br \/>\n*   <code>WORKDIR \/app<\/code>: Konteyner i\u00e7inde <code>\/app<\/code> ad\u0131nda bir \u00e7al\u0131\u015fma dizini olu\u015fturur ve t\u00fcm sonraki komutlar\u0131n bu dizinde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<br \/>\n<em>   <code>COPY package<\/em>.json .\/<\/code>: <code>package.json<\/code> ve <code>package-lock.json<\/code> dosyalar\u0131n\u0131 \u00e7al\u0131\u015fma dizinine kopyalar. Bu, <code>npm install<\/code> komutunun do\u011fru ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemesini sa\u011flar.<br \/>\n*   <code>RUN npm install<\/code>: Uygulaman\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fckler.<br \/>\n*   <code>COPY . .<\/code>: Projenin geri kalan t\u00fcm dosyalar\u0131n\u0131 (kaynak kodunuzu) \u00e7al\u0131\u015fma dizinine kopyalar.<br \/>\n*   <code>EXPOSE 3000<\/code>: Uygulaman\u0131n 3000 numaral\u0131 portta dinleyece\u011fini belirtir. Bu sadece belgeleme ama\u00e7l\u0131d\u0131r; portu d\u0131\u015far\u0131ya a\u00e7mak i\u00e7in Docker Compose&#8217;da port e\u015fle\u015ftirmesi yapmam\u0131z gerekecek.<br \/>\n*   <code>CMD [\"npm\", \"run\", \"dev\"]<\/code>: Konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015facak varsay\u0131lan komutu tan\u0131mlar. <code>nodemon<\/code> kullanmak, geli\u015ftirme s\u0131ras\u0131nda kod de\u011fi\u015fikliklerinde uygulaman\u0131z\u0131n otomatik olarak yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar. <code>package.json<\/code> dosyan\u0131zdaki <code>scripts<\/code> b\u00f6l\u00fcm\u00fcne <code>dev: \"nodemon index.js\"<\/code> eklemeniz gerekebilir.<\/p>\n<h3>Ad\u0131m 2: Geli\u015ftirme Ortam\u0131 \u0130\u00e7in docker-compose.yml Yap\u0131land\u0131rmas\u0131<\/h3>\n<p><code>docker-compose.yml<\/code> dosyas\u0131, uygulaman\u0131z\u0131n farkl\u0131 servislerini (Node.js uygulamas\u0131, veritaban\u0131 vb.) tan\u0131mlar ve bunlar\u0131n nas\u0131l bir araya gelece\u011fini belirtir. Projenizin k\u00f6k dizininde <code>docker-compose.yml<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi doldurun:<\/p>\n<pre><code class=\"language-yaml\"># docker-compose.yml\n\n<h2>Docker Compose dosyas\u0131n\u0131n s\u00fcr\u00fcm\u00fcn\u00fc belirtir. '3.8' en yayg\u0131n kullan\u0131lan s\u00fcr\u00fcmlerden biridir.<\/h2>\nversion: '3.8'\n\n<h2>Tan\u0131mlayaca\u011f\u0131m\u0131z t\u00fcm servisleri i\u00e7erir.<\/h2>\nservices:\n  # Node.js uygulamam\u0131z i\u00e7in servis tan\u0131m\u0131\n  app:\n    # Dockerfile'\u0131n bulundu\u011fu dizini belirtir. '.' mevcut dizin anlam\u0131na gelir.\n    build: .\n    # Konteyner i\u00e7indeki 3000 portunu host makinesindeki 3000 portuna e\u015fler.\n    # B\u00f6ylece uygulamaya taray\u0131c\u0131dan localhost:3000 \u00fczerinden eri\u015febiliriz.\n    ports:\n      - \"3000:3000\"\n    # Geli\u015ftirme i\u00e7in kritik olan volume e\u015fle\u015ftirmesi.\n    # Host makinesindeki mevcut dizini (.), konteyner i\u00e7indeki \/app dizinine e\u015fler.\n    # Bu sayede host makinesinde yapt\u0131\u011f\u0131n\u0131z kod de\u011fi\u015fiklikleri an\u0131nda konteyner i\u00e7inde de g\u00f6r\u00fcn\u00fcr olur.\n    # nodemon gibi ara\u00e7larla birlikte kullan\u0131ld\u0131\u011f\u0131nda hot-reloading (canl\u0131 yeniden y\u00fckleme) sa\u011flar.\n    volumes:\n      - .:\/app\n      # node_modules'in host makinesinde kalmas\u0131n\u0131 engellemek i\u00e7in bir isimsiz volume.\n      # Bu, node_modules'in konteyner i\u00e7inde kalmas\u0131n\u0131 ve performans art\u0131\u015f\u0131 sa\u011flar.\n      - \/app\/node_modules\n    # Konteyner i\u00e7in ortam de\u011fi\u015fkenleri tan\u0131mlar.\n    environment:\n      NODE_ENV: development\n      # MONGO_URI: mongodb:\/\/db:27017\/my-database # E\u011fer veritaban\u0131 kullan\u0131yorsan\u0131z\n    # Bu servisin ba\u015flat\u0131lmadan \u00f6nce hangi servislerin haz\u0131r olmas\u0131n\u0131 bekledi\u011fini belirtir.\n    # db servisini ekledi\u011fimizde kullan\u0131\u015fl\u0131d\u0131r.\n    # depends_on:\n    #   - db\n\n  # \u00d6rnek bir MongoDB veritaban\u0131 servisi (iste\u011fe ba\u011fl\u0131)\n  # db:\n  #   # MongoDB'nin resmi Docker imaj\u0131n\u0131 kullan\u0131r.\n  #   image: mongo:latest\n  #   # Konteyner i\u00e7indeki 27017 portunu host makinesindeki 27017 portuna e\u015fler.\n  #   ports:\n  #     - \"27017:27017\"\n  #   # Veritaban\u0131 verilerinin kal\u0131c\u0131 olmas\u0131 i\u00e7in volume e\u015fle\u015ftirmesi.\n  #   # db-data ad\u0131nda bir volume olu\u015fturur ve konteyner i\u00e7indeki \/data\/db dizinine ba\u011flar.\n  #   volumes:\n  #     - db-data:\/data\/db\n\n<h2>Tan\u0131mlanan t\u00fcm named volume'leri i\u00e7erir.<\/h2>\n<h2>volumes:<\/h2>\n<h2>db-data: # Veritaban\u0131 verileri i\u00e7in kal\u0131c\u0131 depolama<\/code><\/pre>\n<\/h2>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <code>version: '3.8'<\/code>: Docker Compose dosyas\u0131n\u0131n s\u00fcr\u00fcm\u00fcn\u00fc belirtir.<br \/>\n*   <code>services<\/code>: Uygulaman\u0131z\u0131n farkl\u0131 bile\u015fenlerini (servislerini) tan\u0131mlad\u0131\u011f\u0131n\u0131z ana b\u00f6l\u00fcmd\u00fcr.<br \/>\n*   <code>app<\/code>: Node.js uygulaman\u0131z i\u00e7in bir servis tan\u0131mlar.<br \/>\n    *   <code>build: .<\/code>: Bu servisin imaj\u0131n\u0131n mevcut dizindeki <code>Dockerfile<\/code> kullan\u0131larak olu\u015fturulaca\u011f\u0131n\u0131 belirtir.<br \/>\n    *   <code>ports: - \"3000:3000\"<\/code>: Host makinesindeki 3000 portunu, <code>app<\/code> konteyneri i\u00e7indeki 3000 portuna e\u015fler. Bu sayede taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:3000<\/code> adresine giderek uygulaman\u0131za eri\u015febilirsiniz.<br \/>\n    *   <code>volumes: - .:\/app<\/code>: Bu, geli\u015ftirme ortam\u0131 i\u00e7in en \u00f6nemli k\u0131s\u0131mlardan biridir. Host makinesindeki mevcut dizini (<code>.<\/code>), konteyner i\u00e7indeki <code>\/app<\/code> dizinine ba\u011flar. Bu sayede, host makinenizde kodunuzda yapt\u0131\u011f\u0131n\u0131z herhangi bir de\u011fi\u015fiklik an\u0131nda konteyner i\u00e7inde de g\u00f6r\u00fcn\u00fcr olur. <code>nodemon<\/code> gibi ara\u00e7larla birle\u015fti\u011finde, kodunuzu kaydetti\u011finiz anda uygulaman\u0131z otomatik olarak yeniden ba\u015flar.<br \/>\n    *   <code>- \/app\/node_modules<\/code>: Bu, bir &#8220;anonymous volume&#8221; (isimsiz volume) olarak adland\u0131r\u0131l\u0131r. Amac\u0131, host makinesindeki <code>node_modules<\/code> klas\u00f6r\u00fcn\u00fcn, volume e\u015fle\u015ftirmesi nedeniyle konteyner i\u00e7indeki <code>node_modules<\/code> klas\u00f6r\u00fcn\u00fc ezmesini engellemektir. B\u00f6ylece <code>node_modules<\/code> ba\u011f\u0131ml\u0131l\u0131klar\u0131 konteyner i\u00e7inde kal\u0131r ve platformlar aras\u0131 uyumluluk sorunlar\u0131 ya\u015fanmaz.<br \/>\n    *   <code>environment: - NODE_ENV=development<\/code>: Konteyner i\u00e7inde kullan\u0131labilecek ortam de\u011fi\u015fkenlerini tan\u0131mlar.<br \/>\n    *   <code>depends_on<\/code>: E\u011fer uygulaman\u0131z\u0131n bir veritaban\u0131 gibi ba\u015fka bir servise ihtiyac\u0131 varsa, bu servisin ba\u015flamadan \u00f6nce hangi servislerin haz\u0131r olmas\u0131n\u0131 bekleyece\u011fini belirtir.<br \/>\n*   <code>db<\/code> (yorum sat\u0131r\u0131 i\u00e7inde): \u0130ste\u011fe ba\u011fl\u0131 olarak ekleyebilece\u011finiz bir MongoDB veritaban\u0131 servisidir. <code>image: mongo:latest<\/code> ile MongoDB&#8217;nin resmi imaj\u0131n\u0131 kullan\u0131r\u0131z. <code>volumes: - db-data:\/data\/db<\/code> ile veritaban\u0131 verilerinin kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flar\u0131z; yani konteyner silinse bile verileriniz kaybolmaz.<br \/>\n*   <code>volumes<\/code>: <code>db-data<\/code> gibi adland\u0131r\u0131lm\u0131\u015f volume&#8217;leri tan\u0131mlad\u0131\u011f\u0131n\u0131z yerdir.<\/p>\n<h3>Ad\u0131m 3: Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma ve Y\u00f6netme<\/h3>\n<p><code>Dockerfile<\/code> ve <code>docker-compose.yml<\/code> dosyalar\u0131n\u0131 olu\u015fturduktan sonra, uygulaman\u0131z\u0131 Docker Compose ile \u00e7al\u0131\u015ft\u0131rmaya haz\u0131rs\u0131n\u0131z. Projenizin k\u00f6k dizininde (bu iki dosyan\u0131n bulundu\u011fu yerde) terminali a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 kullan\u0131n:<\/p>\n<h4>Uygulamay\u0131 Ba\u015flatma<\/h4>\n<pre><code class=\"language-bash\">docker-compose up --build -d<\/code><\/pre>\n<p>*   <code>docker-compose up<\/code>: <code>docker-compose.yml<\/code> dosyas\u0131nda tan\u0131mlanan t\u00fcm servisleri ba\u015flat\u0131r.<br \/>\n*   <code>--build<\/code>: E\u011fer <code>Dockerfile<\/code>&#8216;da veya uygulama kodunuzda bir de\u011fi\u015fiklik yapt\u0131ysan\u0131z, bu bayrak Docker&#8217;a imaj\u0131 yeniden olu\u015fturmas\u0131n\u0131 s\u00f6yler. \u0130lk \u00e7al\u0131\u015ft\u0131rmada mutlaka kullanmal\u0131s\u0131n\u0131z.<br \/>\n*   <code>-d<\/code> (detached mode): Servisleri arka planda \u00e7al\u0131\u015ft\u0131r\u0131r ve terminali serbest b\u0131rak\u0131r.<\/p>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131p <code>http:\/\/localhost:3000<\/code> adresine giderek Node.js uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz.<\/p>\n<h4>Konteyner Loglar\u0131n\u0131 G\u00f6r\u00fcnt\u00fcleme<\/h4>\n<p>Uygulaman\u0131z\u0131n \u00e7\u0131kt\u0131lar\u0131n\u0131 veya hata mesajlar\u0131n\u0131 g\u00f6rmek i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">docker-compose logs -f app<\/code><\/pre>\n<p>*   <code>logs<\/code>: Servislerin loglar\u0131n\u0131 g\u00f6sterir.<br \/>\n*   <code>-f<\/code> (follow): Loglar\u0131 ger\u00e7ek zamanl\u0131 olarak takip eder.<br \/>\n*   <code>app<\/code>: Hangi servisin loglar\u0131n\u0131 g\u00f6rmek istedi\u011finizi belirtir. (\u00d6rn: <code>db<\/code> servisi i\u00e7in <code>docker-compose logs -f db<\/code>)<\/p>\n<h4>Konteyner \u0130\u00e7ine Eri\u015fim<\/h4>\n<p>Bazen konteyner i\u00e7inde bir komut \u00e7al\u0131\u015ft\u0131rman\u0131z veya dosya sistemini incelemeniz gerekebilir. Bunun i\u00e7in <code>exec<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">docker-compose exec app bash<\/code><\/pre>\n<p>Bu komut, <code>app<\/code> servisi konteynerinin i\u00e7ine bir <code>bash<\/code> kabu\u011fu a\u00e7ar. \u0130\u00e7eride <code>ls<\/code>, <code>npm<\/code> gibi komutlar\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. \u00c7\u0131kmak i\u00e7in <code>exit<\/code> yaz\u0131n.<\/p>\n<h4>Uygulamay\u0131 Durdurma ve Silme<\/h4>\n<p>Geli\u015ftirme i\u015finiz bitti\u011finde veya konteynerleri yeniden ba\u015flatmak istedi\u011finizde:<\/p>\n<pre><code class=\"language-bash\">docker-compose down<\/code><\/pre>\n<p>Bu komut, <code>docker-compose.yml<\/code> dosyas\u0131nda tan\u0131mlanan t\u00fcm servisleri durdurur ve ilgili konteynerleri siler.<br \/>\nE\u011fer veritaban\u0131 gibi kal\u0131c\u0131 verileri de silmek isterseniz (volume&#8217;leri de kald\u0131rmak i\u00e7in):<\/p>\n<pre><code class=\"language-bash\">docker-compose down -v<\/code><\/pre>\n<p>*   <code>-v<\/code>: Servislerle ili\u015fkilendirilmi\u015f t\u00fcm volume&#8217;leri de (\u00f6rne\u011fin <code>db-data<\/code> volume&#8217;\u00fc) siler. <strong>Dikkatli kullan\u0131n, bu i\u015flem verilerinizi kal\u0131c\u0131 olarak silebilir.<\/strong><\/p>\n<h3>Geli\u015ftirme S\u00fcreci ve Faydalar\u0131<\/h3>\n<p>Docker Compose ile Node.js geli\u015ftirme ortam\u0131n\u0131z\u0131 kurman\u0131n sundu\u011fu ba\u015fl\u0131ca faydalar ve geli\u015ftirme s\u00fcrecine etkileri \u015funlard\u0131r:<\/p>\n<p>*   <strong>Canl\u0131 Yeniden Y\u00fckleme (Hot-Reloading):<\/strong> <code>volumes: - .:\/app<\/code> e\u015fle\u015ftirmesi ve <code>nodemon<\/code> kullan\u0131m\u0131 sayesinde, host makinenizde kodunuzu kaydetti\u011finiz anda Node.js uygulaman\u0131z konteyner i\u00e7inde otomatik olarak yeniden ba\u015flar. Bu, geli\u015ftirme h\u0131z\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi:<\/strong> T\u00fcm ba\u011f\u0131ml\u0131l\u0131klar konteyner i\u00e7inde izole edildi\u011fi i\u00e7in, farkl\u0131 projeler aras\u0131nda ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131 ya\u015famazs\u0131n\u0131z. Her proje kendi ortam\u0131nda, kendi ba\u011f\u0131ml\u0131l\u0131k setine sahip olur.<br \/>\n*   <strong>Kolay Onboarding:<\/strong> Yeni bir geli\u015ftirici ekibinize kat\u0131ld\u0131\u011f\u0131nda, sadece Docker Desktop&#8217;\u0131 kurmas\u0131 ve projenin k\u00f6k dizininde <code>docker-compose up --build -d<\/code> komutunu \u00e7al\u0131\u015ft\u0131rmas\u0131 yeterli olur. T\u00fcm geli\u015ftirme ortam\u0131 saniyeler i\u00e7inde haz\u0131r hale gelir.<br \/>\n*   <strong>Veritaban\u0131 Entegrasyonu:<\/strong> <code>docker-compose.yml<\/code> dosyas\u0131na ekleyece\u011finiz bir <code>db<\/code> servisi ile uygulaman\u0131z\u0131n veritaban\u0131 ihtiyac\u0131n\u0131 kolayca kar\u015f\u0131layabilirsiniz. Node.js uygulaman\u0131z, <code>db<\/code> servisine <code>mongodb:\/\/db:27017\/my-database<\/code> gibi bir URL ile ba\u011flanabilir. Docker Compose, servisler aras\u0131nda otomatik a\u011f ileti\u015fimi sa\u011flar, bu y\u00fczden <code>db<\/code> servisine ismiyle eri\u015febilirsiniz.<br \/>\n*   <strong>Ortam Tutarl\u0131l\u0131\u011f\u0131:<\/strong> Herkesin ayn\u0131 ortamda \u00e7al\u0131\u015fmas\u0131, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yor&#8221; gibi sorunlar\u0131 ortadan kald\u0131r\u0131r. Bu, hatalar\u0131n daha kolay tespit edilmesini ve \u00e7\u00f6z\u00fclmesini sa\u011flar.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p>Bu rehberde, Node.js uygulaman\u0131z\u0131 Docker Compose kullanarak geli\u015ftirme ortam\u0131 i\u00e7in nas\u0131l konteynerle\u015ftirece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frendiniz. <code>Dockerfile<\/code> ile uygulaman\u0131z i\u00e7in bir imaj olu\u015fturmay\u0131, <code>docker-compose.yml<\/code> ile servislerinizi tan\u0131mlamay\u0131 ve bu servisleri nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131p y\u00f6netece\u011finizi g\u00f6rd\u00fcn\u00fcz. Bu yakla\u015f\u0131m, geli\u015ftirme s\u00fcrecinizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirerek daha verimli ve tutarl\u0131 bir deneyim sunar.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<p><strong>S: <code>docker-compose down<\/code> ile <code>docker-compose down -v<\/code> aras\u0131ndaki fark nedir?<\/strong><br \/>\nC: <code>docker-compose down<\/code> sadece servisleri durdurur ve konteynerleri siler. Volume&#8217;leri (kal\u0131c\u0131 depolama alanlar\u0131n\u0131) silmez. <code>docker-compose down -v<\/code> ise servisleri durdurur, konteynerleri siler ve ayr\u0131ca servislerle ili\u015fkilendirilmi\u015f t\u00fcm volume&#8217;leri de siler. Veritaban\u0131 verileri gibi kal\u0131c\u0131 verilerinizi silmek istemiyorsan\u0131z <code>-v<\/code> bayra\u011f\u0131n\u0131 dikkatli kullanmal\u0131s\u0131n\u0131z.<\/p>\n<p><strong>S: Neden <code>node:lts-alpine<\/code> imaj\u0131n\u0131 kullan\u0131yoruz?<\/strong><br \/>\nC: <code>alpine<\/code> tabanl\u0131 imajlar, standart Debian tabanl\u0131 imajlara g\u00f6re \u00e7ok daha k\u00fc\u00e7\u00fckt\u00fcr. Bu, daha az disk alan\u0131 kaplar, daha h\u0131zl\u0131 indirilir ve daha h\u0131zl\u0131 konteyner olu\u015fturulmas\u0131n\u0131 sa\u011flar. Geli\u015ftirme ve \u00fcretim ortamlar\u0131 i\u00e7in genellikle tercih edilen bir se\u00e7imdir.<\/p>\n<p><strong>S: Ortam de\u011fi\u015fkenlerini nas\u0131l ekleyebilirim?<\/strong><br \/>\nC: <code>docker-compose.yml<\/code> dosyas\u0131ndaki bir servisin alt\u0131na <code>environment:<\/code> b\u00f6l\u00fcm\u00fcn\u00fc ekleyerek ortam de\u011fi\u015fkenlerini tan\u0131mlayabilirsiniz:<\/p>\n<pre><code class=\"language-yaml\">services:\n  app:\n    environment:\n      NODE_ENV: development\n      API_KEY: your_secret_key<\/code><\/pre>\n<p>Veya <code>.env<\/code> dosyas\u0131 kullanarak da ortam de\u011fi\u015fkenlerini y\u00f6netebilirsiniz. Docker Compose, <code>docker-compose.yml<\/code> dosyas\u0131n\u0131n bulundu\u011fu dizindeki <code>.env<\/code> dosyas\u0131n\u0131 otomatik olarak y\u00fckler.<\/p>\n<p><strong>S: Kod de\u011fi\u015fikliklerim konteynerde neden g\u00f6r\u00fcnm\u00fcyor?<\/strong><br \/>\nC: B\u00fcy\u00fck olas\u0131l\u0131kla <code>docker-compose.yml<\/code> dosyan\u0131zdaki <code>volumes:<\/code> e\u015fle\u015ftirmesi do\u011fru yap\u0131lmam\u0131\u015ft\u0131r veya eksiktir. <code>volumes: - .:\/app<\/code> sat\u0131r\u0131n\u0131n do\u011fru oldu\u011fundan ve Node.js uygulaman\u0131z\u0131n (<code>nodemon<\/code> gibi bir ara\u00e7la) dosya de\u011fi\u015fikliklerini dinleyecek \u015fekilde yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olun. <code>npm run dev<\/code> komutunun <code>nodemon<\/code>&#8216;u \u00e7al\u0131\u015ft\u0131rmas\u0131 gerekir.<\/p>\n<p><strong>S: Konteyner i\u00e7indeki uygulamamda nas\u0131l hata ay\u0131klayabilirim (debug)?<\/strong><br \/>\nC: VS Code gibi modern IDE&#8217;ler, Docker konteynerlerine uzaktan ba\u011flanmak i\u00e7in eklentilere sahiptir (\u00f6rn. Remote &#8211; Containers eklentisi). Ayr\u0131ca, Node.js uygulaman\u0131z\u0131 <code>--inspect<\/code> bayra\u011f\u0131 ile ba\u015flat\u0131p, host makinenizden bir Chrome taray\u0131c\u0131 veya IDE&#8217;niz ile ba\u011flanarak hata ay\u0131klayabilirsiniz. <code>Dockerfile<\/code>&#8216;daki <code>CMD<\/code> komutunu <code>CMD [\"node\", \"--inspect=0.0.0.0:9229\", \"index.js\"]<\/code> olarak de\u011fi\u015ftirip, <code>docker-compose.yml<\/code> dosyan\u0131zda 9229 portunu da e\u015flemeniz gerekebilir (<code>- \"9229:9229\"<\/code>).<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme\nModern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde tutarl\u0131l\u0131k, i","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-32498","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>Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme\" \/>\n<meta property=\"og:description\" content=\"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde tutarl\u0131l\u0131k, i\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-22T09:42:17+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=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme\",\"datePublished\":\"2025-10-22T09:42:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/\"},\"wordCount\":1888,\"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\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/\",\"name\":\"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-22T09:42:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme\"}]},{\"@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":"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/","og_locale":"tr_TR","og_type":"article","og_title":"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme","og_description":"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde tutarl\u0131l\u0131k, i","og_url":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-22T09:42:17+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme","datePublished":"2025-10-22T09:42:17+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/"},"wordCount":1888,"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\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/","url":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/","name":"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-22T09:42:17+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-docker-compose-ile-gelistirme-ortami-icin-konteynerlestirme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Node.js Uygulamas\u0131n\u0131 Docker Compose ile Geli\u015ftirme Ortam\u0131 \u0130\u00e7in Konteynerle\u015ftirme"}]},{"@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\/32498","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=32498"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32498\/revisions"}],"predecessor-version":[{"id":32499,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32498\/revisions\/32499"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}