سلام دوستان
در این مطلب قصد دارم نحوه ی بیلد کردن و پکیج کردن پروژه های Asp.Net Core را برای کانتینر های داکر شرح بدم.
اگر با داکر آشنایی ندارید پیشنهاد میکنم این مطلب را مطالعه بفرمایید.
من در این مطلب با برنامه ی Docker Desktop ویندوز کار کرده ام و دستورات در این محیط انجام شده است ولی در لینوکس و مک هم شما با مشکل خاصی مواجه نمی شوید.
من یک پروژه ی Asp.Net Core 3.1 را پکیج کرده ام که شما عزیزان میتوانید از این لینک پروژه را در گیت هاب مشاهده و دریافت کنید.
در اینجا به بررسی تعداد محدودی از دستورات به کار برده شده در دکر فایل میپردازیم که بسیار حائز اهمیت هستند.
دستور 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”]
بیلد های چند سطحی در داکر ورژن 17.05 معرفی شدند و باعث شدند تا ایمیج ها تا حد امکان فشرده تر نگه داشته شوند.
با بیلد های چند سطحی ، Docker Build خود را به یک سری مراحل تقسیم می کنید که می توانید نسخه های ساخته شده را را بین آنها کپی کنید که مزایای خاص خودش را دارد که در زیر عنوان میکنیم :
نیازی به تمیز کردن یا پاک کردن (Clean up) فایل های ساخته شده ی غیر ضروری نیست. در حقیقت ، شما می توانید در مراحل میانی به اندازه ای که می خواهید ناکارآمد باشید!
در مرحله آخر ، فقط فایل های ساخته شده ی مورد نظر خود را از مراحل قبلی کپی می کنید و فقط Image نهایی را حفظ می کنید. این امر باعث می شود تا تصویر نهایی تا حد ممکن کم حجم شوند.
برای هر سطح می توان ایمیج های مختلفی را به کار برد. به عنوان مثال ، من می توانم فقط ایمیج Asp.Net را برای ایمیج نهایی استفاده کنم، در حالی که مراحل Build همه در Sdk Image قابل انجام است ولی به طور قابل توجی حجم افزایش پیدا میکند.
ما کد ها و 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) — 208MB
No Name (319e6260d6bd) — 694MB
دلیل آن این است که ما از بیلد چند سطحی استفاده کرده ایم. ایمیج بدون نام ، ایمیج اولیه ای است که ما تمام دستوارت ساخت و انتشار را به صورت یک جا انجام دادیم و و image نهایی حاوی فایل های ساخته شده و منتشر شده است.
اکنون ما میتوانیم ایمیج مورد نظر را به وسیله ی docker run تست کنیم.
PS C:\git\dockertest> docker run -p 8080:80 demo
علامت p- از پورت هاست ما به پورت کانتینر مپ میکند ، در این مثال ما 8080:80 را تعیین کردیم ، هاست ما به پورت 8080 گوش خواهد داد که به پورت 80 در کانتینر فوروارد خواهد شد.
اگر مرورگر خودمان را باز کنیم و تایپ کنیم localhost:8080 چیزی که به عنوان خروجی دریافت میکنیم مثل تصویر زیر است.
در نهایت پیشنهاد میکنم اگر با داکر آشنایی ندارید این مطلب را مطالعه بفرمایید
همچنین فیلم آموزشی مربوط به این زمینه در این لینک قابل مشاهده است.
برای دانلود سورس پروژه از اینجا اقدام کنید.
ممنون از توجه شما