Docker部署go项目

1 篇文章 0 订阅
本文介绍了如何在Go项目中使用gomod管理依赖,详细步骤包括初始化模块、编译项目以及设置GO111MODULE环境变量。接着讲解了gobuild的不同用法,并提供了Dockerfile模板,展示如何在Docker环境中构建Go应用镜像,确保依赖的正确引入。
摘要由CSDN通过智能技术生成

最近用go写了一个web应用,但用docker部署时候,对于如何加入依赖的第三方包,产生了困惑,这边感谢大D的解惑,下面开始 docker部署go开发的web应用

一、go mod

1、什么是go mod

在桌面新建一个文件夹HelloWorld,在HelloWorld里新建index.go

// /Users/gumkk/Desktop/HelloWorld/index.go 文件
package main
import (
    "github.com/jinzhu/configor"
    "fmt"
)
func main() {
    fmt.Println("使用外部包测试", configor.Config{})
}

运行结果:异常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjhQULWk-1607442191931)(https://img.hacpai.com/file/2019/08/屏幕快照20190808上午11.43.38-5fbc188b.png)]

  • go的项目需要引入第三库时,需要将项目放到$GOPATH/src目录下,否则报错
  • 如果想在你磁盘的任意位置运行你的go程序,你需要go mod,一个包依赖管理工具
2、go mod初尝试
$ go mod init testDemo

运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-glaI2e0g-1607442191933)(https://img.hacpai.com/file/2019/08/屏幕快照20190808下午12.13.05-8013fff7.png)]

  • 出现go: creating new go.mod: module testDemo表示初始化成功
  • go mod init 后面定义你的项目名,当前目录会产生一个go.mod的文件
$ go run index.go

`运行结果:成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mhtaq4zU-1607442191934)(https://img.hacpai.com/file/2019/08/屏幕快照20190808下午12.13.35-cdeefbe2.png)]

  • 再次运行index.go文件,成功,当前目录会产生一个go.sum的文件
3、go mod 管理

可以用环境变量 GO111MODULE 开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是 auto。

  • GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。
  • GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。
  • GO111MODULE=auto 在 GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。

二、go build

基于上面使用go mod管理依赖包的项目HelloWorld,进行如下几种方式编译,来熟悉go build命令,更多详情请看go build命令

1、go build 无参数编译
$ go build
$ ls
go.mod  go.sum  index.go  testDemo

编译结果:产生testDemo文件, 默认为当前目录的项目名(go mod init testDemo),建议项目名和你根目录文件名一致

2、go build+文件列表
$ go build index.go
$ ls
go.mod  go.sum  index  index.go

编译结果:产生index文件,和编译的文件名一致,编译多个文件时,默认以第一个文件名命名

3、go build+包
$ go build testDemo
$ ls
go.mod   go.sum   index.go   testDemo

编译结果:产生testDemo文件,当前包名为:testDemo(系统GOPATH目录下的项目,包名为:项目根目录文件名)

4、go build 编译时的附加参数
附加参数备注
-o指定编译后生成的文件名
-v编译时显示包名
-p n开启并发编译,默认情况下该值为 CPU 逻辑核数
-a强制重新构建
-n打印编译时会用到的所有命令,但不真正执行
-x打印编译时会用到的所有命令
-race开启竞态检测

三、构建docker镜像

1、构建流程
  • 项目开发使用go mod 管理依赖
  • Dockerfile中配置docker环境变量:GO111MODULE=on,GOPROXY=https://goproxy.cn (代理)
  • 使用go build 自动下载依赖的第三库
2、Dockerfile模版
FROM golang:alpine

WORKDIR /opt/LoopGraph/
COPY . /opt/LoopGraph/
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn
RUN apk add --no-cache gcc musl-dev git && go build -I -v

EXPOSE 8070
ENTRYPOINT ["./LoopGraph"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值