درک Dockerfile: طرح اولیه کانتینرها و تصاویر Docker
معرفی
Docker به ابزاری ضروری برای توسعه دهندگان و متخصصان فناوری اطلاعات در دنیای کانتینرسازی و میکروسرویس تبدیل شده است. در قلب عملکرد Docker، Dockerfile نهفته است، یک راه ساده و در عین حال قدرتمند برای تعریف محیط و دستورالعمل های لازم برای ایجاد تصاویر Docker. این مقاله به پیچیدگیهای Dockerfile میپردازد، ساختار، نحو، و بهترین شیوههای آن را توضیح میدهد تا به شما در تسلط بر ایجاد کانتینر با استفاده از پروژه Node.js به عنوان مثال کمک کند.
Dockerfile چیست؟
Dockerfile یک سند متنی است که شامل تمام دستوراتی است که کاربر می تواند در خط فرمان برای جمع آوری یک تصویر فراخوانی کند. با استفاده از Dockerfile، میتوانید فرآیند ایجاد یک تصویر Docker را خودکار کنید، و اطمینان حاصل کنید که محیط برنامه شما سازگار، قابل تکرار و قابل حمل است.
ساختار پایه یک Dockerfile
یک Dockerfile از یک سری دستورالعمل تشکیل شده است که هر کدام یک لایه در تصویر ایجاد می کنند. در اینجا متداول ترین دستورالعمل های مورد استفاده آمده است:
از جانب: تصویر پایه را برای استفاده از تصویر Docker مشخص می کند. هر Dockerfile باید با یک شروع شود
FROM
دستورالعملFROM node:14
اجرا کن: دستوری را در کانتینر اجرا می کند. معمولاً برای نصب بسته ها استفاده می شود.
RUN npm install
کپی 🀄: فایل ها یا دایرکتوری ها را از دستگاه میزبان در کانتینر کپی می کند.
COPY . /app
اضافه کردن: شبیه به
COPY
، اما از استخراج فایل های TAR و دانلود URL ها نیز پشتیبانی می کند.ADD . /app
WORKDIR: دایرکتوری کاری را برای دستورالعمل های بعدی تنظیم می کند.
WORKDIR /app
CMD: دستور پیش فرض را برای اجرا در هنگام شروع یک کانتینر مشخص می کند. فقط یکی می تواند باشد
CMD
دستورالعمل در Dockerfile اگر چندتایی باشدCMD
دستورالعمل ها مشخص شده است، فقط آخرین مورد اعمال می شود.CMD ["node", "app.js"]
نقطه ورود: یک کانتینر را برای اجرا به عنوان یک فایل اجرایی پیکربندی می کند. شبیه به
CMD
اما هنگام اجرای کانتینر با آرگومان های اضافی خط فرمان نمی توان آن را لغو کرد.ENTRYPOINT ["node", "app.js"]
ENV: متغیرهای محیط را تنظیم می کند.
ENV NODE_ENV=production
در معرض گذاشتن: به Docker اطلاع می دهد که کانتینر در زمان اجرا به پورت های شبکه مشخص شده گوش می دهد.
EXPOSE 3000
جلد: یک نقطه اتصال با مسیر مشخص شده ایجاد می کند و آن را به عنوان نگهدارنده حجم های نصب شده خارجی از میزبان بومی یا سایر کانتینرها علامت گذاری می کند.
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
به حداقل رساندن لایه ها: هر دستورالعمل در Dockerfile یک لایه ایجاد می کند. ترکیب دستورات با استفاده از
&&
و از ساخت های چند مرحله ای برای کوچک نگه داشتن اندازه تصویر استفاده کنید.RUN npm install
ذخیره سازی اهرمی: داکر لایه ها را ذخیره می کند تا سرعت ساخت را افزایش دهد. دستورالعملهایی را که کمتر تغییر میکنند در بالای Dockerfile قرار دهید تا از این ذخیرهسازی استفاده کنید.
از .dockerignore استفاده کنید: شبیه به
.gitignore
، از کپی شدن فایل ها و دایرکتوری های غیر ضروری در تصویر جلوگیری می کند و باعث کاهش حجم تصویر و زمان ساخت می شود..git node_modules
شیوه های امنیتی: از اجرا به عنوان کاربر ریشه در داخل ظرف خودداری کنید. استفاده کنید
USER
دستورالعمل تغییر به یک کاربر غیر ریشهRUN useradd -m myuser USER myuser
سند: از نظرات برای توضیح هدف هر دستورالعمل استفاده کنید تا درک و نگهداری Dockerfile آسانتر شود.
# Install necessary packages RUN apt-get update && apt-get install -y package-name
نتیجه
Dockerfiles سنگ بنای فناوری کانتینرسازی Docker است. آنها راهی ساده برای تعریف محیط و دستورالعملها برای ساخت تصاویر Docker، تضمین سازگاری، تکرارپذیری و قابل حمل بودن ارائه میدهند. با تسلط بر نحو Dockerfile و بهترین شیوه ها، می توانید فرآیندهای توسعه و استقرار خود را ساده کنید و در نهایت قابلیت اطمینان و عملکرد برنامه خود را افزایش دهید. چه در Docker تازه کار باشید و چه به دنبال بهبود مهارتهای خود هستید، درک Dockerfiles یک گام اساسی در سفر شما به سمت کانتینریسازی کارآمد است.