DCGI adalah teknik untuk melayani halaman web secara dinamis dengan Docker. Seperti yang Anda ketahui, server World Wide Web hanya dapat menyajikan file statis dari disk. Server DCGI memungkinkan Anda untuk menjalankan kode secara real-time , sehingga halaman web dapat berisi informasi dinamis .
Untuk setiap permintaan HTTP yang diterima server DGCI, wadah Docker diputar untuk melayani permintaan HTTP. Di dalam wadah Docker ada CGI yang dapat dieksekusi yang menangani permintaan tersebut. Yang dapat dieksekusi itu dapat melakukan apa saja - dan dapat ditulis dalam bahasa atau kerangka apa pun.
Wow! Kami tidak lagi harus membangun situs web yang hanya melayani konten statis. Misalnya, Anda dapat "menghubungkan" database UNIX Anda ke World Wide Web sehingga orang -orang di seluruh dunia dapat menanyakannya. Atau, Anda dapat membuat formulir HTML untuk memungkinkan orang mengirimkan informasi ke mesin database Anda. Kemungkinannya tidak terbatas.
Jadi, untuk apa perpustakaan ini? Go-DCGI adalah perpustakaan untuk menulis server DGCI. Ini termasuk penangan GO HTTP, dcgi.Handler , yang melayani permintaan HTTP dengan menjalankan wadah Docker.
Katakanlah Anda memiliki skrip CGI yang sangat sederhana, script.pl :
print " Content-Type: text/html nn " ;
print " <h1>Hello World!</h1> n " ; Dan Dockerfile untuk memasukkannya ke dalam wadah:
FROM perl
ADD script.pl /code/script.pl
ENTRYPOINT ["perl", "/code/script.pl"]
Bangun ini menjadi wadah:
$ docker build -t bfirsh/example-dcgi-app .Anda dapat melayani wadah ini melalui HTTP dengan 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 )
}