美文网首页
go mod docker部署

go mod docker部署

作者: 小风吹的我乱了 | 来源:发表于2019-12-04 00:29 被阅读0次

最简单的部署方式是拿生成的二进制文件直接构成镜像,但作者介绍的部署方式是镜像构建阶段使用源码自动编译成二进制文件的部署

1,首先写个将部署在docker中的http服务

package main
import (
    "fmt"
    "net/http"
)

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "hello docker")
}

func main() {
    http.HandleFunc("/", IndexHandler)
    err := http.ListenAndServe("0.0.0.0:80", nil)
    if err != nil {
        fmt.Println(err)
    }
}

2,在同目录下加个Dockerfile文件 ,内容如下

#使用golang环境,标记第一构建阶段名称为builder
FROM golang:1.13 AS builder
#当前目录所有文件copy进去
COPY .  hellodocker
#进入工作目录hellodocker
WORKDIR hellodocker
#设置goproxy
RUN go env -w GOPROXY="https://goproxy.cn,direct"
#执行编译,生成/bin/hellodocker
RUN go build -o /bin/hellodocker main.go


#第二构建阶段
FROM ubuntu:18.04
#将第一构建阶段生成的二进制文件copy进去
COPY --from=builder /bin/hellodocker .
#默认执行
CMD ["./hellodocker"]

这里使用了docker的多阶段构建,如果使用单阶段构建:

FROM golang:1.13 
COPY . .
RUN go build -o hellodocker main.go
CMD ["./hellodocker"]

会有两个问题:
1,镜像中包含源码,会泄漏代码
2,由于包含golang编译环境,镜像体积会特别大
所以,作者使用了多阶段构建,将第一阶段构建的二进制文件copy到第二阶段中,第二阶段理论上只有系统镜像+二进制文件的大小
3,构建镜像

docker build -t hellodocker .

4,运行容器

docker run -itd -p 80:80 hellodocker

5,打开浏览器,输入127.0.0.1,即可看到hello docker

最终构建的镜像大小可以再优化,不包含系统镜像,但要在编译阶段将依赖项编入,这里作者就不深入了

相关文章

  • go mod docker部署

    最简单的部署方式是拿生成的二进制文件直接构成镜像,但作者介绍的部署方式是镜像构建阶段使用源码自动编译成二进制文件的...

  • Apache pulsar/pulsar-client-go 部

    pulsar-client-go 部署安装 目前,pulsar-client-go采用 go mod 进行包管理,...

  • GO Plugin 编译问题

    GO Plugin 编译问题 初始问题 现在用go mod和docker multi-stage生成的plugin...

  • Go常用命令之go mod

    Go mod Go mod 的三种开启模式 GO111MODULEon:支持Go mod模式off:不支持Go m...

  • gomod常用

    gomod文件初始化:go mod init找到项目依赖并导入:go mod tidy安装指定版本:go mod ...

  • docker学习笔记(2)-如何部署go到docker

    docker学习笔记(2)-如何部署go到docker 1.编写go程序 这里的demo,我写的是一个Restfu...

  • 50.Go Mod 来创建 Gin 项目

    开启 Go mod 初始化 Go mod 使用Go mod 进行包管理,可以在$GOPATH/src 之外创建项目...

  • 使用 Go mod 进行包管理并开启代理

    Go 从 1.11 开始支持 go mod,现在 Go 1.13 出来已经默认开启 go mod 了 ,可见日后 ...

  • 说一说go mod

    [toc] 说一说go mod 写在前面,我们要切换到go mod吗 go mod是官方力推的go模块依赖管理的工...

  • Go Module

    Go 1.11 之后官方支持的版本管理工具 mod。 mod 官方给出了三个命令 go help mod、go h...

网友评论

      本文标题:go mod docker部署

      本文链接:https://www.haomeiwen.com/subject/bazhgctx.html