داکر - کانتینر کردن پروژه ی Asp.Net Core

سلام دوستاندر این مطلب قصد دارم نحوه ی بیلد کردن و پکیج کردن پروژه های Asp.Net Core را برای کانتینر های داکر شرح بدم.اگر با داکر آشنایی ندارید پیشنهاد میکنم این مطلب را مطالعه بفرمایید.من در این مطلب با برنامه ی Docker Desktop ویندوز کار کرده ام و دستورات در این محیط انجام شده است ولی در لینوکس و مک هم شما با مشکل خاصی مواجه نمی شوید.من یک پروژه ی Asp.Net Core 3.1 را پکیج کرده ام که شما عزیزان میتوانید از این لینک پروژه را در گیت هاب مشاهده و دریافت کنید.چرا برنامه های Asp.Net Core حائز اهمیت هستند؟متن باز هستندکراس پلتفرم هستند ، روی ویندوز ، مک و لینوکس به راحتی اجرا می شوند.برای برنامه های مبتنی بر Cload بسیار عالی هستند مثل وب اپ ها ، اپ های IOT و بک اند موبایلاجزای ماژولار با حداقل سربار، انعطاف پذیری را در هنگام ساختن سولوشن های شما حفظ می کنند.داکر فایل یا DockerFileداکر فایل یک اسکریپت سازنده هستش (Build Script) برای پکیج کردن ایمیج های داکر که فرمت خودشان را دارند و از مجموعه ای از دستورات پشتیبانی می کنند. اگر با (Docker Images) آشنایی ندارید پیشنهاد میکنم این مطلب را مطالعه بفرمایید.هر داکر ایمیجی که شما قصد ساخت آن را دارید نیازمند یک DockerFile مختص به خودش است.شیوه ی رایجی که استفاده می شود ، قرار دادن فایل DockerFile در روت (Root) اصلی پروژه ای که میخواهید داکر کانتینر شود، می باشد.در اینجا به بررسی تعداد محدودی از دستورات به کار برده شده در دکر فایل میپردازیم که بسیار حائز اهمیت هستند.دستور FROM : یک مرحله ساخت جدید را آغاز می کند و ایمیج پایه را برای دستورالعمل های بعدی تنظیم می کند. یک DockerFile معتبر با دستور Formشروع می شود. دستوراتی که شامل چند Formمی شوند برای اجرای چند مرحله ای به کار برده می شوند که در ادامه بیشتر صحبت می کنیم.دستور WORKDIR : دایرکتوری کار را برای هرگونه دستورالعمل RUN ، CMD ، ENTRYPOINT ، COPY و ADD تنظیم میکند که در ادامه به تشریح هر یک میپردازیم.دستور RUN : هرر دستور را در یک لایه جدید در بالای Image فعلی اجرا میکند و نتایج را اصطلاحا Commit میکند. دستور Run دو شکل دارد که به صورت زیر تعریف می شود:به شکل شِل: RUN <Command> به شکل Exe یا قابل اجرا : RUN [“executable”, “param1”, “param2”]دستور COPY: فایل ها را در داخل کانتینر کپی میکند ، منبع فایل میتواند از فایل های سیتم خودی باشد یا از فولدر های دیگر در کانتینر داکردستور ENTRYPOINT : فرمان (command) را برای اجرا تعیین میکند، هنگامی که کانتینر کردن شروع شده است ، این دستور نیز به دو شکل می باشد که در زیر بررسی شده است.به شکل شِل : ENTRYPOINT command param1 param2به شکل Exe یا قابل اجرا : ENTRYPOINT [“executable”, “param1”, “param2”] بیلد های چند سطحی یا Multistage Buildبیلد های چند سطحی در داکر ورژن 17.05 معرفی شدند و باعث شدند تا ایمیج ها تا حد امکان فشرده تر نگه داشته شوند.با بیلد های چند سطحی ، Docker Build خود را به یک سری مراحل تقسیم می کنید که می توانید نسخه های ساخته شده را را بین آنها کپی کنید که مزایای خاص خودش را دارد که در زیر عنوان میکنیم :نیازی به تمیز کردن یا پاک کردن (Clean up) فایل های ساخته شده ی غیر ضروری نیست. در حقیقت ، شما می توانید در مراحل میانی به اندازه ای که می خواهید ناکارآمد باشید!در مرحله آخر ، فقط فایل های ساخته شده ی مورد نظر خود را از مراحل قبلی کپی می کنید و فقط Image نهایی را حفظ می کنید. این امر باعث می شود تا تصویر نهایی تا حد ممکن کم حجم شوند.برای هر سطح می توان ایمیج های مختلفی را به کار برد. به عنوان مثال ، من می توانم فقط ایمیج Asp.Net را برای ایمیج نهایی استفاده کنم، در حالی که مراحل Build همه در Sdk Image قابل انجام است ولی به طور قابل توجی حجم افزایش پیدا میکند.دستور Docker Buildما کد ها و DockerFile را داریم تا پکیج کد را بسازیم و هم اکنون قادر به تولید Docker Image هستیم. برا این کار باید از دستور Docker Build استفاده کنیم به صورت زیر :PS C:\git\dockertest> docker build . -t demoعلامت t- یک برچسب به ایمیج تولید شده اضافه می کند. این مورد اختیاری می باشد ولی به ما کمک میکند تا متوجه شویم کدام ایمیج ، ایمیج نهایی است.سپس ما با دستور docker imagesایمیج تولید شده را تایید میکنیم.PS C:\git\dockertest> docker imagesاکنون توجه داشته باشید که دو Image به صورت زیر تولید شده است:demo (675df3a34134) — 208MBNo Name (319e6260d6bd) — 694MBدلیل آن این است که ما از بیلد چند سطحی استفاده کرده ایم. ایمیج بدون نام ، ایمیج اولیه ای است که ما تمام دستوارت ساخت و انتشار را به صورت یک جا انجام دادیم و و image نهایی حاوی فایل های ساخته شده و منتشر شده است.دستور Docker Runاکنون ما میتوانیم ایمیج مورد نظر را به وسیله ی docker run تست کنیم.PS C:\git\dockertest> docker run -p 8080:80 demoعلامت p- از پورت هاست ما به پورت کانتینر مپ میکند ، در این مثال ما 8080:80 را تعیین کردیم ، هاست ما به پورت 8080 گوش خواهد داد که به پورت 80 در کانتینر فوروارد خواهد شد.اگر مرورگر خودمان را باز کنیم و تایپ کنیم localhost:8080 چیزی که به عنوان خروجی دریافت میکنیم مثل تصویر زیر است. در نهایت پیشنهاد میکنم اگر با داکر آشنایی ندارید این مطلب را مطالعه بفرمایید همچنین فیلم آموزشی مربوط به این زمینه در این لینک قابل مشاهده است. برای دانلود سورس پروژه از اینجا اقدام کنید.ممنون از توجه شما