docker 部署go项目

臭大佬 2022-08-12 12:01:12 320
Go 
简介 docker 部署go项目

说明

代码主要分为两块,一块是go代码块,另一个是构建脚本
目录结构如下

-- Dockerfile  // docker脚本
-- go_run.sh  // 启动go脚本
-- go-build.sh // 构建脚本
-- main.go  // go 入口文件

各文件说明:

main.go 程序启动一个go服务,并且监听5005端口;
Dockerfile 构建镜像
go-build.sh 执行构建脚本,所有的步骤都加载在里面了,
go_run.sh 执行打包好的go文件

执行流程

运行./go-build.go文件,执行里面的操作,先是打包go服务,然后构建docker镜像,最后启动容器.

各文件内容

Dockerfile

FROM alpine:latest
WORKDIR /server
EXPOSE 5005
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
ADD ./go_run /server/go_run
RUN  chmod u+x /server/go_run
COPY ./go_run.sh /server/go_run.sh
RUN chmod u+x /server/go_run.sh
CMD ["/server/go_run.sh"]

go_run.sh

#!/bin/sh
exec /server/go_run

go-build.go

#!/bin/bash
# 构建程序
test="export GO111MODULE=on && CGO_ENABLED=1 GOOS=linux GOARCH=amd64; go mod tidy; go build  -o 'go_run' main.go;"
bash -c "$test"

# 构建docker image
docker build -t go-test/develop .
# 构建docker container

# 删除旧容器1
docker stop go-test-20009;docker rm go-test-20009
# 新建容器1 外部20009端口映射到容器内5005端口
docker run -itd -v :/www/wwwroot/go-run/:/data/log/ -p 20009:5005 --name go-test-20009 go-test/develop:latest

main.go

package main

import (
    "net/http"

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

var db = make(map[string]string)

func setupRouter() *gin.Engine {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.String(http.StatusOK, "pong")
    })
    return r
}
func main() {
    r := setupRouter()
    r.Run(":5005")
}

构建

./go-build.go

访问端口

可以使用ip+端口进行访问:

nginx 反向代理

# 反向代理配置
server
{
    listen 80;
    server_name xxx.choudalao.com;

    # 其他配置 ....

    location / {
         proxy_pass http://127.0.0.1:20009;# http://xxx.com;# 也可以是域名
    }
}

反射后访问

反射后,可以使用域名访问