با داکر پروداکشن را به شکلهایی شکستم که حتی خجالت میکشم تعریف کنم. اینها دوازدهتای بدترینشان است، بر اساس میزان دردی که کشیدم.
۱. نپینکردن ایمیج پایه
FROM python:latest یک بمب ساعتی است. پین کن:
dockerfile
FROM python:3.12-slim
۲. اجرا بهعنوان root
dockerfile
RUN useradd -m app
USER app
۳. نادیدهگرفتن زامبیپروسهها
بدون init درست، پروسههای یتیم تلنبار میشوند:
dockerfile
CMD ["tini", "-g", "--", "uvicorn", "app.main:app", "--host", "0.0.0.0"]
۴. کپیکردن کل build context
dockerfile
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
لایهها را هوشمند کش کن؛ وابستگیها جدا از کد.
۵. نداشتن healthcheck
dockerfile
HEALTHCHECK CMD curl -f http://localhost:8000/health || exit 1
۶. لاگ به stdout — نه به فایل
docker logs فقط stdout را میبیند.
بقیه به اختصار
- مانتکردن مسیرهایی که مال تو نیستند.
- نادیدهگرفتن حجم ایمیج (هر جا شد distroless).
- نزدن
restart: unless-stopped. - سکرت در build args (در history میماند).
- یک کانتینر برای هر کار.
- ردشدن از
docker compose configدر CI.
داکر پروداکشن ۲۰٪ YAML است و ۸۰٪ انضباط. اشتباههای بالا همهشان انضباطاند.