با داکر پروداکشن را به شکل‌هایی شکستم که حتی خجالت می‌کشم تعریف کنم. این‌ها دوازده‌تای بدترین‌شان است، بر اساس میزان دردی که کشیدم.

۱. نپین‌کردن ایمیج پایه

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 را می‌بیند.

بقیه به اختصار

  1. مانت‌کردن مسیرهایی که مال تو نیستند.
  2. نادیده‌گرفتن حجم ایمیج (هر جا شد distroless).
  3. نزدن restart: unless-stopped.
  4. سکرت در build args (در history می‌ماند).
  5. یک کانتینر برای هر کار.
  6. ردشدن از docker compose config در CI.

داکر پروداکشن ۲۰٪ YAML است و ۸۰٪ انضباط. اشتباه‌های بالا همه‌شان انضباط‌اند.