Deployment
ในขั้นตอนนี้ ให้ remote เข้ามาที่ server ที่ต้องการจะ deploy application การ deploy จะมีด้วยกัน 2 วิธีการดังนี้
1. Public accessible deployment
การ deploy แบบมาตรฐาน สามารถมี request จากภายนอก server เข้ามาทาง ip address หรือทาง domain name ก็ได้
Step1: Docker pull image
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
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 ไปแล้ว