DCGI เป็นเทคนิคสำหรับการให้บริการเว็บเพจแบบไดนามิกกับ Docker อย่างที่คุณอาจทราบได้ว่าเวิลด์ไวด์เว็บเซิร์ฟเวอร์สามารถให้บริการไฟล์แบบคงที่จากดิสก์เท่านั้น เซิร์ฟเวอร์ DCGI ช่วยให้คุณสามารถ เรียกใช้รหัสแบบเรียลไทม์ ดังนั้นหน้าเว็บสามารถมีข้อมูล แบบไดนามิก
สำหรับการร้องขอ HTTP แต่ละครั้งที่เซิร์ฟเวอร์ DGCI ได้รับคอนเทนเนอร์ Docker จะหมุนขึ้นเพื่อให้บริการคำขอ HTTP ภายในคอนเทนเนอร์ Docker นั้นสามารถใช้งานได้ CGI ซึ่งจัดการคำขอ การดำเนินการนั้นสามารถทำอะไรก็ได้ - และสามารถเขียนได้ในภาษาหรือกรอบใด ๆ
ว้าว! เราไม่ต้องสร้างเว็บไซต์ที่ให้บริการเนื้อหาแบบคงที่อีกต่อไป ตัวอย่างเช่นคุณสามารถ "เชื่อมต่อ" ฐานข้อมูล UNIX ของคุณไปยังเวิลด์ไวด์เว็บเพื่อให้ผู้คนทั่วโลกสามารถสอบถามได้ หรือคุณสามารถสร้างแบบฟอร์ม HTML เพื่อให้ผู้คนส่งข้อมูลไปยังเอ็นจินฐานข้อมูลของคุณ ความเป็นไปได้นั้นไร้ขีด จำกัด
แล้วห้องสมุดนี้มีไว้เพื่ออะไร? Go-DCGI เป็นห้องสมุดสำหรับการเขียนเซิร์ฟเวอร์ DGCI มันมีตัวจัดการ HTTP GO, dcgi.Handler ซึ่งทำหน้าที่คำขอ HTTP โดยเรียกใช้คอนเทนเนอร์ Docker
สมมติว่าคุณมีสคริปต์ CGI ที่เรียบง่าย script.pl :
print " Content-Type: text/html nn " ;
print " <h1>Hello World!</h1> n " ; และ Dockerfile ที่จะนำไว้ในคอนเทนเนอร์:
FROM perl
ADD script.pl /code/script.pl
ENTRYPOINT ["perl", "/code/script.pl"]
สร้างสิ่งนี้ลงในคอนเทนเนอร์:
$ docker build -t bfirsh/example-dcgi-app .คุณสามารถให้บริการภาชนะนี้ผ่าน HTTP ด้วย 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 )
}