DCGI ist eine Technik, um Webseiten dynamisch mit Docker zu bedienen. Wie Sie vielleicht wissen, können World Wide Web -Server nur statische Dateien vor der Festplatte dienen. Mit einem DCGI-Server können Sie Code in Echtzeit ausführen , sodass die Webseite dynamische Informationen enthalten kann.
Für jede HTTP -Anfrage, die ein DGCI -Server empfängt, wird ein Docker -Container auf die HTTP -Anforderung abgerechnet. Im Docker -Container befindet sich eine ausführbare CGI, die die Anfrage bearbeitet. Diese ausführbare Datei könnte alles tun - und könnte in jeder Sprache oder in jeder Framework geschrieben werden.
Wow! Wir müssen keine Websites mehr erstellen, die nur statische Inhalte bedienen. Zum Beispiel könnten Sie Ihre UNIX -Datenbank in das World Wide Web "anschließen", damit die Menschen auf der ganzen Welt sie abfragen können. Sie können HTML -Formulare erstellen, damit Personen Informationen in Ihre Datenbank -Engine übertragen können. Die Möglichkeiten sind unbegrenzt.
Also, wofür ist diese Bibliothek? GO-DCGI ist eine Bibliothek zum Schreiben von DGCI-Servern. Es enthält einen GO -HTTP -Handler dcgi.Handler , der eine HTTP -Anfrage dient, indem ein Docker -Container ausgeführt wird.
Sagen Sie, Sie haben ein wirklich einfaches CGI -Skript, script.pl :
print " Content-Type: text/html nn " ;
print " <h1>Hello World!</h1> n " ; Und eine Dockerfile , um es in einen Container zu legen:
FROM perl
ADD script.pl /code/script.pl
ENTRYPOINT ["perl", "/code/script.pl"]
Bauen Sie dies in einen Behälter auf:
$ docker build -t bfirsh/example-dcgi-app .Sie können diesen Behälter über HTTP mit GO-DCGI bedienen:
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 )
}