持续构建:使用Docker镜像方式构建go语言项目
发布日期:2021-06-30 20:16:21
浏览次数:2
分类:技术文章
本文共 4247 字,大约阅读时间需要 14 分钟。
go官方提供了各种版本的镜像,在Easypack中根据官方的Alpine镜像也创建go语言的镜像,因为go 1.13开始GOPROXY 默认为 https://proxy.golang.org,将GOPROXY缺省设定为goproxy.cn,以方便更简单地使用go镜像进行构建。golang官方镜像
官方镜像分如下三类:
- 普通镜像:
golang:<version>
- Alpine镜像:
golang:<version>-alpine
- Windows镜像:
golang:<version>-windowsservercore
详细可参看:https://hub.docker.com/_/golang
Easypack的Alpine镜像
镜像tag:golang:<version>-alpine
下载镜像
下载镜像:docker pull liumiaocn/golang:1.13.5-alpine3.11
编译go语言应用
这里以Prometheus提供的go语言的示例应用(为Prometheus提供可供抓取的数据)为例进行说明如何使用Docker镜像进行go语言应用的编译。
准备go语言应用
执行命令:git clone https://github.com/prometheus/client_golang.git
当然也可以直接使用自己手头已有的go语言的应用示例进行编译。
启动Docker容器
启动Docker并将待编译的工程进行卷的映射
执行命令示例:docker run --rm -it -v `pwd`/client_golang:/project liumiaocn/golang:1.13.5-alpine3.11 sh
liumiaocn:golang liumiao$ docker run --rm -it -v `pwd`/client_golang:/go/src liumiaocn/golang:1.13.5-alpine3.11 sh/go # lsbin src/go # cd src/go/src # lsCHANGELOG.md LICENSE Makefile.common VERSION go.modCONTRIBUTING.md MAINTAINERS.md NOTICE api go.sumDockerfile Makefile README.md examples prometheus/go/src #
构建名为ruandom的应用
此示例工程下有如下go语言的应用,我们对其进行编译
/go/src # cd examples/random//go/src/examples/random # lsmain.go/go/src/examples/random #
- 下载依赖包
/go/src/examples/random # go get -dgo: downloading github.com/prometheus/common v0.7.0go: downloading github.com/prometheus/client_model v0.1.0go: downloading github.com/prometheus/procfs v0.0.8go: downloading golang.org/x/sys v0.0.0-20191220142924-d4481acd189fgo: downloading github.com/beorn7/perks v1.0.1go: downloading github.com/cespare/xxhash/v2 v2.1.1go: downloading github.com/golang/protobuf v1.3.2go: extracting github.com/prometheus/common v0.7.0go: extracting github.com/prometheus/client_model v0.1.0go: downloading github.com/matttproud/golang_protobuf_extensions v1.0.1go: extracting github.com/cespare/xxhash/v2 v2.1.1go: extracting github.com/golang/protobuf v1.3.2go: extracting github.com/beorn7/perks v1.0.1go: extracting github.com/prometheus/procfs v0.0.8go: extracting github.com/matttproud/golang_protobuf_extensions v1.0.1go: extracting golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go/src/examples/random #
- 构建应用
/go/src/examples/random # go buildgo: finding github.com/prometheus/client_model v0.1.0go: finding github.com/prometheus/common v0.7.0go: finding github.com/beorn7/perks v1.0.1go: finding github.com/cespare/xxhash/v2 v2.1.1go: finding github.com/golang/protobuf v1.3.2go: finding github.com/prometheus/procfs v0.0.8go: finding github.com/matttproud/golang_protobuf_extensions v1.0.1/go/src/examples/random #
- 构建结果确认
/go/src/examples/random # lsmain.go random/go/src/examples/random #
可以看到已经构建了一个名为random的可执行文件, 至此已经确认完毕。确认main.go就会发现实际上此应用就是在指定端口的/metrics的URL上提供一些随机的指标数据,比如这里在8080端口启动此应用。
/go/src/examples/random # ./random -listen-address=:8080 &/go/src/examples/random # psPID USER TIME COMMAND 1 root 0:00 sh 203 root 0:00 ./random -listen-address=:8080 211 root 0:00 ps/go/src/examples/random #
由于此镜像也是在官方Alpine镜像基础上作出的,缺省未安装curl,此处为了验证手动添加一下
/go/src/examples/random # apk add curlfetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gzfetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz(1/3) Installing nghttp2-libs (1.40.0-r0)(2/3) Installing libcurl (7.67.0-r0)(3/3) Installing curl (7.67.0-r0)Executing busybox-1.31.1-r8.triggerOK: 7 MiB in 18 packages/go/src/examples/random #
动作确认
/go/src/examples/random # curl http://localhost:8080/metrics 2>/dev/null |head -n 15# HELP go_build_info Build information about the main Go module.# TYPE go_build_info gaugego_build_info{checksum="",path="github.com/prometheus/client_golang",version="(devel)"} 1# HELP go_gc_duration_seconds A summary of the GC invocation durations.# TYPE go_gc_duration_seconds summarygo_gc_duration_seconds{quantile="0"} 0go_gc_duration_seconds{quantile="0.25"} 0go_gc_duration_seconds{quantile="0.5"} 0go_gc_duration_seconds{quantile="0.75"} 0go_gc_duration_seconds{quantile="1"} 0go_gc_duration_seconds_sum 0go_gc_duration_seconds_count 0# HELP go_goroutines Number of goroutines that currently exist.# TYPE go_goroutines gaugego_goroutines 10/go/src/examples/random #
所以可以看出构建出来的应用是可以正常动作的。
转载地址:https://liumiaocn.blog.csdn.net/article/details/103778750 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年05月03日 17时47分11秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【工具使用】Google免费云环境Colaboratory使用
2021-07-03
【深度学习笔记】卷积层,全连接层,池化层的相关输出参数计算
2021-07-03
【NLP学习笔记】文本分类概述
2021-07-03
【深度学习笔记】文本分类
2021-07-03
【转载】炼丹实验室:深度学习网络调参技巧
2021-07-03
【论文阅读笔记】文本分类论文汇总
2021-07-03
【NLP学习笔记】One-hot encoding:独热编码
2021-07-03
【工具使用】CSDN编辑器markdown字体、颜色与字号的设置
2021-07-03
【NLP学习笔记】词共现矩阵
2021-07-03
【NLP学习笔记】NLP基础知识框架图
2021-07-03
【工具与环境】Windows下安装Sublime Text 3
2021-07-03
【工具与环境】Excel中批量插入行
2021-07-03
【学习笔记】对vanilla的一些个人理解
2021-07-03
“学硕” VS “专硕”
2021-07-03
【NLP学习笔记】知识图谱阅读笔记及其心得
2021-07-03
【工具使用】新版CSDN-markdown编辑器使用指南
2021-07-03
《知识图谱》阅读笔记(六)
2021-07-03
【NLP学习笔记】中文分词(Word Segmentation,WS)
2021-07-03