[图片] 最近用 go 写了一个 Web 应用,但用 Docker 部署时候,对于如何加入依赖的第三方包,产生了困惑,这边感谢大 D 的解惑,下面开始 Docker 部署go 开发的Web 应用 一、go mod 1、什么是 go mod 在桌面新建一个文件夹 HelloWorld,在 HelloWorld 里新建 i ..

Docker 部署 go 项目

bb2c1d8f4eb2df4fb83a7257fb4d0049.jpg

最近用 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{})
}

运行结果:异常
屏幕快照 20190808 上午 11.43.38.png

2、go mod 初尝试

$ go mod init testDemo

运行结果:
屏幕快照 20190808 下午 12.13.05.png

$ go run index.go

` 运行结果:成功
屏幕快照 20190808 下午 12.13.35.png

3、go mod 管理

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

二、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、构建流程

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"]

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。

    222 引用 • 408 回帖 • 642 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    317 引用 • 1150 回帖 • 733 关注
回帖   
请输入回帖内容...