DCGI es una técnica para servir páginas web dinámicamente con Docker. Como sabrán, los servidores web mundiales solo pueden servir archivos estáticos en el disco. Un servidor DCGI le permite ejecutar código en tiempo real , para que la página web pueda contener información dinámica .
Para cada solicitud HTTP que recibe un servidor DGCI, se gira un contenedor Docker para atender la solicitud HTTP. Dentro del contenedor Docker hay un ejecutable de CGI que maneja la solicitud. Ese ejecutable podría hacer cualquier cosa, y podría escribirse en cualquier idioma o marco.
¡Guau! Ya no tenemos que construir sitios web que solo sirvan contenido estático. Por ejemplo, podría "conectar" su base de datos Unix a la World Wide Web para que las personas de todo el mundo puedan consultarla. O bien, puede crear formularios HTML para permitir a las personas transmitir información al motor de su base de datos. Las posibilidades son ilimitadas.
Entonces, ¿para qué sirve esta biblioteca? Go-DCGI es una biblioteca para escribir servidores DGCI. Incluye un controlador GO HTTP, dcgi.Handler , que sirve una solicitud HTTP al ejecutar un contenedor Docker.
Digamos que tienes un script CGI realmente simple, script.pl :
print " Content-Type: text/html nn " ;
print " <h1>Hello World!</h1> n " ; Y un Dockerfile para ponerlo dentro de un contenedor:
FROM perl
ADD script.pl /code/script.pl
ENTRYPOINT ["perl", "/code/script.pl"]
Construya esto en un contenedor:
$ docker build -t bfirsh/example-dcgi-app .Puede servir este contenedor a través de HTTP con 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 )
}