O DCGI é uma técnica para servir páginas da web dinamicamente com o Docker. Como você deve saber, os servidores da World Wide Web podem servir apenas arquivos estáticos fora do disco. Um servidor DCGI permite executar o código em tempo real , para que a página da web possa conter informações dinâmicas .
Para cada solicitação HTTP que um servidor DGCI recebe, um contêiner do Docker é criado para atender à solicitação HTTP. Dentro do contêiner do Docker, há um executável do CGI que lida com a solicitação. Esse executável poderia fazer qualquer coisa - e pode ser escrito em qualquer idioma ou estrutura.
Uau! Não precisamos mais criar sites que apenas sirvam de conteúdo estático. Por exemplo, você pode "conectar" o seu banco de dados UNIX à rede mundial de pessoas para que pessoas em todo o mundo pudessem consultá -lo. Ou você pode criar formulários HTML para permitir que as pessoas transmitam informações para o seu mecanismo de banco de dados. As possibilidades são ilimitadas.
Então, para que serve essa biblioteca? GO-DCGI é uma biblioteca para escrever servidores DGCI. Inclui um manipulador de http go, dcgi.Handler , que serve uma solicitação HTTP executando um contêiner do docker.
Digamos que você tenha um script CGI muito simples, script.pl :
print " Content-Type: text/html nn " ;
print " <h1>Hello World!</h1> n " ; E um Dockerfile para colocá -lo dentro de um recipiente:
FROM perl
ADD script.pl /code/script.pl
ENTRYPOINT ["perl", "/code/script.pl"]
Construa isso em um contêiner:
$ docker build -t bfirsh/example-dcgi-app .Você pode servir este contêiner sobre HTTP com 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 )
}