bounera
صفحه اصلیخدماتپایگاه دانشوبلاگدرباره ماتماس با مامشاوره رایگان
ورود به پنل
  1. صفحه اصلی
  2. وبلاگ
  3. بهترین شیوه‌های Dockerfile
بازگشت به وبلاگDevOps

بهترین شیوه‌های نوشتن Dockerfile

تیم فنی بونرا۱۰ فروردین ۱۴۰۴۸ دقیقه مطالعه

Dockerfile فایلی است که دستورات ساخت یک Docker Image را مشخص می‌کند. نوشتن یک Dockerfile بهینه می‌تواند تاثیر زیادی در سرعت بیلد، حجم Image و امنیت داشته باشد. در این مقاله، بهترین شیوه‌های نوشتن Dockerfile را بررسی می‌کنیم.

۱. استفاده از Base Image رسمی و سبک

همیشه از Image‌های رسمی و سبک‌وزن استفاده کنید. نسخه‌های Alpine معمولا بسیار کوچک‌تر هستند.

نادرست
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y nodejs npm

حجم: ~900MB

درست
FROM node:20-alpine

حجم: ~130MB

۲. ترتیب دستورات برای بهینه‌سازی Cache

Docker برای هر دستور یک Layer می‌سازد. دستوراتی که کمتر تغییر می‌کنند را اول بنویسید تا از Cache استفاده شود.

Dockerfile
# اول وابستگی‌ها (کمتر تغییر می‌کند)
COPY package*.json ./
RUN npm ci

# بعد کد اپلیکیشن (بیشتر تغییر می‌کند)
COPY . .
RUN npm run build

۳. استفاده از Multi-stage Builds

با Multi-stage Builds می‌توانید فایل نهایی را بدون ابزارهای بیلد بسازید و حجم را کاهش دهید.

Dockerfile
# Stage 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Stage 2: Production
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/main.js"]

۴. استفاده از .dockerignore

فایل‌های غیرضروری را از Context حذف کنید تا سرعت بیلد افزایش یابد.

.dockerignore
node_modules
npm-debug.log
.git
.env
*.md
Dockerfile
.dockerignore
dist
coverage

۵. اجرا با کاربر غیر-root

برای امنیت بیشتر، اپلیکیشن را با کاربر معمولی اجرا کنید.

Dockerfile
FROM node:20-alpine

# ایجاد کاربر
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

WORKDIR /app
COPY --chown=appuser:appgroup . .

# تغییر به کاربر معمولی
USER appuser

CMD ["node", "app.js"]

هشدار امنیتی

هرگز اطلاعات حساس مانند رمز عبور یا کلیدهای API را در Dockerfile قرار ندهید. از متغیرهای محیطی یا Docker Secrets استفاده کنید.

چک‌لیست نهایی

  • از Base Image سبک استفاده کنید (Alpine)
  • وابستگی‌ها را قبل از کد کپی کنید
  • از Multi-stage Builds استفاده کنید
  • فایل .dockerignore ایجاد کنید
  • با کاربر غیر-root اجرا کنید
  • دستورات RUN را ترکیب کنید
  • از COPY به جای ADD استفاده کنید
  • Image را با اسکنرهای امنیتی بررسی کنید

آماده دیپلوی هستید؟

Docker Image خود را در زیرساخت ابری بونرا دیپلوی کنید.

راهنمای دیپلوی Dockerدرخواست مشاوره
bounera

ارائه‌دهنده خدمات مشاوره و راه‌اندازی زیرساخت ابری برای کسب‌وکارها

خدمات

  • زیرساخت ابری
  • اتوماسیون DevOps
  • مدیریت سرور
  • پشتیبانی ۲۴/۷

شرکت

  • درباره ما
  • تماس با ما
  • خدمات

تماس

  • تهران، جردن، خیابان سعیدی، پلاک ۹۲
  • ۰۲۱-۹۱۹۰۴۲۴۰
  • info@bounera.cloud

© بونرا. تمامی حقوق محفوظ است.