重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

go语言国内镜像 go语言jwt

golang编写的项目,使用alpine制作镜像遇到的一个问题解决

GraphicsMagick,一款高性能的图片处理工具,由于项目需要,用到它,自然而然用到了关于gm的第三方库 这个库按照作者的提示,要安装GraphicsMagick-devel依赖。

单县ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

项目写完了,接下来用alpine做为基础镜像,准备制作项目的镜像。

golang项目,是在ubuntu下编孝乱写的,编译成二进制文件了,只要把二进制文件放进镜像里即可,遇到的问题有2个

1 容器跑起来,一直报二进制文件no found

我认认真真的确认了文件,以及它的路径,确实是存在的,怎么会报文件找不到呢?!

原来是musl和glibc是兼容的问题,在Dockerfile里要加以下两步

2 Error loading shared library libGraphicsMagickWand-Q16.so.2: No such file or directory

明明按要求安装GraphicsMagick-devel依赖,为啥还报这种错

于是想到了,是不是也要ln做一下软链接呢?于是学着上面的样子在Dockerfile里补上

再跑,问题依旧,莫非是软连接的地址写错了!回到开发的电脑上用ldd命令查看一下

果然,编译后消慎肆的二进制文件依赖路径是/lib,而不是/lib64

于是,修改Dockerfile里的写法

问题拿轿解决,开心:)

参考资料:

使用新版Golang1.18多段构建制作docker镜像的踩坑经历

使用多段构建制作docker镜像时,我原先嫌皮的dockerfile如下:

结果构建时报错了,报错如下,看信息是拉取源码中的第三方依赖包glog报错:

go: go.mod file not found in current directory or any parent directory.

'go get' is no longer supported outside a module.

To build and install a command, use 'go install' with a version,

like 'go install example点抗 /cmd@latest '

For more information, see

or run 'go help get' or 'go help install'.

查了相关的错误信息,说是go get已经在golang的1.17版本停用了,必须使用go install。其实这里有个坑,看官方文档如下:

Starting in Go 1.17, installing executables with go get is deprecated. go install may be used instead.

In Go 1.18, go get will no longer build packages; it will only be used to add, update, or remove dependencies in go.mod. Specifically, go get will always act as if the -d flag were enabled.

httpServer.go:12:2: no required module provides package github点抗 /golang/glog : go.mod file not found in current directory or any parent directory; see 'go help modules'

其肆者手实说的是go get只是不用来build了,他只能在go.mod中做依赖包相关的操作。go install是直接安装package,这里使用go install明显不对。

掌握了了以上信息,就可以针对性的解决了。我之前的dockerfile中可以添加一下裂嫌go.mod的初始化操作,新的file如下:

问题解决,构建镜像成功了。

Go语言安装与镜像配置

安装网嫌激罩址

国内镜像芹闹

Go 1.13 及铅橡以上(推荐

打开你的终端并执行

macOS 或 Linux

如果是zsh

请这样设置

Windows

打开PowerShell 并执行

或者

然后你就可以

Golang项目部署3,容器部署

容器部署即使用 docker 化部署 golang 应用程序,这是在云服务时代最流行的部署方式,也是最推荐的部署方式。

跨平台交叉编译是 golang 的特点之一,可以非常方便地编译出我们需要的目标服务器平台的版本,而且是静态编译,非常容易地解决了运行依赖问题。

使用以下指令可以静态编译 Linux 平台 amd64 架构的可执行文件:

生成的 main 便是我们静态编译的,可部署于 Linux amd64 上的可执行文件。

我们需要将该可执行文件 main 编译生成 docker 镜像,以便于分发及部署。 Golang 的运行环境推荐使用 alpine 基础系统镜像,编译出的容器镜像约为 20MB 左右。

一个参考的 Dockerfile 文件如下:

其中,我们的基础镜像使用了 loads/alpine:3.8 ,中国国内的消正用户推荐使用该基础镜像,基础镜像的 Dockerfile 地址: ,仓库地址:

随后使用 " docker build -t main . " 指令编译生成名为 main 的 docker 镜像。

需要注意的是,在某些项目的架构设计中, 静态文轿轮件 和 配置文件 可能不会随着镜像进行编译发布,而是分开进行管理和发布。

例如,使用 MVVM 模式的项目中(例如使用 vue 框架),往往是前后端非常独立的,因此在镜像中往往并不会包含 public 目录。而使用了 配置管理中心 (例如使用 consul / etcd / zookeeper )的项目中,也往往并不需要 config 目拿帆悔录。

因此对于以上示例的 Dockerfile 的使用,仅作参考,根据实际情况请进行必要的调整。

使用以下指令可直接运行刚才编译成的镜像:

容器的分发可以使用 docker 官方的平台: ,国内也可以考虑使用阿里云: 。

在企业级生产环境中, docker 容器往往需要结合 kubernetes 或者 docker swarm 容器编排工具一起使用。

容器编排涉及到的内容比较多,感兴趣的同学可以参考以下资料:


标题名称:go语言国内镜像 go语言jwt
分享地址:http://cqcxhl.cn/article/ddpjspd.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP