使用gin编写Go的后端程序,然后使用docker打包成镜像并在我们的阿里云ECS上进行部署

编写Go后端程序

项目目录如下:

1
2
3
4
go-web
├── go.mod
├── main.go
├── Dockerfile

main.go文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package main

import (
"github.com/gin-gonic/gin"
"net/http"
"time"
)

/**
* @Author: yirufeng
* @Date: 2021/7/10 9:04 下午
* @Desc:
**/

type User struct {
Username string `json:"username"`
}

func main() {
engine := gin.Default()

engine.GET("/", func(c *gin.Context) {
startTime := time.Now()

c.JSON(http.StatusOK, gin.H{
"method": http.MethodGet,
"elapsedTime/ms": time.Since(startTime).Milliseconds(),
})
})

engine.POST("/", func(c *gin.Context) {
startTime := time.Now()

var u User
err := c.BindJSON(&u)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"error": err.Error(),
})
return
}

c.JSON(http.StatusOK, gin.H{
"method": http.MethodPost,
"elapsedTime/ms": time.Since(startTime).Milliseconds(),
"username": u.Username,
})
})

engine.Run(":8081")
}

构建镜像

  1. 在项目根目录下编写Dockerfile文件
  2. 使用编写好的Dockerfile构建镜像
    1. 执行命令:docker build -t first_go .-t 后面指定的是打包出来的镜像名字first_go 并且.表示从当前目录下的Dockerfile进行构建

什么是Dockerfile:Dockerfile 文件是用于定义 Docker 镜像生成流程的配置文件,文件内容是一条条指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建;这些指令应用于基础镜像并最终创建一个新的镜像。你可以认为用于快速创建自定义的 Docker 镜像

之前的Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
FROM golang:1.14 as mod
ENV GOPROXY https://goproxy.cn
WORKDIR /root/

COPY ./ ./

COPY go.mod ./
RUN go mod download

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main main.go

EXPOSE 8081
ENTRYPOINT ["./main"]

由于Golang基础镜像太大,因此推荐在本地编译出二进制之后直接在镜像里面拷贝二进制即可,因此最后的Dockerfile如下:

1
2
3
4
FROM alpine:latest
COPY ./main /main
EXPOSE 8081
CMD ["./main"]

上传镜像到docker hub

  1. 创建docker hub的账号:熟记用户名与密码,后面我们需要在本机上面进行配置
  2. 本机上使用docker login -u dockerhub的用户名 -p dockerhub的密码登录到dockerhub
  3. 给我们本地构建出的镜像打上tag:docker tag 镜像名 用户名/镜像名
  4. 上传镜像:docker push 用户名/镜像名

服务器下载并运行镜像

  1. 登入服务器
  2. 下载镜像:docker pull 用户名/镜像名
  3. 运行镜像:docker run -p 主机端口:我们镜像中的端口 -d 用户名/镜像 就可以在端口映射之后使用后台运行的方式运行起来我们的应用

客户端访问

这里使用curl模拟客户端

直接使用命令curl -d '{"username":"123"} -X POST' 服务器的IP:8081,将会向指定IP的服务器携带着数据username=123发送POST请求

返回的结果如下:2XoJ2J

References

  1. 将Golang应用部署到Docker:讲解了docker镜像依赖的配置文件以及docker镜像中如何与我们的mysql镜像进行连接
  2. 使用 Docker 构建 Go 应用
  3. Docker命令大全
  4. Docker build 命令
  5. Docker 将go项目打包成Docker镜像
  6. Docker镜像推送(push)到Docker Hub
  7. 如何将自己的镜像上传到Docker hub上
  8. docker中的命令参数(小白常用)
  9. curl命令使用
  10. Docker 创建镜像、修改、上传镜像

评论