今天介绍一下 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