Dockerfile
#部署golang環(huán)境
FROM golang:1.9
#下載gin包
RUN go get github.com/gin-gonic/gin
#開放端口
EXPOSE 7070
在Dockerfile目錄打開一個終端蔑担,運行
sudo docker build -t my-gin .
之后待到鏡像構建完畢之后通過
sudo docker images
可以查看到tag為latest的my-gin鏡像
REPOSITORY TAG IMAGE ID CREATED SIZE
my-gin latest 689590bc3953 28 minutes ago 756MB
這是因為我們用docker build命令的時候沒有指定my-gin的tag框杜,所以默認是latest,你也可以這樣使用:
sudo docker build -t my-gin:test .
這樣會得構建一個tag為test的my-gin鏡像
啟動容器
現(xiàn)在已經擁有一個tag為my-gin的鏡像均驶,我們需要利用這個鏡像啟動一個容器
docker run -it --rm --name gin-instance -p 7070:7070 -v /home/youngblood/Go/src/ginDocker:/go/src/ginDocker -w /go/src/ginDocker my-gin
說明
- docker run 用于從一個image上啟動一個容器
- -it 標簽以交互的方式啟動容器
- --rm 標簽在容器關閉后會會刪除該容器,查看容器命令:sudo docker ps -a
- -p 7070:7070標簽允許榮過主機的7070端口訪問docker容器中的7070端口
- -v /home/youngblood/Go/src/ginDocker:/go/src/ginDocker表示將docker容器中的/go/src/ginDocker目錄掛在到物理機的/home/youngblood/Go/src/ginDocker目錄中啥寇,/home/youngblood/Go是我物理機的GOPATH,你也可以選擇不用這個目錄
- -w /go/src/ginDocker表示打開容器中的工作目錄
- my-gin則是表示該容器使用的鏡像文件
啟動成功之后便會進入容器的/go/src/ginDocker目錄著瓶,如下
root@774e60551b73:/go/src/ginDocker#
現(xiàn)在我們在物理機上編寫ginDocker的一些功能瞳秽,新建一個main.go瓣履,寫入如下代碼
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/hello/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "hello %s", name)
})
router.Run(":7070")
}
在容器中執(zhí)行如下命令
root@774e60551b73:/go/src/ginDocker# go build ginDocker
root@774e60551b73:/go/src/ginDocker# ./ginDocker
出現(xiàn)如下結果
root@774e60551b73:/go/src/ginDocker# go build ginDocker
root@774e60551b73:/go/src/ginDocker# ./ginDocker
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /hello/:name --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on :7070
現(xiàn)在在物理機上的瀏覽器訪問localhost:7070/hello/初級賽亞人
這樣我們就完成了一個go web項目的部署