آموزش داکر Docker و Container در پروژه های ASP.NET Core
آموزش داکر Docker و Container در پروژه های ASP.NET Core یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی استفاده کردن از Docker Image ها و Container ها در ASP.NET Core است که با نام اصلی Docker Images and Containers for ASP.NET Core از شرکت Pluralsight منتشر شده است.
داکر چیست؟
داکر یک نرم افزار Open Source می باشد که به منظور ساده تر کردن روش توسعه نرمافزار مورد استفاده قرار میگیرند. در واقع Docker مجموعه ای از ابزارهای Platform as a Service است که محیط های مجازی سازی شده و Virtualized Environment هایی را در اختیار شما قرار می دهند. با استفاده از این محیط های مجازی سازی شده روند Build کردن و Deploy کردن و تست کردن اپلیکیشن ها بیش از پیش ساده خواهد شد. استفاده کردن از Docker میتواند عملکرد شما به عنوان یک برنامه نویس را کاملاً دگرگون کند. البته یادگیری عملکرد Docker و استفاده کردن از قابلیت های مختلف آن و البته آشنایی با واژگانی از قبیل Dockerfile و Image و Container و Volume کمی برای برنامه نویسان تازه کار دشوار خواهد بود.
Docker Image چیست؟
یک Docker Image در واقع یک فایل غیرقابل تغییر است که شامل Source Code و Library ها و Dependency ها دیگر ابزارها و فایل های مورد نیاز برای اجرای کردن یک برنامه میباشند. از آنجایی که Docker Image ها فقط خواندنی و یا Read-Only هستند اغلب به آنها Snapshot نیز گفته میشود. در واقع یک Dockerfile محیط مجازی و یا Virtual Environment در یک زمان خاص است. یکی از قابلیت های بسیار ویژه Docker همین سازگاری و یا Consistency فایل های Docker Image می باشند. در این قسمت منظور ما از Consistency عدم امکان ایجاد تغییر در آنها است. این موضوع باعث میشود تا برنامه نویسان بتوانند در یک شرایط یکسان و غیر قابل تغییر نرمافزارهای خود را تست و اجرا کنند. از آنجایی که Docker Image در واقع فقط Template ها و یا الگوهایی هستند، امکان اجرا کردن آنها وجود ندارد. در واقع با استفاده از این Template ها شما یک Container را ایجاد خواهید کرد. به بیان ساده یک Container در واقع یک نسخه در حال اجرا از یک Docker Image می باشد. زمانی که یک Container را ایجاد می کنید یک لایه قابل نوشتن سوار بر آن Docker Image فقط خواندنی در اختیار شما قرار می گیرد و این بدان معنی است که می توانید با استفاده از آن Container اقدام به ایجاد کردن تغییر در Docker Image کنید.

علاوه بر این بسته آموزشی که در رابطه با استفاده کردن از داکر و Container ها در پروژه های ASP.NET Core می باشد توصیه میکنیم که از آموزش شروع به کار با داکر Docker در ویندوز و آموزش توسعه وب اپلیکیشن ASP.NET Core و داکر Docker دیدن بفرمایید.
Docker Image و Container در پروژههای ASP.NET Core
Docker Image الگویی شامل فایلها، وابستگیها و تنظیمات مورد نیاز برای اجرای یک برنامه است. از روی این الگو میتوان Container ایجاد کرد؛ محیطی که برنامه در آن اجرا میشود. در پروژههای ASP.NET Core، استفاده از Image و Container راهی برای بستهبندی برنامه و مشخص کردن محیط اجرای آن است. شناخت تفاوت این دو مفهوم به توسعهدهنده کمک میکند بفهمد برنامه چگونه آماده اجرا میشود و چه ارتباطی میان فایلهای پروژه و محیط نهایی اجرای آن وجود دارد.
برای مثال، فرض کنید یک اپلیکیشن ASP.NET Core ساختهاید و میخواهید آن را در محیطی جدا از سیستم توسعه اجرا کنید. بهجای نصب و تنظیم دستی تمام وابستگیها در مقصد، میتوانید Image مناسبی بسازید و از آن برای ایجاد Container استفاده کنید. این روش به مدیریت بهتر محیط اجرا کمک میکند، هرچند انتخاب Image پایه و نحوه بستهبندی برنامه همچنان اهمیت دارد. آشنایی با این مراحل، پایهای برای استفاده عملی از Docker در پروژههای وب است.
انتخاب Base Image مناسب برای ASP.NET Core
Base Image نقطه شروع ساخت یک Docker Image است و میتواند اجزای پایه مورد نیاز برای اجرای برنامه را فراهم کند. انتخاب آن به نوع اپلیکیشن، نسخه پلتفرم و نیازهای زمان اجرا بستگی دارد. برای یک برنامه ASP.NET Core، باید میان محیط مورد نیاز برای ساخت برنامه و محیط لازم برای اجرای آن تفاوت قائل شد. انتخاب درست Image پایه میتواند از وارد کردن اجزای غیرضروری جلوگیری کند و ساختار بسته نهایی را با نیازهای برنامه هماهنگتر سازد.
یکی از نکات مهم در کار با Docker این است که هر Image الزاماً برای تمام مراحل ساخت و اجرا مناسب نیست. ممکن است برنامه برای Build شدن به ابزارهایی نیاز داشته باشد که هنگام اجرای نهایی ضروری نیستند. به همین دلیل، شناخت Imageهای مرتبط با .NET و ASP.NET Core و بررسی نیازهای برنامه، بخشی از تصمیمگیری فنی توسعهدهنده است. این آگاهی کمک میکند هنگام تعریف محیط Container، وابستگیهای برنامه را آگاهانهتر مدیریت کنید.
خودکارسازی ساخت Docker Image با Dockerfile
Dockerfile فایلی است که در آن دستورهای لازم برای ساخت یک Docker Image تعریف میشوند. به کمک این فایل میتوان مشخص کرد ساخت Image از کجا آغاز شود، چه فایلهایی در دسترس قرار بگیرند و چه دستورهایی برای آمادهسازی برنامه اجرا شوند. در پروژههای ASP.NET Core، Dockerfile امکان تبدیل مراحل ساخت و بستهبندی برنامه به یک دستورالعمل تکرارپذیر را فراهم میکند. در نتیجه، بهجای انجام دستی مراحل مشابه، میتوان ساخت Image را بر اساس تنظیمات مشخص انجام داد.

خودکارسازی فرایند Build بهویژه زمانی مفید است که برنامه مرتب تغییر میکند و نسخههای جدید آن باید آماده شوند. برای نمونه، توسعهدهنده میتواند دستورهای مورد نیاز برای ساخت برنامه و آمادهسازی فایلهای آن را در Dockerfile تعریف کند تا فرایند ساخت Image از روی همان دستورالعمل انجام شود. البته کیفیت نتیجه به درستی تنظیمات و وابستگیهای تعریفشده بستگی دارد. بررسی Dockerfile و شناخت ترتیب دستورهای آن، به عیبیابی مشکلات ساخت نیز کمک میکند.
اجرای اپلیکیشن ASP.NET Core در محیط Container
برای اجرای اپلیکیشن ASP.NET Core در Container، باید مشخص شود برنامه چگونه ساخته میشود، فایلهای مورد نیاز آن کجا قرار میگیرند و محیط اجرا چه وابستگیهایی لازم دارد. یکی از روشها، استفاده از برنامهای است که قبلاً Publish شده و سپس بستهبندی فایلهای خروجی در Image است. روش دیگر میتواند ساخت خود اپلیکیشن در جریان فرایند Docker باشد. انتخاب میان این روشها به ساختار پروژه و شیوه مورد نظر برای آمادهسازی نرمافزار بستگی دارد.
آشنایی با این روشها به توسعهدهنده کمک میکند تفاوت میان کد منبع، خروجی Publish و Image قابل اجرا را بهتر درک کند. همچنین پشتیبانی Docker در Visual Studio میتواند بخشی از روند کار با Containerها را در محیط توسعه در دسترس قرار دهد. شناخت ارتباط ابزارهای توسعه با Docker باعث میشود فرایند آمادهسازی و اجرای برنامه برای شما قابلفهمتر شود و بتوانید تنظیمات مربوط به ساخت و اجرای اپلیکیشن را با آگاهی بیشتری بررسی کنید.
سرفصل مطالب آموزش ویدئویی داکر (Docker) و Container در پروژه های ASP.NET Core
فصل اول: مقدمه دوره آموزشی- مقدمه دوره آموزشی
- خوش آمد گویی و پیشنیازهای ASP.NET Core
- یک Container شبیه به یک Process کاملاً تفکیک شده عمل میکند
- یک Image یک File System را در اختیار قرار می دهد
- پیدا کردن یک Image برای اجرا کردن dotnet CLI
- اجرا کردن dotnet CLI در یک Linux Container
- اجرا کردن یک dotnet CLI در یک Windows Container
- اجرا کردن dotnet CLI در یک Linux Container بر روی Mac
- اجرا کردن یک Web API در قالب یک Process سنتی
- مراحل اجرا کردن API در یک Container
- اجرا کردن یک Command Prompt در یک Container به جای استفاده کردن از dotnet
- Mount کردن API Folder در یک Container
- Publish کردن و اجرا کردن API در یک Container
- استفاده کردن از aspnetcore Image برای اجرا کردن کردن API در یک Container
- استفاده کردن از کردن API با استفاده از IP Address های Container
- Publish کردن به یک Host Port و دسترسی پیدا کردن به صورت Remote
- دسترسی پیدا کردن به Port های Publish شده به صورت Local
- مقدمه
- پشتیبانی از Multi-arch Image
- بررسی کردن یک Multi-arch Image
- انتخاب کردن یک Image بر اساس App-model
- انتخاب کردن یک Image بر اساس Container Operating System
- انتخاب کردن یک Image به اساس Component و Version
- رصد کردن dotnet-docker GitHub Repo برای تغییرات نامگذاری این Image ها
- بررسی کردن aspnetcore-build Image
- بررسی کردن Nightly Image Build ها و Image های مربوط به NET Framework.
- منابع مربوط به تغییرات بر روی Image ها
- توزیع کردن اپلیکیشن Publish شده برای اجرا شدن در یک Container
- ساختن یک Image سفارشی با استفاده از اپلیکیشن از قبل Publish شده
- اجرا کردن API فصل قبل از درون یک Image سفارشی
- Push کردن به Docker Hub و اجرا کردن بر روی یک ماشین دیگر
- به حداقل رساندن Build Context با استفاده از دستور docker ignore
- ما میتوانیم در یک Container هم Build کنیم
- بررسی یک مثال: کجا ایجاد کنیم و کجا بخوریم
- توریع برنامه: Published Folder و یا Image
- بررسی کردن API Image
- انتخاب کردن یک SDK Image
- Build کردن با NET Core SDK. در یک Container
- Publish کردن از دورن یک Container برای اجرا کردن بر روی Host
- Build کردن و اجرا کردن در SDK Container تک
- تنظیم کردن API Port با استفاده از Environment Variable
- توسعه و برنامه نویسی با استفاده از aspnetcore-build Image
- زمان Automated کردن و شکستن Dockerfile با استفاده کردن از Docker Event برای مانیتورینگ
- بررسی اینکه Docker Build چه کاری را با Dockerfile میکند
- ایجاد کردن یک Dockerfile برای Build کردن در یک Container
- اجرا کردن یک Build مبتنی بر Dockerfile
- بررسی کردن Content Root
- جلوگیری کردن از Cache Invalidation در زمان تغییر دادن Dockerfile
- فصل هفتم: استفاده کردن از Multi-stage Build برای ساختن Image های بهینه سازی شده برای Runtime
- Build کردن در یک Container و ایجاد کردن یک Image بهینه سازی شده برای زمان Runtime
- سوئیچ کردن بین Image ها با استفاده از Dockerfile
- ایجاد کردن یک Multi-stage Dockerfile
- ایجاد کردن Multi-stage Build و بررسی کردن فایل Image بهینهسازی حاصل
- Multi-stage هم میتواند Build و هم میتواند Runtime را بهینه سازی کند
- استفاده کردن از MSBuild Composability برای سرعت بخشیدن به Image Build ها
- مثال های بیشتر
- خودکار کردن روند ساختن و اجرا کردن یک Container
- استفاده از دستور docker-compose برای اجرا کردن یک Container یک Image از قبل موجود
- اجرا کردن Container در Background
- استفاده کردن از State Configuration باعث میشود تغییرات به راحتی امکان پذیر باشند
- Build کردن با استفاده از Docker-Compose.yml
- ایجاد کردن یک Test Email Server
- ارسال کردن ایمیل ها از درون وب اپلیکیشن
- اجرا کردن و ساختن سرویس ها
- اجرا کردن وب اپلیکیشن و Test Email Server در Container ها
- بررسی دستور docker-compose up
- اضافه کردن قابلیت استفاده از Docker در ویژوال استودیو
- بررسی Dockerfile های ایجاد شده و dockerignore.
- دیباگ کردن وب اپلیکیشن در یک Container
- بررسی کردن روند Debug شدن Container ها در ویژوال استودیو
- بررسی کردن یک فایل Compose دیگر
- بررسی کردن Build Output برای هر چه بهتره Debug Container
- بررسی کردن Docker Output و Debug Output
- استفاده کردن از پیکربندی های Release برای Build کردن یک Image قابل Publish شدن
- بررسی مستندات مربوط به پشتیبانی کردن ویژوال استودیو از داکر
- بررسی طرح دستور dotnet new docker
- جمع بندی دوره آموزشی


