之前就有做过这件事情
当时搞定了之后想说,简单吗~~~就是搞个Dockerfile而已
结果好一阵子没用就给他忘了,然后卡很久还7pupu= =
最近会继续用的原因是在学Kuberbetes,体会到了容器部署的强大之处
Source code
https://github.com/whitefloor/building_golang_with_docker_exercise
Golang code
就是个api sample连进去会有反应,有用go mod
package mainimport ("log""github.com/gin-gonic/gin")func main() {r := gin.Default()r.GET("/ping", func(c *gin.Context) {log.Println(("hello user"))c.JSON(200, gin.H{"message": "pong",})})r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")}
Dockerfile
# 小坑:记得做docker image的时候一定要命名成"Dockerfile"不然会发生错误FROM golang:1.18# 有设定WORKDIR就不需要mkdir,会自己创资料夹WORKDIR /app# COPY ./src ./destCOPY . .# RUN 用多个RUN去写的话,会产生新的image,因此最好是使用一次RUN,然后换行处理# go build的时候中过一招卡很久,没有指定-o输出档名的话,会使用资料夹预设的名称当做app name,然后ENTRYPOINT怎样都找不到RUN go mod tidy && \ go build -o myGolangApp# ENTRYPOINT docker执行的进入点,预设工作目录是/app,所以才可以用相对路径直接找到myGolangApp进入ENTRYPOINT ./myGolangApp
Build docker image and run
docker bulid -t golang_app_image .docker run --rm -p 8080:8080 -d golang_app_image
Testing
用postman或浏览器连线到
http://localhost:8080/ping
会看到response,docker用dashboard看log也会有结果