اخیراً وقت آزاد داشتم، بنابراین میخواستم به Docker (و نه کانتینریسازی) بروم.
پیش نیازها
یک کامپیوتر توسعه دهنده در حال اجرا:
- ویژوال استودیو (مال نسخه 15.5.2 است)
- داکر برای ویندوز . Docker CE را برای ویندوز (پایدار) دریافت کنید. نسخه فعلی من v17.12.0-ce-win47 (15139) است
پس داکر چیست؟ در حالی که باید این مقاله را مطالعه کنید ، برای توسعه دهندگان Docker در درجه اول یک پلتفرم/مدیر برای خودکارسازی استقرار برنامه شما در یک محیط کانتینری است. هدف اصلی Docker ایجاد کانتینرهای قابل حمل و خودکفا از هر برنامه ای است (به یک برنامه node.js یا برنامه اصلی asp.net یا یک نوع برنامه سرویس ویندوز یا یک برنامه پایتون، هر چیزی که فکرش را بکنید فکر کنید). در این مثال، ما برای ساختن یک تصویر Docker از یک برنامه کنسول هسته نت کار خواهیم کرد و آن را بر روی دستگاه توسعه شما مستقر کرده و اجرا می کنیم. همچنین، من از docker برای ویندوز استفاده خواهم کرد، اما همین کار را می توان با استفاده از محیط لینوکس نیز انجام داد.
درست قبل از شروع، باید به این مقاله (و/یا این ) نیز نگاهی بیندازید ، که تفاوت بین ماشین های مجازی و کانتینرها را بیان می کند.
پس از اتمام نصب، میتوانید دستور ' docker info ' را از Power Shell یا Command Prompt اجرا کنید تا نسخه (+ چند جزئیات مهم دیگر) Docker در حال اجرا بر روی دستگاه شما را تأیید کنید.
اطمینان حاصل کنید که "Windows Containers" را اجرا می کنید. روی نماد Docker در نوار وظیفه کلیک راست کنید و بررسی کنید که "Switch to Linux containers..." نوشته شده است، به این معنی که شما از ویندوز استفاده می کنید.
بیایید یک برنامه کنسول اصلی دات نت در ویژوال استودیو ایجاد کنیم که به طور مداوم کاراکترهای تصادفی را در خروجی کنسول چاپ می کند.
اکنون ما یک برنامه کنسول هسته دات نت داریم که میتوانیم آن را روی ماشین توسعه محلی بسازیم و اجرا کنیم. F5 را فشار دهید و می توانید خروجی برنامه را ببینید. حال بعدی انتشار این برنامه عالی است. بسیار آسان است، فقط دستور ' dotnet public ' را در PS/CMD (داخل پوشه پروژه) اجرا کنید و بسته شما در کمترین زمان آماده خواهد شد. فقط برای اطمینان از اینکه همه چیز خوب است، می توانید یک اعلان PS/CMD را در داخل پوشه انتشار فعال کنید و « dotnet DockerConsoleTestApp.dll » را اجرا کنید تا مطمئن شوید برنامه شما به خوبی کار می کند.
توجه : من میتوانستم این بسته را در داخل یک ظرف نیز ایجاد کنم، اما فعلاً برای سادهتر کردن، انتخاب میکنم آن را فقط در دستگاه توسعه خودم ایجاد کنم. میتوانید در مورد اینکه چگونه میتوانید از docker به عنوان یک پلتفرم توسعه و نه تنها یک پلت فرم استقرار استفاده کنید، بیشتر بخوانید.
حالا بیایید یک تصویر برای این برنامه کلاس جهانی با استفاده از docker ایجاد کنیم تا بعدا بتوانم آن را در یک یا چند کانتینر بسته بندی کنم و تقریباً در هر جایی بدون فکر کردن به وابستگی بیشتر به محیط، آن را اجرا کنم. بیایید یک فایل docker را به راه حل خود اضافه کنیم و محتوای زیر را جایگذاری کنیم. برای مطالعه بیشتر در مورد این فایل به اینجا مراجعه کنید . باید در مورد تمام خطوط ذکر شده در آن فایل با جزئیات توضیح دهید.
- FROM microsoft/dotnet:2.0.4-runtime-nanoserver-1709 AS base
- WORKDIR /app
- COPY /bin/Debug/netcoreapp2.0/publish/ .
- ENTRYPOINT ["dotnet", "DockerConsoleTestApp.dll"]
بیایید خطوط نوشته شده در فایل docker را درک کنیم. برای شروع، من برای اجرای یک برنامه .net به یک زمان اجرا نیاز دارم، درست است؟ بنابراین چگونه می توانم ابتدا تصویری بسازم که دارای .net runtime باشد تا بتوانم بعداً کدم را داخل آن تصویر پورت کنم تا آن را قابل اجرا کنم. خوشبختانه شما نیازی به ایجاد خود ندارید. مایکروسافت (و سایر ارائه دهندگان فناوری قبلاً این تصویر را برای شما ایجاد کرده اند و شما فقط باید از یک مخزن مناسب دانلود کنید، در این مورد hub.docker.com است. معلوم می شود که اگر به اینجا بروید، مایکروسافت قبلاً یک تصویر برای شما ساخته است . با اجرای .net در داخل آن بیایید از همان زمان استفاده کنیم.
- FROM microsoft/dotnet:2.0.4-runtime-nanoserver-1709 AS base
خط بالا به داکر میگوید، بروید یک تصویر از داکر هاب به نام « میکروسافت/داتنت » و با برچسب « 2.0.4-runtime-nanoserver-1709 » دریافت کنید و یک ظرف از آن ایجاد کنید. همچنین آن را به عنوان پایه نامگذاری کنید (نامگذاری این مورد در این مورد اجباری نیست، اما در پست بعدی خواهید دید). اکنون نحوه انتخاب یک برچسب مهم است، اما در حال حاضر اجازه میدهیم از آن بگذریم و آخرین مورد موجود برای .net core 2.0 را انتخاب کنیم.
- WORKDIR /app
این خط به داکر میگوید که یک کانتینر دیگر ایجاد کند (فقط به یاد داشته باشید که بیشتر مراحلی را که در یک فایل داکر مینویسید، در واقع کانتینرهای متفاوتی را در صورت نیاز ایجاد میکند) در بالای کانتینر قبلی از مرحله قبل و یک پوشه به نام «app» در داخل کانتینر جدید ایجاد کنید. مسیر پایه (برای ویندوز درایو 'C:\' است) و مطمئن شوید که 'app' دایرکتوری فعلی داخل ظرف است. Docker ممکن است بسته به وابستگی های مختلف و برای افزایش عملکرد در استقرارهای بعدی، کانتینر قبلی را حذف کند یا نکند.
- COPY /bin/Debug/netcoreapp2.0/publish/ .
اکنون، خط بالا به Docker میگوید که همه فایلها را از پوشه انتشار ما در دایرکتوری کاری کانتینر فعلی کپی کند، که همچنان 'C:\app' است. ما از مسیر نسبی استفاده می کنیم زیرا فایل docker به همراه فایل csproj برنامه کنسول در یک پوشه قرار دارد.
- ENTRYPOINT ["dotnet", "DockerConsoleTestApp.dll"]
خط آخر به داکر می گوید که دستوری را در آخرین کانتینر ایجاد شده اجرا کند. این دستور، بدون هیچ گونه تعجب، « dotnet DockerConsoleTestApp.dll » است، همانطور که قبلاً برای تأیید برنامه منتشر شده خود اجرا کردید.
همین است، ما آماده ایم که این را در عمل ببینیم. بنابراین یک PS/CMD را در دایرکتوری پروژه خود روشن کنید (جایی که فایل docker نیز در آن قرار دارد) و ' docker build -t alphaimage ' را اجرا کنید. این به docker میگوید که دستورات فایل docker را یکی یکی اجرا کند (همانطور که قبلا توضیح داده شد) و یک تصویر به نام " alphaimage " ایجاد/ساخت (نام باید همه حروف کوچک باشد). شما می توانید به صورت اختیاری یک برچسب مانند ' docker build -t alphaimage :v1 اضافه کنید'. اگر چیزی به عنوان برچسب ارائه نشده باشد، "آخرین" در نظر گرفته می شود. بنابراین در پایان اجرا خواهید دید که چگونه تمامی مراحلی که در بالا توضیح داده شد توسط موتور docker انجام شده و تصویر مورد نظر شما را ایجاد می کند. به یاد داشته باشید که اگر تصویر پایه دات نت در رجیستری محلی شما وجود نداشته باشد، docker ابتدا همان را از داکر هاب دانلود می کند. اما بعداً وقتی کد خود را تغییر دادید و دوباره همان دستور را برای ساخت تصویر جدید اجرا می کنید. docker هوشمندانه تمام تصاویر/بخش های دانلود شده را رد می کند.
برای اطمینان از آماده بودن تصویر، ' docker images -a ' را اجرا کنید و خروجی را بررسی کنید. چند تصویر میانی نیز خواهید یافت که برای ساختن تصویر نهایی استفاده شده است.
اکنون تصویری را دارید که حاوی برنامه فوق العاده مهمی است که به تازگی ساخته اید. بنابراین اجازه دهید آن را در داخل یک ظرف اجرا کنیم و اعتبار سنجی کنیم.دستور docker run --name alphacontainer alphaimage:latest ' از PS/CMD و voila، می توانید خروجی برنامه خود را ببینید. Ctrl+C را فشار دهید تا اجرا متوقف شود.