DCGI est une technique pour servir dynamiquement les pages Web avec Docker. Comme vous le savez peut-être, les serveurs Web World Wide ne peuvent servir que des fichiers statiques sur le disque. Un serveur DCGI vous permet d'exécuter du code en temps réel , de sorte que la page Web peut contenir des informations dynamiques .
Pour chaque demande HTTP qu'un serveur DGCI reçoit, un conteneur Docker est tourné vers le haut pour servir la demande HTTP. À l'intérieur du conteneur Docker se trouve un exécutable CGI qui gère la demande. Cet exécutable pourrait tout faire - et pourrait être écrit dans n'importe quelle langue ou cadre.
Ouah! Nous n'avons plus à créer des sites Web qui servent simplement du contenu statique. Par exemple, vous pouvez "connecter" votre base de données UNIX vers le World Wide Web afin que les gens du monde entier puissent l'interroger. Ou, vous pouvez créer des formulaires HTML pour permettre aux gens de transmettre des informations dans votre moteur de base de données. Les possibilités sont illimitées.
Alors, à quoi sert cette bibliothèque? GO-DCGI est une bibliothèque pour écrire des serveurs DGCI. Il comprend un gestionnaire HTTP GO, dcgi.Handler , qui sert une demande HTTP en exécutant un conteneur Docker.
Dites que vous avez un script CGI vraiment simple, script.pl :
print " Content-Type: text/html nn " ;
print " <h1>Hello World!</h1> n " ; Et un Dockerfile pour le mettre dans un conteneur:
FROM perl
ADD script.pl /code/script.pl
ENTRYPOINT ["perl", "/code/script.pl"]
Construisez-le dans un conteneur:
$ docker build -t bfirsh/example-dcgi-app .Vous pouvez servir ce conteneur sur HTTP avec 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 )
}