آموزش کامل Dockerfile؛ از مقدمه تا پیشرفته

آموزش Dockerfile

وقتی توسعه‌دهندگان نرم‌افزار روی پروژه‌های خود کار می‌کنند، یکی از دغدغه‌های بزرگ آن‌ها این است که برنامه‌ها در هر محیطی، از توسعه تا تولید، بدون مشکل اجرا شوند. اینجا است که داکر (Docker) به کمک می‌آید. داکر این امکان را می‌دهد که برنامه‌ها و همه وابستگی‌هایشان در قالب بسته‌های کوچکی به نام کانتینر (Container) اجرا شوند که به این فرایند Containerization گفته می‌شود و به لطف داکر فایل (Dockerfile)، این کار به‌ شکل کاملا خودکار و ساده انجام می‌شود.

Dockerfile یک فایل متنی است که به‌عنوان یک دستورالعمل عمل می‌کند تا یک تصویر (image) داکر را از ابتدا تا انتها بسازد. این فایل شامل یک سری دستورات داکر است که به این سرویس می‌گوید چگونه یک تصویر را باید ساخت. با استفاده از Dockerfile، ما می‌توانیم به‌طور خودکار تصویرهایی را تولید کنیم که شامل برنامه‌ها، کتابخانه‌ها و تنظیمات مورد نیاز ما باشند. به این ترتیب نیازی به ساخت دستی image های نیست و فرایند ساخت خودکار و یکپارچه می‌شود. Dockerfile یکی از مهمترین ویژگی‌های داکر است که باعث سهولت و سرعت در تولید و انتقال تصاویر داکر می‌شود.

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

داکر فایل چیست؟

داکر فایل یک فایل متنی ساده است که حاوی دستورات لازم برای ساخت یک ایمیج (Image) داکر است. این فایل به توسعه‌دهندگان اجازه می‌دهد که تمامی مراحل نصب و پیکربندی نرم‌افزار را به صورت اتوماتیک و بهینه‌ شده در داخل کانتینر تعریف کنند. با استفاده از داکر فایل، می‌توان محیطی کاملا مشابه برای توسعه، تست و تولید ایجاد کرد که بدون نگرانی از ناسازگاری‌ها روی هر سیستمی که از داکر پشتیبانی می‌کند، قابل اجرا است.

اگر به تازگی با داکر آشنا شده اید و به دنبال این هستید که این سرویس را بیشتر بشناسید، حتما مطلب داکر چیست را مطالعه کنید.

چرا Dockerfile استفاده می‌کنیم؟

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

  • بازتولیدپذیری: با استفاده از Dockerfile، می‌توانیم با اطمینان تصویرهای داکر را در هر محیطی با دقت و یکسانی بسازیم.
  • مدیریت ورژن: هر تغییری که در Dockerfile ایجاد می‌شود، قابل رصد و پیگیری است. این امکان را می‌دهد که تاریخچه تغییرات، بهبودها و به روز رسانی‌ها را مشاهده کنیم.
  • قابلیت حمل: با Dockerfile، تصویرهایی که می‌سازید، قابل حمل و نقل به سایر سیستم‌ها یا محیط‌های مختلف می‌شوند.
  • خود مستندسازی: Dockerfile به صورت خودکار فرآیند ساخت تصویر را مستند می‌کند، که این به توسعه‌دهندگان کمک می‌کند تا فهم بهتری از ساخت و ساز تصویر داشته باشند.
  • قابلیت اشتراک‌گذاری: اگر بخواهید با یک تیم یا جامعه کار کنید، می‌توانید Dockerfile خود را به اشتراک بگذارید تا همه از یک تصویر استاندارد بهره‌برداری کنند.
  • خودکارسازی: با ادغام Dockerfile در فرآیندهای CI/CD، می‌توانید فرآیند ساخت و توزیع تصویرها را به طور خودکار و بدون دخالت انسانی انجام دهید.
  • ایجاد ایمیج‌های سفارشی: توسعه‌دهندگان می‌توانند ایمیج‌های مخصوص به خود را که شامل تمامی تنظیمات و وابستگی‌های نرم‌افزار است، ایجاد کنند.
  • تسهیل استقرار نرم‌افزار: با استفاده از داکر فایل، استقرار نرم‌افزارها در محیط‌های مختلف به راحتی امکان‌پذیر است، چرا که تمام مراحل نصب و پیکربندی در این فایل مشخص می‌شود.
  • کاهش خطاهای انسانی: با اتوماتیک کردن فرایند ساخت ایمیج، احتمال بروز خطاهای انسانی در حین نصب و تنظیمات کاهش می‌یابد.

با استفاده از Dockerfile، فرآیند توسعه و توزیع برنامه‌ها سریع‌تر، قابل مدیریت‌تر و قابل پیش‌بینی می‌شود.

چطور می‌توانید پروژه‌های خود را با داکر سریع‌تر و بهینه‌تر اجرا کنید؟ پاسخ تمام سوالات خود درباره این تکنولوژی را در مطلب داکر چیست خواهید یافت. برای یادگیری بیشتر، همین حالا کلیک کنید!

ساختار Dockerfile

ساخت dockerfile

Dockerfile یک فایل متنی است که شامل دستوراتی به زبان ساده می‌شود که هر یک از این دستورات در یک خط جداگانه قرار می‌گیرد. این دستورات به داکر می‌گویند چگونه یک تصویر (image) را بسازد. در زیر به توضیح مفصلی از دستورات مهم Dockerfile می‌پردازیم:

  • FROM: این دستور اولین دستور در اکثر داکرفایل‌ ها است و مشخص می‌کند که از چه تصویر پایه‌ای (base image) باید استفاده شود. به عنوان مثال، اگر بخواهید یک تصویر بر پایه‌ی Ubuntu بسازید، از FROM ubuntu:latest استفاده می‌کنید.
  • RUN: با استفاده از این دستور، می‌توانید دستورات مختلفی را در زمان ساخت تصویر اجرا کنید. به عنوان مثال، برای نصب یک بسته می‌توانید از RUN apt-get install -y nginx استفاده کنید.
  • COPY: این دستور فایل‌ها یا دایرکتوری‌ها را از سیستم میزبان به تصویر داکر کپی می‌کند. به عنوان مثال، COPY ./app /app فایل‌ها و دایرکتوری‌های موجود در پوشه‌ی app سیستم میزبان را به پوشه‌ی /app در تصویر می‌برد.
  • CMD: این دستور دستور پیش‌فرضی را مشخص می‌کند که هنگامی که یک کانتینر از تصویر ایجاد شده اجرا می‌شود، باید اجرا شود. به عنوان مثال، CMD [“nginx”, “-g”, “daemon off;”].
  • ENV: با استفاده از این دستور، می‌توانید متغیرهای محیطی را در تصویر تنظیم کنید. به عنوان مثال، ENV MY_VARIABLE=value.
  • EXPOSE: این دستور مشخص می‌کند که چه پورت‌هایی باید برای ارتباط با کانتینر در دسترس باشند. به عنوان مثال، اگر یک وب‌سرور روی پورت 80 اجرا شود، با استفاده از EXPOSE 80 این پورت را باز می‌کنید.
  • WORKDIR: تنظیم دایرکتوری کاری در داخل کانتینر.

اگر به دنبال یک آموزش خوب برای کار با داکر هستید، بخش آموزش داکر دقیقاً همان چیزی است که نیاز دارید. تمام مراحل یادگیری به زبان ساده توضیح داده شده است. همین حالا بخوانید!

پیش‌نیازها برای شروع کار با داکر فایل

  • نصب داکر: شما می‌توانید نرم‌افزار داکر را که توسط Docker Inc توسعه یافته، از سایت رسمی دانلود کنید و دستورالعمل‌های مربوط به سیستم‌عامل خود را دنبال کنید. 
  • آشنایی با خط فرمان: کار با خط فرمان و یک ویرایشگر متنی در طول این فرآیند به شما کمک می‌کند تا دستورات داکر مورد نیاز را در طول ساخت و مدیریت داکر فایل به‌صورت مستقیم و کارآمد اجرا کنید.
  • ایجاد حساب در سرویس‌های ابری (اختیاری): در صورتی که قصد استفاده از مثال‌های مربوط به استقرار ابری را دارید، داشتن حساب در پلتفرم‌هایی مانند AWS مفید خواهد بود.

نمونه Dockerfile

یک Dockerfile ساده و کاربردی برای یک پروژه پایتون به شرح زیر است:

FROM ubuntu:latest 

RUN apt-get update && apt-get install -y  

  python3

  python3-pip

COPY . /app

RUN pip3 install -r /app/requirements.txt

CMD [ “python3”, “/app/app.py” ]

مراحل ساخت داکر فایل از صفر

ساخت داکر فایل در یک نگاه

برای ساخت داکر فایل از ابتدا، مراحل زیر را دنبال کنید:

مرحله 1: برای شروع یک فایل جدید با نام Dockerfile در دایرکتوری اصلی پروژه خود ایجاد کنید. دقت کنید که این فایل نباید پسوند داشته باشد (مثلا .txt). این فایل حاوی دستورالعمل‌هایی است که داکر از آن برای ساخت ایمیج استفاده می‌کند.

مرحله 2: تعیین ایمیج پایه دستور FROM پایه‌ای‌ترین ایمیج را برای ساخت کانتینر شما تعیین می‌کند. این معمولا اولین دستور در داکر فایل است و می‌توانید یک ایمیج پایه از مخازنی مانند Docker Hub انتخاب کنید. به عنوان مثال:

FROM ubuntu:latest

این دستور می‌گوید از آخرین نسخه اوبونتو به عنوان پایه استفاده کنید.

مرحله 3: تنظیم دایرکتوری کاری (working directory) با استفاده از دستور WORKDIR، دایرکتوری کاری (working directory) را در داخل کانتینر تنظیم کنید. این دایرکتوری محل اجرای دستورات بعدی (subsequent commands) خواهد بود. برای مثال، اگر شما بخواهید تمامی دستورات بعدی در مسیر /app اجرا شوند، می‌توانید از دستور زیر استفاده کنید:

WORKDIR /app

مرحله 4: کپی کردن فایل‌ها دستور COPY فایل‌ها، را از ماشین محلی شما به فایل‌سیستم کانتینر کپی می‌کند. به عنوان مثال:

COPY . .

این دستور تمام فایل‌ها و دایرکتوری‌های موجود در دایرکتوری فعلی شما را به دایرکتوری فعلی کانتینر که به عنوان /app تنظیم شده است، کپی می‌کند.

مرحله 5: برای اجرای دستورات لازم در زمان ساخت ایمیج برای نصب نرم‌افزارها و بسته‌های مورد نیاز در کانتینر، از دستور RUN استفاده می‌شود. این دستور، بسته‌های مورد نیاز شما را در زمان ساخت ایمیج نصب می‌کند. برای مثال، برای به‌روز کردن لیست بسته‌ها و نصب Python 3 و Pip، می‌توانید از دستور زیر استفاده کنید:

RUN apt-get update && apt-get install -y python3 python3-pip

این دستور باعث می‌شود که Python 3 و pip در محیط کانتینر نصب شوند و آماده استفاده باشند.

مرحله 6: تنظیم متغیرهای محیطی دستور ENV متغیرهای محیطی را در داخل ایمیج تنظیم می‌کند. این متغیرها می‌توانند برای پیکربندی برنامه یا ارائه اطلاعات به فرآیندهای در حال اجرا استفاده شوند. برای مثال:

ENV FLASK_APP=app.py

این دستور متغیر محیطی FLASK_APP را تنظیم می‌کند که توسط فریم‌ورک وب Flask برای یافتن فایل اصلی برنامه استفاده می‌شود.

مرحله 7: نمایش پورت‌ها دستور EXPOSE به داکر اطلاع می‌دهد که کانتینر در زمان اجرا به یک پورت مشخص گوش می‌دهد. این دستور برای مستندسازی و ابزارهایی که به طور خودکار پورت‌ها را پیکربندی می‌کنند مفید است. برای مثال:

EXPOSE 5000

این دستور اعلام می‌کند که کانتینر به پورت 5000 گوش می‌دهد.

مرحله 8: دستور CMD مشخص می‌کند که در هنگام اجرای کانتینر چه دستوری باید اجرا شود. این دستور هدف و عملکرد اصلی کانتینر را تعریف می‌کند. تنها یک دستور CMD می‌تواند در داکر فایل وجود داشته باشد. به عنوان مثال:

CMD [python3, app.py]

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

  1. ایجاد یک فایل جدید با نام داکر فایل: در دایرکتوری پروژه خود، یک فایل متنی با نام داکر فایل ایجاد کنید.
  2. انتخاب یک پایه (Base Image): در اولین خط داکر فایل، باید یک ایمیج پایه را مشخص کنید. به عنوان مثال:

FROM ubuntu:latest

این خط تعیین می‌کند که ایمیج شما بر اساس نسخه آخر اوبونتو ساخته شود.

  1. اضافه کردن دستورات نصب و تنظیمات: در این بخش، دستورات مورد نیاز برای نصب نرم‌افزارها و انجام تنظیمات را اضافه می‌کنید. به عنوان مثال:

RUN apt-get update && apt-get install -y nginx

این دستور، بسته nginx را نصب می‌کند.

  1. کپی کردن فایل‌ها به داخل کانتینر: اگر نیاز دارید فایل‌های پروژه خود را به داخل کانتینر کپی کنید، از دستور COPY استفاده کنید:

COPY . /var/www/html

  1. تعیین دستور اجرای نهایی: در نهایت، باید مشخص کنید که کانتینر پس از اجرا چه کاری انجام دهد. برای مثال:

CMD [nginx, -g, daemon off;]

این دستور تعیین می‌کند که پس از راه‌اندازی کانتینر، سرویس nginx شروع به کار کند.

بهینه‌سازی Dockerfile

بهینه‌سازی dockerfile

برای ایجاد تصویرهای داکر کوچک‌تر و کارآمدتر، می‌توانید از راهکارهای زیر استفاده کنید:

استفاده از تصویرهای کوچک: تصویرهایی مانند Alpine به دلیل اندازه کوچک و حجم کم، برای بسیاری از پروژه‌ها مناسب هستند.

FROM alpine:latest

حذف layerهای غیرضروری: هر دستور در Dockerfile یک layer جدید ایجاد می‌کند. با کم کردن تعداد دستورات، تعداد layerها کم می‌شود و تصویر نهایی سبک‌تر می‌شود.

عدم نسخه‌برداری از فایل‌های غیرضروری: فقط فایل‌ها و دایرکتوری‌هایی که واقعاً نیاز دارید را به تصویر اضافه کنید. از .dockerignore برای نادیده گرفتن فایل‌های غیرضروری استفاده کنید.

استفاده از دستورات چندگانه RUN: به جای استفاده از چندین دستور RUN می‌توانید آن‌ها را با && به یکدیگر وصل کنید.

Dockerfile

Copy code

RUN apt-get update && apt-get install -y nginx

استفاده از دستورات بدون cache: برخی دستورات پایه داکر مانند apt-get امکان استفاده از گزینه –no-cache را دارند تا از ذخیره‌سازی اطلاعات موقتی جلوگیری کنند.

اگر به دنبال آموزش دقیق و گام به گام برای نصب کردن و راه اندازی داکر هستید، مطلب نصب داکر را از دست ندهید. در این مطلب تمامی مراحل با جزئیات آموزش داده شده اند.

اشتراک‌گذاری Dockerfile

  • بارگذاری در مخازن عمومی: برای اشتراک‌گذاری Dockerfile، می‌توانید آن را در مخازن عمومی مانند GitHub یا Docker Hub بارگذاری کنید.
  • استفاده توسط دیگران: با کلون کردن مخزن یا دانلود مستقیم، دیگران می‌توانند داکرفایل شما را دریافت کرده و بر اساس آن تصویر مورد نظر خود را بسازند.

ساخت تصویر (Image) از Dockerfile

ساخت تصویر در Dockerfile

برای تبدیل Dockerfile به یک تصویر داکر (image)، از دستور docker build استفاده می‌کنیم.

 به شکل زیر:

docker build -t myimage .

پارامتر -t به ما امکان می‌دهد تا به تصویری که قرار است ساخته شود، نام مشخصی بدهیم. در این مثال، نام تصویر “myimage” است.

نقطه (.) در انتهای دستور، مسیر یا محلی است که داکرفایل قرار دارد. در اینجا، نقطه به معنی دایرکتوری فعلی است.

اجرای کانتینر (Container) از تصویر (Image)

پس از ساخت تصویر، می‌توانیم یک کانتینر از آن اجرا کنیم با استفاده از دستور docker run. به شکل زیر:

docker run -dp 80:80 myimage

-d: این پارامتر کانتینر را در حالت پس‌زمینه (detached mode) اجرا می‌کند، یعنی کانتینر به صورت پس‌زمینه و بدون متوقف شدن اجرا می‌شود.

-p 80:80: با استفاده از این پارامتر، پورت 80 کانتینر به پورت 80 میزبان (هاست سیستم) متصل می‌شود.

myimage: نام تصویری است که قبلاً با دستور docker build ساخته‌ایم.

با اجرای این دستور، یک کانتینر جدید از تصویر «myimage» ایجاد و اجرا می‌شود و پورت 80 آن به پورت 80 سیستم میزبان متصل می‌شود.

جمع‌ بندی

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

سوالات متداول

داکر فایل چیست و چه کاربردی دارد؟

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

چگونه یک داکر فایل ایجاد کنیم؟

برای ایجاد یک داکر فایل، یک فایل متنی با نام داکر فایل در دایرکتوری پروژه ایجاد کنید و دستورات لازم برای ساخت ایمیج را در آن بنویسید. اولین دستور معمولا تعیین یک ایمیج پایه با استفاده از FROM است.

تفاوت بین دستورهای CMD و ENTRYPOINT در داکر فایل  چیست؟

هر دو دستور برای تعیین دستوری که هنگام اجرای کانتینر اجرا می‌شود، استفاده می‌شوند. CMD می‌تواند توسط کاربر هنگام اجرای کانتینر تغییر یابد، اما ENTRYPOINT قابل تغییر نیست و به عنوان دستور اصلی کانتینر عمل می‌کند.

چگونه می‌توان پورت‌ها را در داکر فایل  تعریف کرد؟

از دستور EXPOSE برای مشخص کردن پورت‌هایی که کانتینر در زمان اجرا به آنها گوش می‌دهد، استفاده کنید. این دستور به داکر کمک می‌کند تا پورت‌های مناسب را برای ارتباط با کانتینر تنظیم کند.

RUN و CMD چه تفاوتی دارند؟

دستور RUN برای اجرای دستورات در زمان ساخت ایمیج استفاده می‌شود و نتایج آن به عنوان بخشی از ایمیج ذخیره می‌شود. در حالی که CMD برای اجرای دستورات در زمان اجرای کانتینر است و به عنوان دستور پیش‌فرض کانتینر عمل می‌کند.

بدون دیدگاه

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

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