خب خب خب، تفاوت Entrypoint و CMD توی داکر🐳
اگه با Dockerfile یا docker compose کار کرده باشین، احتمالا دوتا دستور CMD و Entrypoint برخورد کردین ولی تاحالا به تفاوتشون فکر کردین؟ اینکه هرکدوم چه کاری انجام میدن و کجا کاربرد دارن؟
✅CMD
برای مشخص کردن دستور پیشفرضی استفاده میشه که اگه هنگام اجرای کانتینر هیچ آرگومانی ندیم اجرا بشه. CMD باعث میشه که با خیلی راحت بتونین فقط با docker run image_name
کاری که میخواین رو انجام بدین(فقط وقتی که Entrypoint وجود نداشته باشه). ولی اگه توی docker run
آرگومان بدین اون آرگومان های جدید جای CMD توی Dockerfile رو میگیرن.
CMD ["python3", "app.py"]
توی این حالت، دستور نهایی ای که با
docker run
اجرا میشه این شکلیه:python3 app.py
ولی اگه بنویسین
docker run image_name echo hello
دستور نهایی این شکلی میشه:echo hello
✅Entrypoint
برای تعیین دستور اصلی کانتیر استفاده میشه. یه جورایی میشه گفت دستور غیرقابل تغییر کانتینر رو میشه باهاش تعیین کرد. حتی اگه موقع اجرای کانتینر بیایم از آرگومان ها استفاده کنیم اون آرگومان ها به عنوان ورودی به Entrypoint پاس داده میشن. در نتیجه Entrypoint رفتار اصلی کانتینر رو تعیین میکنه.
ENTRYPOINT ["python3", "app.py"]
حالا میتونین با
docker run
اجراش کنید و البته که میتونین با پاس دادن آرگومان به docker run
اونهارو به Entrypoint اضافه کنید. دستور
docker run image_name --option
باعث میشه که دستور نهایی ای که برای اجرا کانتینر استفاده بشه این شکلی بشه:python3 app.py --option
شما حتی میتونید همزمان ازشون استفاده کنید و با CMD آرگومان های مختلفی به دستور اصلیتون بفرستین. اینجوری دستتون برای اجرای کانتینر خیلی باز میشه.
ENTRYPOINT ["python3", "app.py"]
CMD ["--option"]
و حالا اگه بخواین آرگومان های دستور رو تغییر بدین فقط کافیه اونهارو توی
docker run
به کانتینر پاس بدین.جمع بندی✍️
از CMD برای تنظیم پیش فرض ها و حالت های مختلف استفاده کنید.
از Entrypoint برای تعیین رفتار اصلی و ثابت کانتینر استفاده کنید.
و البته که میتونین با ترکیبشون و استفاده ی درست از هردوتاشون کارای خفنی انجام بدین.
#️⃣ #programming #devops
➖➖➖➖➖➖➖➖➖➖
🥷🏻 CHANNEL | GROUP
>>Click here to continue<<