Docker執行Golang Web服務
阿新 • • 發佈:2018-12-21
Golang程式碼
import (
"net/http"
"io"
)
func main() {
http.HandleFunc("/",helloHandle)
http.ListenAndServe(":80",nil)
}
func helloHandle(rw http.ResponseWriter,r *http.Request) {
io.WriteString(rw,"hello world!")
}
簡單的提供三種方式
1.golang映象中提供編譯和執行環境,所以映象特別的大,直接將go工程的所有程式碼和資源打包複製到容器中,在容器中編譯執行
Dockerfile內容如下:
# 得到最新的 golang docker 映象 FROM golang:latest # 在容器內部建立一個目錄來儲存我們的 web 應用 RUN mkdir -p /go/src/go_web #接著使它成為工作目錄。 WORKDIR /go/src/go_web/ # 複製 go_web 目錄到容器中 COPY . /go/src/go_web/ #編譯,編譯成可執行檔案 RUN go build /go/src/go_web/main.go # 設定 PORT 環境變數 ENV PORT 80 # 給主機暴露 80 埠,這樣外部網路可以訪問你的應用 EXPOSE 80 # 告訴 Docker 啟動容器執行的命令 CMD /go/src/go_web/main
構建映象
#docker build -t main .
執行容器
#docker run -d -p 80:80 main //後臺執行
或
#docker run -it -p 80:80 main //提供互動式shell
如果工程服務中訪問了Host的MySql則使用如下命令執行
#docker run -d --net=host -p 80:80 main
2.在容器中直接執行可執行檔案,還可以在容器中做一些sh操作,還是依賴於golang映象
Dockerfile內容如下:
# 得到最新的 golang docker 映象 FROM golang:latest # 在容器內部建立一個目錄來儲存我們的 web 應用,接著使它成為工作目錄。 RUN mkdir -p /go_web WORKDIR /go_web/ # 複製 web-app 目錄到容器中 COPY goweb /go_web/ # 設定檔案許可權 RUN chmod 777 goweb # 告訴 Docker 啟動容器執行的命令 CMD ["/go_web/goweb"]
構建映象
#docker build -t go_web .
執行容器
#docker run -it -p 80:80 go_web
如果 docker run 指定了其他命令,CMD 指定的預設命令將被忽略。
#docker run -it -p 80:80 go_web /go_web/goweb
3.在容器中直接執行可執行檔案,依賴scratch映象,這個映象是空的,裡面沒有sh工具,所以只能簡單的執行可執行檔案,不能進行其他操作,連最基本的 /bin,/usr, /lib, /dev 都沒有
Dockerfile內容如下:
# 得到最新的 scratch docker 映象
FROM scratch
# 複製 main 目錄到容器中
COPY main /
# 告訴 Docker 啟動容器執行的命令
CMD ["/main"]
構建映象
#docker build -t main .
執行容器
#docker run -it -p 80:80 main