Docker Image ve Container¶
Image nasıl oluşturuluyor¶
Frontend ve backend ayrı imajlardır, ikisi de docker-compose.yml
içindeki build: bloklarından derlenir; harici bir registry'den çekilmez.
| İmaj | Dockerfile | Build context |
|---|---|---|
| Backend | iqvflex/backend/Dockerfile |
./iqvflex/backend |
| Frontend | dashboard/Dockerfile |
./dashboard |
Backend imajı¶
node:22-alpine tabanlı, çok aşamalı (base → deps → runtime) build:
depsaşamasında yalnızcapackage.json/package-lock.jsonkopyalanır,npm ci --omit=devile üretim bağımlılıkları kurulur (kaynak değişince bu katman yeniden kullanılır — hızlı rebuild).runtimeaşamasındanode_modules,app.js,server.js,src/kopyalanır; container root olarak çalışmaz (USER node).EXPOSE 3001.- Container içi
HEALTHCHECK, install/update betikleriyle aynı mantığı kullanır: gerçekHTTP 200+data.status === 'ok'(/health).
Frontend imajı¶
İki aşamalı: node:22-alpine (build) ile derleme, nginx:1.27-alpine
(runtime) ile sunum. Çalışma imajında Node veya kaynak kod bulunmaz
(küçük ve dar yüzeyli imaj).
buildaşamasındanpm ci(devDependencies dahil —vite/typescriptderleme için gerekli),VITE_API_BASE_URLbuild-arg'ı (Docker'da boş) ilenpm run build(tsc && vite build) çalışır.runtimeaşamasında yalnızcadist/çıktısı,nginx.confveproxy_params.confkopyalanır.EXPOSE 80.- Container içi
HEALTHCHECK:wgetilehttp://127.0.0.1/__nginx_health(backend'e vekillenmeyen, nginx'in kendi ucu).
Production image yaklaşımı¶
Aynı imajlar hem geliştirme hem üretimde kullanılır; üretime özgü
sıkılaştırma (salt okunur dosya sistemi, port kapatma, kaynak sınırı)
imaj seviyesinde değil, docker-compose.prod.yml override'ında
uygulanır (bkz. Docker Mimarisi).
Image tag / versiyon mantığı¶
image: ${COMPOSE_PROJECT_NAME:-iqvflex}-backend:${VERSION:-latest}
image: ${COMPOSE_PROJECT_NAME:-iqvflex}-frontend:${VERSION:-latest}
VERSION ortam değişkeni doldurulmazsa imajlar latest etiketiyle
derlenir. install.sh / update.sh, depo kökündeki VERSION dosyasını
(canonical SemVer sürüm, örn. 1.0.0) okuyup bu değeri VERSION ortam
değişkeni olarak kullanır — imaj etiketi ile depo sürümü bu şekilde
eşleşir. dashboard/package.json ve iqvflex/backend/package.json
içindeki sürümler bileşen düzeyindedir, imaj etiketinde kullanılmaz.