راهنمای جامع دستورات Dockerfile - قسمت اول

Dockerfile یک فایل متنی ساده است که شامل دستوراتی برای ساخت یک ایمیج(Image) در داکر میشود. در این مقاله، به بررسی مهمترین دستورات Dockerfile و کاربردهای آنها خواهیم پرداخت.
دستور FROM
اولین دستوری که در Dockerfile باید قرار گیرد، دستور FROM است. این دستور مشخص میکند که ایمیج پایه (Base Image) برای ساخت image ما چیست.
FROM node:18.20.4-alpine3.20
در این مثال، ما یک Image پایه از Node.js نسخه 18.20.4 بر روی Alpine لینوکس انتخاب کردهایم.
نکته: همیشه زمانی که از یک Image پایه استفاده میکنید، نسخهی مدنظر را مشخص کنید تا از تغییرات ناگهانی در آینده جلوگیری شود.
دستور COPY
دستور COPY برای کپی کردن فایلها و دایرکتوریها از سیستم لوکال به داخل image داکر استفاده میشود.
COPY . ./app
در این مثال، تمام فایلهای موجود در دایرکتوری فعلی به داخل مسیر /app در image داکر کپی میشوند.
میتوانیم فقط فایلهای خاصی را منتقل کنیم.
امکان استفاده از الگوهای Regex وجود دارد.
این دستور را میتوان به صورت آرایهای نیز نوشت.
دستور ADD
این دستور عملکردی مشابه COPY دارد، اما دو قابلیت اضافهتر نیز ارائه میدهد:
میتوان از یک URL به عنوان منبع استفاده کرد و فایل را مستقیماً دانلود نمود.
اگر فایل فشرده (مثل .tar.gz) باشد، داکر آن را بهصورت خودکار استخراج میکند.
ADD ["index.js", "app.js", "./app/"]
نکته: آخرین مقدار در این آرایه مقصد (Destination) است و / نشان میدهد که یک دایرکتوری میباشد.
دستور RUN
دستور RUN برای اجرای دستورات در محیط لینوکسی image در هنگام ساخت (Build Time) استفاده میشود.
RUN npm install
RUN mkdir masoud
دستور ENV
با استفاده از ENV، میتوان متغیرهای محیطی را در image تنظیم کرد.
ENV API_URL='https://url.com/api/v1'
دستور EXPOSE
دستور EXPOSE مشخص میکند که کانتینر باید به کدام پورت گوش دهد. این دستور صرفاً بهعنوان مستندات عمل میکند و بهتنهایی پورت را باز نمیکند
EXPOSE 4000
دستور CMD
CMD مشخص میکند که وقتی کانتینر اجرا شد، چه دستوری باید اجرا شود. در هر Dockerfile فقط یک CMD قابل تعریف است.
CMD ["npm", "start"]
یا بهصورت سادهتر:
CMD npm start
تفاوت بین CMD و RUN
RUN در هنگام ساخت image اجرا میشود.
CMD در هنگام اجرای کانتینر استفاده میشود.
دستور ENTRYPOINT
این دستور مشخص میکند که هنگام اجرای کانتینر، چه دستوری بهعنوان دستور اصلی (Main Command) اجرا شود. میتوان CMD را بهعنوان آرگومان ورودی برای ENTRYPOINT استفاده کرد.
ENTRYPOINT ["npm", "build"]
نکته: با استفاده از فلگ --entrypoint میتوان مقدار ENTRYPOINT را تغییر داد.
دستور WORKDIR
این دستور مسیر کاری (Working Directory) را درون کانتینر تنظیم میکند. مثال بدون WORKDIR:
FROM node:20.18.0-alpine3.20
COPY . ./app
CMD node ./app/index.js
مثال با WORKDIR:
FROM node:20.18.0-alpine3.20
WORKDIR /app
COPY . .
CMD node index.js
مزیت WORKDIR
دیگر نیازی به نوشتن مسیر کامل برای فایلهای پروژه نیست.
خوانایی و سازماندهی کد بهبود مییابد.
جمعبندی
در این مقاله، مهمترین دستورات Dockerfile را بررسی کردیم. با رعایت این اصول، میتوانید بهراحتی ایمیج های داکر بهینه و قابل اجرا بسازید. استفاده صحیح از COPY، RUN، CMD و دیگر دستورات، باعث بهینهسازی و کاهش حجم ایمیجهای شما خواهد شد.
- نویسنده: مسعود ناصری
برچسب ها:
alert("hi");