DCGI - это метод для динамического обслуживания веб -страниц с Docker. Как вы, возможно, знаете, World Wide Web Servers может обслуживать только статические файлы с диска. Сервер DCGI позволяет выполнять код в режиме реального времени , поэтому веб-страница может содержать динамическую информацию.
Для каждого HTTP -запроса, который получает сервер DGCI, контейнер Docker развернулся для обслуживания HTTP -запроса. Внутри контейнера Docker находится исполняемый файл CGI, который обрабатывает запрос. Этот исполняемый файл может сделать что угодно - и может быть написано на любом языке или рамках.
Ух ты! Мы больше не должны создавать веб -сайты, которые просто обслуживают статический контент. Например, вы могли бы «подключить» свою базу данных UNIX во всемирную паутину, чтобы люди во всем мире могли запросить ее. Или вы можете создать HTML -формы, чтобы позволить людям передавать информацию в вашем двигателе базы данных. Возможности безграничны.
Итак, для чего эта библиотека? Go-DCGI-это библиотека для написания серверов DGCI. Он включает в себя обработчик http, 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 )
}