مولد Dockerfile

در چند ثانیه یک Dockerfile آمادهٔ محیط تولید برای استک خود بسازید.

ابزارهای توسعه‌دهنده رایگان
دستوری که کانتینر هنگام راه‌اندازی اجرا می‌کند؛ برای مثال: node server.js یا gunicorn app:app.
Dockerfile


        
.dockerignore

    

دربارهٔ این ابزار

بدون کپی‌کردن از پروژه‌های قدیمی، یک Dockerfile کاربردی تولید کنید

تقریباً همهٔ Dockerfileها از یک الگوی مشابه شروع می‌شوند — انتخاب یک ایمیج پایه، نصب وابستگی‌ها، کپی‌کردن برنامه و بازکردن یک پورت — اما نحو دقیق بین Node، Python، Go و Java آن‌قدر متفاوت است که ممکن است در همان تلاش اول به‌راحتی دچار خطا شوید. استک و نسخهٔ خود را اینجا انتخاب کنید تا یک Dockerfile مطابق با بهترین رویه‌های فعلی دریافت کنید؛ ازجمله گزینهٔ ساخت چندمرحله‌ای که ایمیج نهایی را کوچک نگه می‌دارد و ابزارهای ساختی را که در زمان اجرا نیازی به آن‌ها نیست حذف می‌کند.

نحوه استفاده

  • پشتهٔ خود را انتخاب کنید (Node.js، Python، Go، PHP، Java، Ruby، سایت ایستایی که با Nginx ارائه می‌شود یا یک ایمیج پایهٔ سفارشی) و نسخهٔ آن را مشخص کنید.
  • دایرکتوری کاری، پورتی را که برنامه در آن گوش می‌دهد و فرمانی را که آن را اجرا می‌کند، مشخص کنید.
  • هر متغیر محیطی‌ای را که می‌خواهید در ایمیج قرار بگیرد اضافه کنید؛ هرکدام را در یک KEY=VALUE در هر خط.
  • برای برنامه‌های کامپایل‌شده یا باندل‌شده (Node، Go، Java)، گزینهٔ "multi-stage build" را فعال نگه دارید تا ایمیج نهایی کم‌حجم بماند — ابزارهای ساخت در یک مرحلهٔ میانی که حذف می‌شود باقی می‌مانند.
  • Dockerfile را کپی یا دانلود کنید و نسخه متناظر .dockerignore تا کانتکست ساخت سریع بماند و اطلاعات محرمانه خارج از ایمیج بمانند.

موارد استفاده در دنیای واقعی

برای نخستین بار در حال کانتینری‌کردن یک API مبتنی بر Node/Express هستید و مطمئن نیستید یک Dockerfile آمادهٔ محیط تولید، فراتر از مثال آموزشی "FROM node"، واقعاً چه شکلی دارد. می‌خواهید Dockerfileها را در چند میکروسرویس با زبان‌های مختلف استاندارد کنید تا همهٔ تیم‌ها از قراردادهای یکسانی پیروی کنند. یا می‌خواهید سریع یک Dockerfile موقت بسازید تا پیش از راه‌اندازی CI واقعی بررسی کنید که آیا برنامه در یک کانتینر تمیز، بدون خطا ساخته می‌شود یا نه.

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

ساخت چندمرحله‌ای Docker چیست؟

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

چرا از یک ایمیج مبتنی بر Alpine استفاده کنیم؟

ایمیج‌های Alpine Linux کسری از حجم ایمیج‌های کامل مبتنی بر Debian/Ubuntu را دارند؛ در نتیجه دانلود سریع‌تر و سطح حملهٔ کوچک‌تری فراهم می‌کنند. اینجا نسخهٔ پیش‌فرض برای Node و Go هستند، اما اگر بسته‌ای به glibc به‌جای musl نیاز داشته باشد، می‌توانید نسخه‌ها را تغییر دهید.

چه چیزهایی باید در فایل .dockerignore قرار بگیرد؟

هر چیزی که نباید در کانتکست ساخت کپی شود: node_modules, .git, .env، پوشه‌های خروجی ساخت و گزارش‌ها. این ابزار بر اساس پشتهٔ انتخابی شما، یکی از آن‌ها را به‌صورت خودکار و درست در کنار Dockerfile تولید می‌کند.

آیا هنوز لازم است فایل docker-compose.yml را جداگانه بنویسم؟

بله — این ابزار Dockerfile مربوط به یک ایمیج واحد را تولید می‌کند. اگر برنامه‌تان به پایگاه‌داده، کش یا چند سرویس نیاز دارد که هم‌زمان اجرا شوند، همچنان باید آن‌ها را در یک docker-compose.yml.

آیا می‌توانم بعداً Dockerfile تولیدشده را ویرایش کنم؟

قطعاً — این را به‌عنوان یک نقطهٔ شروع محکم و صحیح در نظر بگیرید. آن را در پروژهٔ خود کپی کنید و مراحل ساخت را تنظیم کنید، موارد اضافی RUN دستور اجرا کنید یا بسته‌های سیستمی را مطابق نیاز واقعی برنامه‌تان نصب کنید.