DCGI هي تقنية لخدمة صفحات الويب ديناميكية مع Docker. كما تعلمون ، يمكن لخوادم الويب في جميع أنحاء العالم تقديم ملفات ثابتة فقط من القرص. يتيح لك خادم DCGI تنفيذ التعليمات البرمجية في الوقت الفعلي ، بحيث يمكن أن تحتوي صفحة الويب على معلومات ديناميكية .
لكل طلب HTTP الذي يتلقاه خادم DGCI ، يتم نسج حاوية Docker لخدمة طلب HTTP. داخل حاوية Docker هي CGI قابلة للتنفيذ تتولى الطلب. يمكن للتنفيذ أن يفعل أي شيء - ويمكن أن يكتب بأي لغة أو إطار عمل.
رائع! لم يعد علينا بناء مواقع الويب التي تخدم محتوى ثابتًا. على سبيل المثال ، يمكنك "توصيل" قاعدة بيانات UNIX الخاصة بك على شبكة الويب العالمية حتى يتمكن الأشخاص في جميع أنحاء العالم من الاستعلام عنها. أو يمكنك إنشاء نماذج HTML للسماح للأشخاص بنقل المعلومات إلى محرك قاعدة البيانات. الاحتمالات لا حدود لها.
إذن ، ما هي هذه المكتبة؟ GO-DCGI هي مكتبة لكتابة خوادم DGCI. ويشمل معالج GO HTTP ، dcgi.Handler ، الذي يخدم طلب HTTP عن طريق تشغيل حاوية Docker.
قل أنك حصلت على نص CGI بسيط حقًا ، script.pl :
print " Content-Type: text/html nn " ;
print " <h1>Hello World!</h1> n " ; و Dockerfile لوضعها داخل حاوية:
FROM perl
ADD script.pl /code/script.pl
ENTRYPOINT ["perl", "/code/script.pl"]
بناء هذا في حاوية:
$ docker build -t bfirsh/example-dcgi-app .يمكنك خدمة هذه الحاوية عبر HTTP مع GO-DCGI:
package main
import (
"net/http"
dcgi "github.com/bfirsh/go-dcgi"
"github.com/docker/engine-api/client"
)
func main () {
cli , err := client . NewClient ( "unix:///var/run/docker.sock" , "v1.23" , nil , nil )
if err != nil {
panic ( err )
}
http . Handle ( "/" , & dcgi. Handler {
Image : "bfirsh/example-dcgi-app" ,
Client : cli ,
})
http . ListenAndServe ( ":80" , nil )
}