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

Deployment

ในขั้นตอนนี้ ให้ remote เข้ามาที่ server ที่ต้องการจะ deploy application การ deploy จะมีด้วยกัน 2 วิธีการดังนี้

1. Public accessible deployment

การ deploy แบบมาตรฐาน สามารถมี request จากภายนอก server เข้ามาทาง ip address หรือทาง domain name ก็ได้

Step1: Docker pull image

docker pull [image registry address]:[tag]

Step2: Docker run image

docker run -d -p [port ที่ต้องการเข้าผ่าน http]:80 [port ที่ต้องการเข้าผ่าน https]:443 \
    -e ASPNETCORE_ENVIRONMENT=Production \
    --name [container-name] [image registry address]:[tag]

การกำหนด -e ASPNETCORE_ENVIRONMENT=Production เป็นการกำหนดให้ .NET Application ทำงานแบบ Production environment ค่า appsetting จะถูกอ่านจาก appsettings.json และ appsettings.production.json รวมถึงมีการเปิดใช้งาน Hsts และ Error page ("/Error") (อาจมีความเปลี่ยนแปลง อ้างอิงจาก program.cs)

ข้อควรระวัง

เพื่อเป็นการป้องกันไม่ให้ภายนอก server มีการ request ผ่าน ip address ที่ซึ่งเป็นการติดต่อกันผ่าน protocol http ซึ่งไม่มีความปลอดภัยเกิดขึ้น และผู้ใช้ไม่ควรทราบถึง ip address ของ server จึงแนะนำให้ใช้ reverse-proxy หากสามารถทำได้


2. Reverse-proxy deployment

การทำ reverse-proxy เป็นการปิดกั้นการเข้าถึง container จากภายนอกผ่าน ip address โดยการ deploy ไว้ที่ localhost หรือ 127.0.0.1 ภายในเครื่อง server เท่านั้นและใช้ proxy ตรวจสอบว่ามี domain ชื่อที่กำหนดเข้ามาหรือไม่ ถ้ามีก็จะ forward มาให้ service ภายใน localhost

Step1: Docker pull image

docker pull [image registry address]:[tag]

Step2: Docker run image

ความแตกต่างจากการ Deploy ปกติ จะมีการกำหนด ip address เป็น localhost ในส่วนของ -p parameter

docker run -d -p 127.0.0.1:[port ที่ต้องการเข้าผ่าน http]:80 127.0.0.1:[port ที่ต้องการเข้าผ่าน https]:443 -e ASPNETCORE_ENVIRONMENT=Production --name [container-name] [image registry address]:[tag]

localhost ip address

127.0.0.1 คือ ip address ของ localhost


ลองตรวจสอบ

ในกรณีที่ application มีการ access ถึง storage สำหรับการเก็บข้อมูล จำเป็นจะต้อง bind volume หรือ -v [path ภายนอก]/[path ภายใน container] เพื่อทำให้ application ส่งไฟล์ภายใน storage ของ container ออกมาที่ระบบปฏิบัติการข้างนอก ไฟล์ส่วนนี้จะไม่หายไปไหนแม้ว่า container จะถูก remove ไปแล้ว