Changes: ✅ Dockerfile now uses base image ✅ Helper script to build base locally ✅ Complete documentation Base image contains heavy dependencies: - Python 3.11 - Node.js 20 - bun, npm - Build tools (gcc, g++, make) Build times: • First time: 10 minutes (build base) • After that: 3 minutes (code only) 🚀 To build base image: ./build-base-local.sh Then normal builds are FAST!
4.2 KiB
4.2 KiB
Base Image Management
چرا Base Image؟
Base image شامل تمام dependencies سنگین است که:
- ✅ فقط یک بار build میشود
- ✅ هر بار که کد تغییر میکند، دوباره download نمیشود
- ✅ Build time را از 8-10 دقیقه به 3-4 دقیقه کاهش میدهد
- ✅ قابل استفاده مجدد در چند پروژه
محتویات Base Image
Base image شامل موارد زیر است:
FROM python:3.11-slim
# Build Tools
- gcc, g++, make
- curl, ca-certificates
- git, unzip
# Runtime
- Python 3.11
- Node.js 20.x
- npm (latest)
- bun (latest)
ساخت Base Image
روش 1: Local (توصیه میشود برای اولین بار)
# Run the helper script
./build-base-local.sh
این script:
- از شما username/password Harbor میخواهد
- به registry login میکند
- Base image را build میکند
- به Harbor push میکند
زمان: ~8-10 دقیقه (اولین بار)
روش 2: در Woodpecker CI
# Trigger pipeline manually in Woodpecker UI
# یا از طریق git:
git commit --allow-empty -m "build: rebuild base image"
git push
Base image فقط در این حالتها rebuild میشود:
docker/Dockerfile.baseتغییر کرد.woodpecker.ymlتغییر کرد- Manual trigger
استفاده از Base Image
Dockerfile به صورت خودکار از base image استفاده میکند:
ARG BASE_IMAGE=hub.peikarband.ir/peikarband/base:latest
FROM ${BASE_IMAGE} AS builder
مدیریت Versions
Tags:
latest: آخرین نسخه (default)python3.11-node20: نسخه specific
تغییر Version:
اگر میخواهید Python یا Node.js version تغییر کند:
-
Edit
docker/Dockerfile.base:ARG PYTHON_VERSION=3.12 # تغییر ARG NODE_VERSION=22 # تغییر -
Build base image:
./build-base-local.sh -
Update app Dockerfile:
ARG BASE_IMAGE=hub.peikarband.ir/peikarband/base:python3.12-node22
Troubleshooting
مشکل: Base image not found
# Build locally:
./build-base-local.sh
# یا check if exists:
docker pull hub.peikarband.ir/peikarband/base:latest
مشکل: Build fails in CI
# Check Woodpecker secrets:
- HARBOR_USERNAME
- HARBOR_PASSWORD
# Test locally:
docker login hub.peikarband.ir
مشکل: Base image outdated
# Force rebuild:
git commit --allow-empty -m "build: rebuild base image"
git push
# یا locally:
./build-base-local.sh
Build Times
| Scenario | With Base | Without Base |
|---|---|---|
| First build | 10 min | 10 min |
| Code change only | 3 min ✅ | 10 min ❌ |
| Dependency change | 3 min ✅ | 10 min ❌ |
| Base change | 13 min | 10 min |
Best Practices
-
Build base image locally اولین بار
./build-base-local.sh -
فقط وقتی dependencies تغییر کرد rebuild کنید
- Python packages
- Node.js version
- System tools
-
از versioned tags استفاده کنید در production
ARG BASE_IMAGE=hub.peikarband.ir/peikarband/base:python3.11-node20 -
Base image را در Harbor نگه دارید
- Private registry
- Version control
- Team access
مثال: Workflow کامل
# 1. Clone project
git clone <repo>
cd peikarband
# 2. Build base image (فقط یک بار)
./build-base-local.sh
# ⏱️ ~8-10 دقیقه
# 3. Build app (بعدها)
make docker-build
# ⏱️ ~3 دقیقه ✅
# 4. تغییر کد
vim peikarband/src/...
# 5. Build again (سریع!)
make docker-build
# ⏱️ ~3 دقیقه ✅ (dependencies از cache)
خلاصه
✅ مزایا:
- Build سریعتر (3 دقیقه vs 10 دقیقه)
- بهینهسازی cache
- قابل استفاده مجدد
❌ نیاز به:
- Build اولیه (یک بار، 10 دقیقه)
- نگهداری در registry
- Rebuild وقتی dependencies تغییر کند
نتیجه: برای development و production بسیار مفید است! 🚀