معرفی
کلمهای که ممکن است این روزها شنیده باشید، کانتینرها و مزایای بسیاری نسبت به مفهوم ماشینهای مجازی سنتی است که در گذشته دیدهایم. بدون شک، کانتینرها یک راه عالی برای ایجاد میکروسرویس ها و زندگی آنها در فضای خود هستند که جابجایی و ارتقاء آنها را آسان می کند. همچنین، استقرار در فضای ابری با کانتینرها بسیار کارآمد می شود زیرا ارائه دهندگان ابری مانند Microsoft Azure راه حل های خارج از جعبه را برای ذخیره و میزبانی ظروف ارائه می دهند. در این مقاله به قرار دادن یک برنامه Web API هسته دات نت در داخل یک کانتینر، میزبانی کانتینر در یک ارکستراتور که کانتینر را برای استفاده در دسترس قرار می دهد و در نهایت اجرا و استفاده از این برنامه کانتینری را بررسی می کنیم.
ابزارهایی که از آنها استفاده خواهیم کرد
فناوری کانتینری که ما استفاده خواهیم کرد Docker است. این پشتیبانی یکپارچه در Visual Studio 2019 دارد و از این رو، اضافه کردن پشتیبانی Docker به برنامه ما هم در زمان ایجاد و حتی پس از ایجاد برنامه بسیار آسان است. ارکستراتوری که ما استفاده خواهیم کرد Docker Desktop است. این برای توسعه و آزمایش ایده آل است.
با این حال، برای میزبانی راه حل Enterprise، از گزینه های پیشرفته تری مانند Kubernetes استفاده می شود. با این حال، هنگامی که نحوه استفاده از ارکستراتور را درک کردید، این دانش را می توان برای همه انواع اعمال کرد.
Docker Desktop را دانلود و نصب کنید
اولین قدم دانلود آخرین نسخه Docker Desktop و نصب آن است. از آنجایی که با ویندوز 10 کار خواهم کرد، نسخه آن را برای ویندوز دانلود و نصب کردم.
با استفاده از دستور زیر می توانید نسخه را تأیید کنید:
![برنامه هسته دات نت خود را با استفاده از داکر کانتینر کنید](http://pezhvak24.ir/dl/codenevis/firstcode/article/containerize-your-net-core-application-using-docker/Images/Docker%20Version.jpg)
ایجاد برنامه Web API و کانتینری کردن آن
اکنون به ایجاد برنامه ASP.NET Core Web API در Visual Studio 2019 ادامه می دهیم. من از نسخه Community استفاده می کنم. ما نام این برنامه را "WebAppDocker" می گذاریم.
ما پشتیبانی Docker را در زمان ایجاد انتخاب نمیکنیم و بعداً آن را اضافه میکنیم. پس از ایجاد برنامه، گزینه زیر را انتخاب می کنیم:
سپس گزینه Windows OS را انتخاب کنید:
![برنامه هسته دات نت خود را با استفاده از داکر کانتینر کنید](http://pezhvak24.ir/dl/codenevis/firstcode/article/containerize-your-net-core-application-using-docker/Images/Select%20Target%20OS.jpg)
پس از تکمیل فرآیند، یک فایل docker به پروژه اضافه می شود. برنامه اکنون با استفاده از داکر کانتینری شده است. اطمینان حاصل کنید که این شبیه به مثال زیر است:
- #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
- #Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
- #For more information, please see https://aka.ms/containercompat
- FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1903 AS base
- WORKDIR /app
- EXPOSE 80
- FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1903 AS build
- WORKDIR /src
- COPY ["WebAppDocker/WebAppDocker.csproj", "WebAppDocker/"]
- RUN dotnet restore "WebAppDocker/WebAppDocker.csproj"
- COPY . .
- WORKDIR "/src/WebAppDocker"
- RUN dotnet build "WebAppDocker.csproj" -c Release -o /app/build
- FROM build AS publish
- RUN dotnet publish "WebAppDocker.csproj" -c Release -o /app/publish
- FROM base AS final
- WORKDIR /app
- COPY –from=publish /app/publish .
- ENTRYPOINT ["dotnet", "WebAppDocker.dll"]
گام بعدی اضافه کردن Container Orchestrator Support است. این یک پروژه جدید به نام "docker-compose" ایجاد می کند. این پروژه دارای فایلی به نام "docker-compose.yml" خواهد بود.
این فایل باید به شکل زیر باشد:
- version: '3.4'
- services:
- webappdocker:
- image: webappdocker
- build:
- context: .
- dockerfile: WebAppDockerDockerfile
- ports:
- – "8080:80"
این فایل برای راه اندازی برنامه کانتینری شده در Docker Desktop Orchestrator استفاده خواهد شد. در این فایل می بینیم که نام کانتینر "webappdocker" است. از فایل docker ایجاد شده در مرحله قبل استفاده کرد. آخرین چیزی که در اینجا باید به آن توجه کرد این است که ما ترافیک را از پورت 8080 روی هاست به پورت 80 روی کانتینر هدایت می کنیم. اگر به فایل docker برنامه نگاه کنیم، می بینیم که وب API را در پورت 80 کانتینر در معرض نمایش قرار می دهیم.