Docker
title: Docker summary: คู่มือใช้งาน Docker สำหรับ deploy scope: workflow status: active applies_to: ["docker"]
Add Docker support to application
โดยปกติ Project Blazor ที่สร้างขึ้นถ้าไม่ได้เลือก Enabled Docker ตั้งแต่ตอนสร้างโปรเจค หรือเป็นโปรเจคที่มีอยู่แล้ว ต้องการปรับให้โปรเจครองรับการ Deploy ด้วย Docker โดยการ
- คลิกขวา ที่โปรเจคที่ต้องการจะ Publish ด้วย Docker
- เลือก
Add>Docker Support - เลือก
Linux
หลังจาก Add docker support แล้ว Visual Studio จะทำการสร้างไฟล์ชื่อ Dockerfile ขึ้นมาภายในโปรเจค
Dockerfile
เนื้อหาภายในจะเป็นลำดับขั้นตอนการสร้าง container และคำสั่งจะเกี่ยวข้องกับ specification ของ application เช่น .NET SDK version เป็นต้น Dockerfile พื้นฐานสำหรับ .NET จะประกอบไปด้วย 4 ขั้นตอนหลักดังนี้
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"]
-
ขั้นตอนการเตรียม SDK (บรรทัดที่ 1-4) ขั้นตอนนี้ Docker จะทราบว่าจะต้องไปดาว์นโหลดตัว SDK ของ .NET มาเป็น version 7.0 สำหรับ .NET7 กำหนด directory หลักเป็น
/appและมีการกำหนดว่า container นี้จะเปิด port 80 และ 443 นั้นก็คือ port http และ https -
ขั้นตอนการ restore และ build .NET project (บรรทัดที่ 6-12) ขั้นตอนนี้ Docker จะนำ SDK ในขั้นตอนที่ 1 มาและมีการจัดเตรียมไฟล์ที่จะต้องถูก build มาที่ folder
/srcซึ่งจะ build แบบ release mode และ output ออกมาที่/app/build -
ขั้นตอนการ publish (บรรทีดที่ 14-15) จะมีการอ้างถึงขั้นตอนการ build ให้นำส่วนที่ build แล้วมาเข้าคำสั่ง publish ต่อ ซึ่งก็จะ publish แบบ release และ output ออกมาที่
/app/publish -
ขั้นตอนสุดท้าย (บรรทัดที่ 17-20) คือการ copy ไฟล์
.dllที่ได้จากการ publish มาเก็บไว้ที่/appและกำหนด Entrypoint หรือจุดเริ่มต้นที่ Docker จะต้องเริ่มทำงาน
Dockerfile อาจมีการแก้ไขในภายหลังเพิ่มเติมได้เนื่องจากหากมีการ Reference project อื่นๆเข้ามา จะต้องเพิ่มขั้นตอนการ copy project ปลายทางมา build ด้วยในบรรทัดที่ 8 โดยให้ copy มาที่ /src ก่อนจะทำการ restore project