ข้ามไปที่เนื้อหา

Add Docker support to application

โดยปกติ Project Blazor ที่สร้างขึ้นถ้าไม่ได้เลือก Enabled Docker ตั้งแต่ตอนสร้างโปรเจค หรือเป็นโปรเจคที่มีอยู่แล้ว ต้องการปรับให้โปรเจครองรับการ Deploy ด้วย Docker โดยการ

  1. คลิกขวา ที่โปรเจคที่ต้องการจะ Publish ด้วย Docker
  2. เลือก Add > Docker Support
  3. เลือก Linux

Add dockerfile

การ Generate Dockerfile โดยการ Add Docker support to project

หลังจาก Add docker support แล้ว Visual Studio จะทำการสร้างไฟล์ชื่อ Dockerfile ขึ้นมาภายในโปรเจค


Dockerfile

เนื้อหาภายในจะเป็นลำดับขั้นตอนการสร้าง container และคำสั่งจะเกี่ยวข้องกับ specification ของ application เช่น .NET SDK version เป็นต้น Dockerfile พื้นฐานสำหรับ .NET จะประกอบไปด้วย 4 ขั้นตอนหลักดังนี้

Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["BlazorApp1.csproj", "."]
RUN dotnet restore "./BlazorApp1.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "BlazorApp1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "BlazorApp1.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "BlazorApp1.dll"]
  1. ขั้นตอนการเตรียม SDK (บรรทัดที่ 1-4) ขั้นตอนนี้ Docker จะทราบว่าจะต้องไปดาว์นโหลดตัว SDK ของ .NET มาเป็น version 7.0 สำหรับ .NET7 กำหนด directory หลักเป็น /app และมีการกำหนดว่า container นี้จะเปิด port 80 และ 443 นั้นก็คือ port http และ https

  2. ขั้นตอนการ restore และ build .NET project (บรรทัดที่ 6-12) ขั้นตอนนี้ Docker จะนำ SDK ในขั้นตอนที่ 1 มาและมีการจัดเตรียมไฟล์ที่จะต้องถูก build มาที่ folder /src ซึ่งจะ build แบบ release mode และ output ออกมาที่ /app/build

  3. ขั้นตอนการ publish (บรรทีดที่ 14-15) จะมีการอ้างถึงขั้นตอนการ build ให้นำส่วนที่ build แล้วมาเข้าคำสั่ง publish ต่อ ซึ่งก็จะ publish แบบ release และ output ออกมาที่ /app/publish

  4. ขั้นตอนสุดท้าย (บรรทัดที่ 17-20) คือการ copy ไฟล์ .dll ที่ได้จากการ publish มาเก็บไว้ที่ /app และกำหนด Entrypoint หรือจุดเริ่มต้นที่ Docker จะต้องเริ่มทำงาน

ตรวจสอบการอ้างอิงโปรเจคอื่น จะต้องถูก build ด้วย

Dockerfile อาจมีการแก้ไขในภายหลังเพิ่มเติมได้เนื่องจากหากมีการ Reference project อื่นๆเข้ามา จะต้องเพิ่มขั้นตอนการ copy project ปลายทางมา build ด้วยในบรรทัดที่ 8 โดยให้ copy มาที่ /src ก่อนจะทำการ restore project