برنامه نویسی

درک Dockerfile: طرح اولیه کانتینرها و تصاویر Docker

معرفی

Docker به ابزاری ضروری برای توسعه دهندگان و متخصصان فناوری اطلاعات در دنیای کانتینرسازی و میکروسرویس تبدیل شده است. در قلب عملکرد Docker، Dockerfile نهفته است، یک راه ساده و در عین حال قدرتمند برای تعریف محیط و دستورالعمل های لازم برای ایجاد تصاویر Docker. این مقاله به پیچیدگی‌های Dockerfile می‌پردازد، ساختار، نحو، و بهترین شیوه‌های آن را توضیح می‌دهد تا به شما در تسلط بر ایجاد کانتینر با استفاده از پروژه Node.js به عنوان مثال کمک کند.

Dockerfile چیست؟

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

ساختار پایه یک Dockerfile

یک Dockerfile از یک سری دستورالعمل تشکیل شده است که هر کدام یک لایه در تصویر ایجاد می کنند. در اینجا متداول ترین دستورالعمل های مورد استفاده آمده است:

  1. از جانب: تصویر پایه را برای استفاده از تصویر Docker مشخص می کند. هر Dockerfile باید با یک شروع شود FROM دستورالعمل

    FROM node:14
    
  2. اجرا کن: دستوری را در کانتینر اجرا می کند. معمولاً برای نصب بسته ها استفاده می شود.

    RUN npm install
    
  3. کپی 🀄: فایل ها یا دایرکتوری ها را از دستگاه میزبان در کانتینر کپی می کند.

    COPY . /app
    
  4. اضافه کردن: شبیه به COPY، اما از استخراج فایل های TAR و دانلود URL ها نیز پشتیبانی می کند.

    ADD . /app
    
  5. WORKDIR: دایرکتوری کاری را برای دستورالعمل های بعدی تنظیم می کند.

    WORKDIR /app
    
  6. CMD: دستور پیش فرض را برای اجرا در هنگام شروع یک کانتینر مشخص می کند. فقط یکی می تواند باشد CMD دستورالعمل در Dockerfile اگر چندتایی باشد CMD دستورالعمل ها مشخص شده است، فقط آخرین مورد اعمال می شود.

    CMD ["node", "app.js"]
    
  7. نقطه ورود: یک کانتینر را برای اجرا به عنوان یک فایل اجرایی پیکربندی می کند. شبیه به CMD اما هنگام اجرای کانتینر با آرگومان های اضافی خط فرمان نمی توان آن را لغو کرد.

    ENTRYPOINT ["node", "app.js"]
    
  8. ENV: متغیرهای محیط را تنظیم می کند.

    ENV NODE_ENV=production
    
  9. در معرض گذاشتن: به Docker اطلاع می دهد که کانتینر در زمان اجرا به پورت های شبکه مشخص شده گوش می دهد.

    EXPOSE 3000
    
  10. جلد: یک نقطه اتصال با مسیر مشخص شده ایجاد می کند و آن را به عنوان نگهدارنده حجم های نصب شده خارجی از میزبان بومی یا سایر کانتینرها علامت گذاری می کند.

    VOLUME ["/data"]
    

نمونه Dockerfile

در اینجا یک نمونه Dockerfile برای یک برنامه ساده Node.js آورده شده است:

# Use the official Node.js image from the Docker Hub
FROM node:14

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in package.json
RUN npm install

# Make port 3000 available to the world outside this container
EXPOSE 3000

# Define environment variable
ENV NODE_ENV=production

# Run app.js when the container launches
CMD ["node", "app.js"]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بهترین روش ها برای نوشتن Dockerfiles

  1. به حداقل رساندن لایه ها: هر دستورالعمل در Dockerfile یک لایه ایجاد می کند. ترکیب دستورات با استفاده از && و از ساخت های چند مرحله ای برای کوچک نگه داشتن اندازه تصویر استفاده کنید.

    RUN npm install
    
  2. ذخیره سازی اهرمی: داکر لایه ها را ذخیره می کند تا سرعت ساخت را افزایش دهد. دستورالعمل‌هایی را که کمتر تغییر می‌کنند در بالای Dockerfile قرار دهید تا از این ذخیره‌سازی استفاده کنید.

  3. از .dockerignore استفاده کنید: شبیه به .gitignore، از کپی شدن فایل ها و دایرکتوری های غیر ضروری در تصویر جلوگیری می کند و باعث کاهش حجم تصویر و زمان ساخت می شود.

    .git
    node_modules
    
  4. شیوه های امنیتی: از اجرا به عنوان کاربر ریشه در داخل ظرف خودداری کنید. استفاده کنید USER دستورالعمل تغییر به یک کاربر غیر ریشه

    RUN useradd -m myuser
    USER myuser
    
  5. سند: از نظرات برای توضیح هدف هر دستورالعمل استفاده کنید تا درک و نگهداری Dockerfile آسانتر شود.

    # Install necessary packages
    RUN apt-get update && apt-get install -y package-name
    

نتیجه

Dockerfiles سنگ بنای فناوری کانتینرسازی Docker است. آنها راهی ساده برای تعریف محیط و دستورالعمل‌ها برای ساخت تصاویر Docker، تضمین سازگاری، تکرارپذیری و قابل حمل بودن ارائه می‌دهند. با تسلط بر نحو Dockerfile و بهترین شیوه ها، می توانید فرآیندهای توسعه و استقرار خود را ساده کنید و در نهایت قابلیت اطمینان و عملکرد برنامه خود را افزایش دهید. چه در Docker تازه کار باشید و چه به دنبال بهبود مهارت‌های خود هستید، درک Dockerfiles یک گام اساسی در سفر شما به سمت کانتینری‌سازی کارآمد است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا