一、简介

今天介绍一下 GoLang 的 restful 服务,如何部署到 docker 容器内。本篇不详细介绍 GoLang 编程方面的知识,重点介绍已经写好的 GoLang 程序,如何部署到 docker。


二、前置条件
  • docker
    假设你有了一台 Linux 服务器(虚拟机、物理机、本机都行),已经部署且会了 docker 相关技能
  • golang
    假设你已经,准备好了 GoLang 开发环境,且有了一定的 GoLang 技能

三、准备程序

3.1 代码

如下 main.go ,准备了一个 get 请求的,可访问的 restful 服务。如下:

package main

import (
	"github.com/gin-gonic/gin"
)

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

	r.GET("/hello", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "Hello world!",
		})
	})

	r.Run(":8080")
}

在这里插入图片描述

3.2 启动程序

控制台输入 go run . 启动准备的 api ,然后浏览器访问一下 /hello 验证一下是正常的
在这里插入图片描述
访问 http://localhost:8080/hello
在这里插入图片描述

四、打包

输入下面命令,打包 GoLang 程序,打包完成后会产生一个 二进制文件,我这里的是 golang_gin ,实际会文件你的项目名称而不一样

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build

在这里插入图片描述
在这里插入图片描述

SET CGO_ENABLED=0 、SET GOOS=linux 、SET GOARCH=amd64 :这个涉及到的是交叉编译,有兴趣的可以网上深入了解一下


五、Dockerfile

接着,准备构建镜像的 Dockerfile 文件。如下

FROM alpine:3.12

RUN mkdir "/app"
WORKDIR "/app"

COPY main /app/app
RUN chmod +x /app/app
ENTRYPOINT ["./app"]

RUN chmod +x /app/app :赋予文件权限,否则启动容器,会报权限错误。这个不是必须的,得看自己的 docker 权限配置。如下:
在这里插入图片描述


六、构建镜像

接着,连接上事先准备好的 Linux 服务器(192.168.88.146),然后将 golang_gin、Dockerfile 文件上次到自己指定的应用程序目录,执行下面命令打包成镜像。如下:

docker build -t golang-hello-world:v1 .

在这里插入图片描述
docker images 可以看下,上一步构建的镜像
在这里插入图片描述


七、启动容器

镜像准备好以后,执行下面命令,将 golang-hello-world:v1 镜像,启动一个容器。如下:

docker run -p 8082:8080 -d golang-hello-world:v1

在这里插入图片描述

-p 8082:8080 : 端口映射,宿主机端口:容器内端口
-d:后台运行


八、访问 API

容器启动成功后,访问 http://192.168.88.146:8082/hello,可以看到成功。如下:
在这里插入图片描述

九、容器日志

当然,也可以验证一下是否有请求到,我们启动的容器。执行下面命令,可以看到容器日志,这个可以理解为控制台类似。如下

docker logs -f  2212a8c5232b1e3dfe285900620f4c0200fa21efdccb637a0dc9fbe6092a0301

在这里插入图片描述