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

Publishing Docker Image

ก่อนการ Publish Docker Image จะต้องตรวจสอบความถูกต้องของการ configuration เช่น appsettings.json ที่อาจจะมีการใช้กันในต่าง environment

Deploy แบบ reverse-proxy

การ Deploy แบบ reverse proxy ตัว application จะทำงานบน http (port 80) เท่านั้น แต่จะถูกเข้าถึงจาก https://domain-name แทน ดังนั้นจะต้องทำการ Disabled Https Redirection function ภายในไฟล์ program.cs ก่อนการ publish

program.cs
...

//Comment this line
//app.UseHttpsRedirection();

app.UseStaticFiles();

app.UseRouting();

app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

ขั้นตอนการ Publish

ในกรณีที่ไม่เคยมีการ Publish Visual Studio จะต้องสร้าง profile การ publish ก่อน ซึ่งจะต้องกรอก address ของ project (registry.in.psu.ac.th/[group-name]/[project-name]) และ Credential สำหรับการยืนยันตัวตน (PSU Passport) เมื่อสร้างเสร็จแล้ว การ publish ครั้งต่อไป Visual Studio ก็จะ default profile ไว้ให้ สามารถตั้ง image tag และกด publish ได้เลย

การ publish อาจใช้เวลา 30 วินาทีถึง 5 นาที ขึ้นกับความใหญ่ของโปรเจคและการ Reference project เนื่องจากต้องมีการ build ทุกโปรเจคและจะมีส่วนของการ upload หรือ push image ไปยัง gitlab

Publish with docker

การ Publish ด้วย docker

หมายเหตุ

ในการ publish ด้วย docker จะต้องทำการเปิด Docker desktop ให้รันอยู่ใน background process


การกำหนด Image Tag

การกำหนด tag ของ image จะต้องสามารถ track version ของ application ได้ การตั้งชื่อ tag สามารถใช้ได้ทั้งตัวอักษรภาษาอังกฤษและตัวเลขรวมถึงเครื่องหมาย

โดยมาตรฐานจะตั้งเป็นเลข version แบบ semantic เช่น 1.2.20 ขึ้นกับ feature หรือการแก้ไขแบบ minor-major ที่สามารถ track กลับไปยัง changelog ได้ หรือถ้าต้องการทำ version ย่อยไม่ต้อง track ทุก image สามารถตั้งค่าให้ Visual Studio Generate tag on publish ได้ ผ่านการตั้งค่าหน้า publish

Image tag

Auto generate image tag

การตั้งค่าให้ Visual Studio Generate tag on publish นั้นจะได้ tag เป็น วันเดือนปีและเวลา ที่ publish เช่น 20230506110322

format: [ปี ค.ศ.][เดือน][วัน][เวลา(-7 ชั่วโมง)]

ข้อควรระวัง

เนื่องจากการ Deploy เรามักจะ pull image ที่เป็น version latest ซึ่งในขั้นตอนนี้เองเราตั้งค่าให้ Visual Studio สร้าง tag ขึ้นมาให้ ตัว tag latest จึงไม่ถูกสร้าง ดังนั้นทุกครั้งที่มีการ publish ควรทำ 2 รอบ รอบที่ 1 คือแบบ Generate tag on publish และรอบที่ 2 คือแบบ custom tag ชื่อ latest เพื่อป้องกันการมองหา image ไม่เจอและการได้ image ผิด version