شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز
🎯 ثبت نام
بستن تبلیغات
تسلط کامل بر سی‌شارپ با یک دوره پروژه‌محور

یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شی‌گرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفه‌ای و امکانات کامل!

مشاهده بیشتر
تسلط جامع بر MVC Core برای توسعه وب حرفه‌ای

یادگیری MVC Core از مبانی تا پیشرفته: شی‌گرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژه‌های کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!

مشاهده بیشتر

migrate و اجرای اپلیکیشن های تحت وب مبتنی بر معماری MVC در بستر Windows Container ها

آموزش MVC – انتقال (migrate) و اجرای اپلیکیشن های تحت وب مبتنی بر معماری MVC در بستر Windows Container ها

پیش از هر چیز بد نیست توضیحی مختصری درباره ی windows container ها در اختیار شما قرار دهیم. Windows container به توسعه دهنده این امکان را می دهند تا اپلیکیشن مورد نظر را در ظرف یا بستر اختصاصی و مجزای خود کپسوله سازی کند. این اپلیکیشن هیچ اطلاعی از فرایند و برنامه دیگری که خارج از ظرف میزبان خود ممکن است در حال اجرا باشد نداشته و هر آنچه برای اجرا و عملکرد صحیح احتیاج دارد را در بستر خود در اختیار دارد. به عبارت دیگر، Window container امکان مجازی سازی در سطح سیستم عامل را فراهم آورده که به واسطه آن چندین برنامه ی مجزا می توانند بر روی یک سیستم واحد مستقر و اجرا شوند.

جهت راه اندازی و اجرای یک اپلیکیشن آماده مبتنی بر چارچوب نرم افزاری .NET در بستر Windows container لازم نیست تغییرات خاصی را بر روی اپلیکیشن اعمال نمایید. برای این منظور، می بایست یک Docker image که حامل اپلیکیشن شما می باشد، ایجاد کرده و سپس container را راه اندازی کنید. در مبحث جاری می آموزید چگونه یک اپلیکیشن تحت وب آماده و پیاده سازی شده مبتنی بر معماری MVC را در بستر Windows container مستقر و اجرا نمایید.

پروسه را با یک اپلیکیشن ASP.NET MVC آماده آغاز کرده، منابع بارگذاری شده (published Assets) آدرس مورد نظر را با استفاده از محیط کاری Visual Studio کامپایل (build) می نماییم. سپس با استفاده از Docker یک image که کپی از اپلیکیشن شما را دربردارد، ایجاد می کنیم. در پایان به آدرس سایتی که در بستر Windows container مستقر شده (و در حال اجرا می باشد) با مرورگر پیمایش کرده و از عملکرد صحیح اپلیکیشن اطمینان کامل حاصل می نماییم.

بد نیست شرح مختصری نیز درباره ی Docker داشته باشیم. Docker این قابلیت را برای شما فراهم می کند تا با ایجاد یک سری (ظرف) container، کلیه ی ابزار و امکانات لازم برای پیاده سازی و توسعه ی اپلیکیشن را کپسوله کرده، سپس هر جا که به آن ها نیاز داشتید، با انتقال container به آنجا، از این ابزار استفاده نمایید (container = محیط مجازیی که داخلش اپلیکیشن را همراه با تمامی ابزار مورد نیاز آن بسته بندی کرده و اجرا می کنید).

اپلیکیشنی را که قرار است داخل یک container بالا آورده و اجرا کنیم، یک وب سایت ساده است که به تعدادی سوال به صورت تصادفی پاسخ می دهد. در واقع این app یک برنامه ی کاربردی ساده مبتنی بر MVC است که هیچگونه قابلیت پیچیده ای نظیر احرازهویت و ذخیره سازی اطلاعات در دیتابیس ندارد و به عبارت ساده تر به ما اجازه می دهد که تمرکز خود را بر روی نحوه ی انتقال web tier (لایه ای در معماری اپلیکیشن که امکان ارتباط بین مرورگر و سرور را فراهم می آورد) به یک container قرار دهیم.

پروسه ی انتقال اپلیکیشن سه مرحله ی زیر را شامل می شود:

  1. راه اندازی یک عملیات publish (اجرای دستور publish) برای کامپایل asset ها (منابع نظیر عکس، متن و غیره ...) جهت قرارگیری در image.
  2. ایجاد یک کپی از اپلیکیشن با ابزار Docker (Docker image) که اپلیکیشن در آن قرار می گیرد.
  3. راه اندازی یک Docker container که image یا کپی اپلیکیشن بر روی آن مستقر شده و اجرا می گردد.
  4. کسب اطمینان از عملکرد صحیح اپلیکیشن با مرورگر.

نسخه ی کامل اپلیکیشن تحت آدرس https://github.com/dotnet/docs/tree/master/samples/framework/docker/MVCRandomAnswerGenerator در سایت GitHub قابل دسترسی می باشد.

ابزار و منابع مورد نیاز:

دستگاهی که توسعه ی اپلیکیشن در آن رخ می دهد، بایستی حامل منابع و ابزار زیر باشد:

  1. Windows 10 Anniversary Update یا Windows Server 2016
  2. Docker for Windows – ورژن نهایی و پایدار 1.13.0 یا 1.12 Beta 26
  3. محیط جامع برنامه نویسی Visual Studio 2017

پس از نصب و راه اندازی Docker، بر روی آیکون مربوطه در نوار منو (tray icon) راست کلیک کرده و گزینه ی Switch to Windows containers را انتخاب نمایید. انتخاب این گزینه برای اجرای image های Docker سازگار و مبتنی بر سیستم عامل Windows الزامی است. اجرای این دستور چند ثانیه طول می کشد:

آموزش MVC

دستور Publish

ابتدا تمامی منابع/asset هایی که بایستی داخل یک (کپی از پلیکیشن مبتنی بر Docker) Image Docker بارگذاری کنید را در مکانی واحد جمع آوری نمایید. برای این منظور می توانید با استفاده از دستور Publish محیط کاری Visual Studio، یک پروفایل بارگذاری و publish برای اپلیکیشن خود ایجاد نمایید. این پروفایل کلیه ی asset ها را در قالب یک ساختار درختی داخل پوشه ی واحد (directory tree) قرار می دهد. در بخش های آتی آموزش جاری پوشه ی مزبور را در image مورد نظر جایگذاری خواهید نمود.


مراحل Publish و بارگذاری پروژه


  1. بر روی پروژه ی تحت وب مد نظر (web project) در محیط Visual Studio راست کلیک نموده و گزینه ی Publish را انتخاب کنید.
  2. بر روی دکمه ی Custom profile کلیک کرده، سپس گزینه ی File System را به عنوان سیستم فایل بندی و سازمندهی فایل ها (از منوی کشویی Publish method) انتخاب نمایید.
  3. حال پوشه (directory) دلخواه جهت میزبانی فایل ها را انتخاب کنید. معمولا نمونه ی دانلود شده در آدرس bin\Release\PublishOutput قرار می گیرد.

آموزش MVC

بخش مربوط به File Publish Options را از تب Settings باز نمایید. چک باکس Precompile during publishing را تیک دار کنید. با فعال کردن این گزینه view ها قبل از نصب و اجرای برنامه (deployment) کامپایل می شوند.


آموزش MVC

بر روی دکمه ی Publish کلیک کنید. محیط کاری Visual Studio تمامی منابع و asset های مورد نیاز را در پوشه ی مقصد جایگذاری می کند.

ایجاد image و کپی از اپلیکیشن

image یا کپی مبتنی بر Docker را داخل فایل تنظیمات Docker / Dockerfile تعریف نمایید. Dockerfile دستورالعمل های لازم برای تعریف image پایه (base image) مورد استفاده در container، کامپوننت های مورد نیاز، اپلیکیشنی که می خواهید اجرا کرده و دیگر تنظیمات مربوطه را شامل می شود. در واقع Dockerfile پارامتر ارسالی (input) به دستور docker build است که image را تولید می کند.

در این بخش یک image بر اساس فایل آماده microsft/aspnet که در Docker Hub بارگذاری شده ، ایجاد خواهید کرد. image پایه ی نام برده در واقع یک کپی آماده از Windows Server است. این کپی Windows Server Core، سرویس IIS و ویرایش 4.6.2 چارچوب نرم افزاری .NET و تکنولوژی ASP.NET را شامل می شود. زمانی که این image را در بستر container بالا می آورید (اجرا می کنید)، سرویس IIS به صورت خودکار راه اندازی شده و تمامی اپلیکیشن های تحت وب نصب شده اجرا می شوند.

محتوای Dockerfile ای که فایل image اپلیکیشن شما را ایجاد می کند را زیر مشاهده می نمایید (فایل هایی که برای container مشخص می کند چگونه یک container را اجرا کرده و آن را تنظیم کند):

                            # The `FROM` instruction specifies the base image. You are
# extending the `microsoft/aspnet` image.
FROM microsoft/aspnet
# The final instruction copies the site you published earlier into the container.
COPY ./bin/Release/PublishOutput/ /inetpub/wwwroot

  1. دستور FROM: توسط این دستور image مورد استفاده در container را مشخص می کنیم.
  2. دستور COPY: توسط این دستور پروژه ای (فایل یا پوشه) که قرار است در container جایگذاری شود را مشخص می کنیم.

همان طور که می بینید در Dockerfile جاری دستور ENTRYPOINT وجود ندارد و احتیاجی هم به آن نیست. زمانی که سرویس IIS را بر روی Windows Server اجرا می کنید، خود فرایند IIS نقطه ی شروع اجرای برنامه (entrypoint) می باشد. این process طوری تنظیم شده که در image پایه ی aspnet به صورت اتوماتیک راه اندازی شود.

جهت ایجاد image ای که میزبان اپلیکیشن ASP.NET بوده و آن را بستر container بالا می آورد، دستور Docker Build را اجرا نمایید. می توانید برای نیل به این هدف یک پنجره ی PowerShell در پوشه ی پروژه ی خود باز کرده، سپس دستور زیر را در جایگاه solution directory درج نمایید:

docker build -t mvcrandomanswers .

این دستور بر اساس دستورات موجود در فایل Dockerfile، فایل image مورد نظر را ایجاد نموده و آن را (به وسیله ی دستور -t) mvcrandomanswers نام گذاری می کند. این دستور ممکن است سبب شود image پایه از Docker Hub واکشی شده و بعد اپلیکیشن شما به فایل image واکشی شده از این سایت اضافه شود.

زمانی که آن دستور کاملا اجرا شد، می توانید دستور docker images را جهت مشاهده ی اطلاعات مربوط به image جدید، اجرا نمایید:

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mvcrandomanswers              latest              86838648aab6        2 minutes ago       10.1 GB

لازم به ذکر است که مقدار IMAGE ID در سرور شما حتما متفاوت خواهد بود.

حال به اجرای اپلیکیشن می پردازیم.


راه اندازی و اجرای Container جهت میزبانی image و بالا آوردن اپلیکیشن

با اجرای دستور زیر (docker run) یک container اجرا کنید:

docker run -d --name randomanswers mvcrandomanswers

آرگومان –d به برنامه ی Docker اعلان می کند که image ای به نام mvcrandomanswers را در حالت مجزا (detached mode) و در واقع جدا از shell جاری اجرا کند.

در بسیاری از دستورهای docker شاید شما پارامتر -p را مشاهده کنید. این پارامتر container را به پورت های میزبان (سرور) متصل (map) می کند. image پیش فرض aspnet از قبل container را طوری را تنظیم کرده که به پورت 80 گوش فرا داده و به آن متصل شود (آن پورت را expose کند).

دستور --name randomanswers در واقع container جاری (در حال اجرا) را نام گذاری می کند. شما می توانید بجای container ID در بیشتر دستورها از این اسم برای اشاره به container استفاده نمایید.

mvcrandomanswers نیز اسمی است که به image مورد نظر اختصاص یافته و در بستر container با این اسم بالا می آید.


بررسی عملکرد صحیح اپلیکیشن با مرورگر


توجه:

در ویرایش فعلی Windows Container، شما نمی توانید به آدرس سرور میزبان یا http://localhost دسترسی پیدا کنید. این یک کاستی در WinNAT است که در ویرایش های آینده حتما برطرف خواهد شد. تا زمانی که این مشکل برطرف نشده است، بایستی آدرس پروتکل اینترنت (IP) container مربوطه را مشخص نمایید.


پس از اینکه container راه اندازی شده و بالا آمد، آدرس آیپی متناظر آن را پیدا کنید تا بتوانید به وسیله ی مرورگر به container جاری (در حال اجرا) دسترسی داشته باشید.

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" randomanswers
172.31.194.61

با استفاده از آدرس IP ورژن 4، http://172.31.194.61، به container جاری متصل شوید. URL فوق را در نوار آدرس مرورگر وارد کرده تا سایت بالا آماده را مشاهده نمایید.

نکته:

ممکن است یک VPN یا نرم افزار proxy که در سیستم شما در حال اجرا است، مانع از دسترسی مرورگر شما به سایت مورد نظر شود. در این صورت، کافی آن را غیرفعال نمایید تا container راه اندازی شود.


داخل پوشه نمونه که در سایت GitHub بارگذاری شده است، یک اسکریپت PowerShell تعریف شده که خود به صورت اتوماتیک این دستورات را برای شما اجرا می کند. جهت تست آن، پنجره ی PowerShell را فراخوانی کرده، مقدار directory و آدرس را به پوشه ی solution خود تغییر دهید و سپس دستور زیر را تایپ نمایید:

./run.ps1

دستور بالا تمامی این عملیات را برای شما انجام می دهد:

  • image مورد نظر را تهیه می کند.
  • لیست تمامی image های موجود در سرور شما را به نمایش می گذارد.
  • یک container جهت میزبانی image مورد نظر راه اندازی و اجرا می کند.
  • آدرس IP متناظر container را جهت دسترسی به آن برای شما به نمایش می گذارد.

به منظور متوقف کردن container کافی است دستور زیر (docker stop ) را فراخوانی کنید:


docker stop randomanswers

به منظور حذف container، دستور docker rm را به صورت زیر فراخوانی کنید:

docker rm randomanswers
1397/02/27 2136 866
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...