- 先新建一个文件夹,该文件夹命名为项目名称
- 该项目文件夹下在新建3个文件夹,分别为:
● bin
● pkg
● src
注:
● bin目录存放项目编译后生成的二进制文件,在Windows平台下就是.exe文件。
● pkg目录,存放项目所依赖的各种包。
● src目录,存放项目源代码。
● 同时要注意对项目进行分层,整个项目只有一个mian.go文件 - 使用GolandIDE打开该项目,并构建mod模块来管理各种包的依赖关系。初始化mod模块的命令为:
go mod init 项目名称 - 在main.go文件中书写如下代码,构建一个简单的go web项目,代码如下所示:
package main
import “github.com/gin-gonic/gin”
func main() {
r := gin.Default()
r.GET(“/ping”, func(c *gin.Context) {
c.JSON(200, gin.H{
“message”: “golang-tech-stack.com”,
})
})
r.Run() //listen and serve on 0.0.0.0.8080
}
通过代码可知,项目使用gin框架来构建一个简单的web项目,项目成功运行后,系统默认在8080端口进行监听。并且浏览器端通过如下路径进行访问:
localhost:8080/ping
注:
● localhost为本机IP地址(通过在cmd下输入:ipconfig即可查看本机ip)。
● 之所以要在端口后加/ping,是因为/ping是我们在main.go文件中定义的路由。
项目构建并且访问成功,前端页面如下图所示:
后端页面如下图所示:
200是状态码,表示访问成功。
5. 要将golang项目部署到docker,需要新建一个Dockerfile文件。文件内容如下:
FROM golang:1.18-alpine
为我们的镜像设置必要的环境变量
ENV GO111MODULE=on
GOPROXY=https://goproxy.cn,direct
CGO_ENABLED=0
GOOS=linux
GOARCH=amd64
WORKDIR /project/go-docker/
COPY go.* ./
RUN go mod download
COPY . .
RUN go build -o /project/go-docker/build/myapp .
EXPOSE 8080
ENTRYPOINT [ “/project/go-docker/build/myapp” ]
● FROM golang:1.18-alpine:将golang:1.18-alpine用作此docker构建的基础镜像
● ENV:环境配置:用来配置代理、编译环境
● WORKDIR:工作目录路径
● COPY go.* ./:从项目复制go.mod&go.sum文件到工作目录。
● RUN go mod download:从go modules下载项目依赖。
● COPY . .:将我们项目中的所有内容复制到工作目录中。
● RUN go build -o /project/go-docker/build/myapp .:在工作目录中构建我们的项目并将其/project/go-docker/build/myapp作为二进制文件输出。
● EXPOSE 8080:告诉docker我们的代码将暴露在端口8080下。
● ENTRYPOINT [ “/project/go-docker/build/myapp” ]:当我们运行这个镜像的容器时,它将从我们构建的可执行文件开始执行。
6. 各种配置完成之后,在centOS7中使用docker将该项目编译成docker镜像。编译命令为:
docker build -f Dockerfile -t test-go-docker:latest .
● -f flag是我们的Dockerfile
● -t tag是镜像标签
7. 编译完成之后,通过docker images来查看所有的镜像文件。
8. 运行镜像,docker会根据该镜像构建一个容器,运行命令为:
docker run -d -p 8080:8080 test-go-docker:latest
● -d表示后台运行
● 8080:8080表示将centOS的8080端口,映射到Goland中的8080端口。
9. **在浏览器端输入如下地址即可访问我们部署到docker中的项目:
192.168.1.103:8080/ping
192.168.1.103是centOS系统的IP地址,查看centOS系统的IP地址输入如下指令便可:
ip address show
总结
对Dockerfile文件中为什么要这样写不太清楚,对部署golang项目到docker中也不太清楚,有一些地方比较模糊,下去多看看相关的视频。