docker部署go gin框架 Windows环境

目录

文章目的是什么

环境介绍

Windows 环境下 docker 部署 go gin 详细步骤

运行容器时因为挂载文件可能会出现的问题

直接部署gin(跳过运行容器时因为挂载文件可能会出现的问题)


文章目的是什么

假设我们学习了 go 语言,在 Windows(本地) 上安装了 go 相关的程序,也能直接运行,使用以下命令:

go run main.go

假如代码是这样的:

package mainimport "fmt"func main() {fmt.Println("Hello World")
}

就会输出:

Hello World

但现在我们想要使用 docker 来部署,可能就有一些不同,复杂度肯定会比上面多一些。

所以本文的目的是:

使用 docker 部署 go,且可以运行 gin 框架的基础代码

环境介绍

我们开发时,基本上都是在自己电脑上,大多数应该都是 Windows,而我们项目发布上线时,一般又是使用的是 Linux,本文讲解的是 Windows 环境。

Windows:版本:Windows 11

Windows 环境下 docker 部署 go gin 详细步骤

docker安装golang 我在另一个文章中有详细的讲解,因为内容比较多,建议看一下另一篇文章

docker安装golang_docker golang-CSDN博客文章浏览阅读877次。最近玩 docker 比较多,试试安装 golang。第一步:先看一下镜像;第二步:下载镜像;第三步:进一步查看 golang 是不是我们指定安装的版本;第四步:运行容器_docker golanghttps://blog.csdn.net/longfeng995/article/details/131006514?spm=1001.2014.3001.5501

运行容器时因为挂载文件可能会出现的问题

上面这篇文章,针对 Linux 环境,是没有问题的,但是在 Windows 下,可能会有一个细节问题

docker run -itd -p 8081:8080 -v /docker/go/demo:/go --name localhost-go golang:1.18.9

-v /docker/go/demo

上面这一段,是挂载文件路径,要注意一点的是,/docker   这是根目录下 docker 目录。首先我们是 Windows 环境,是没有这个目录的,需要切换成我们自己的目录。

假设像我电脑上,我是存放到 D盘 docker 目录下 ...

那么就要修改为:/d/docker/...

但是按照上面这样运行 最终会出现错误的,我们接着细看。

我们能看到,在 终端 ,显示的目录位置是:/d/docker

并且我们输入 pwd 命令打印位置,也是如此

但如果我们拿这样的目录使用,就会出现错误。我这边示范一下:

先看我们的 docker 镜像

输入 docker 命令:

docker images

能看到 golang 这个镜像

然后我们就运行容器

docker run -itd -p 8080:8080 -v /d/docker/www/go:/go --name localhost-go fffd0d9a59da

运行之后,会打印出生成的 容器ID

我们去 Docker Desktop 客户端界面看一下

容器已经生成,并且运行着 没有问题。

而上面,我们一直在强调 挂载文件 -v /docker/go/demo

我们生成容器的命令里,使用的是 -v /d/docker/www/go:/go

就说明,我们的 /d/docker/www/go 目录,是跟容器内的 /go 目录进行了绑定

然后我们来看看我们 Windows 环境下,目录是如何的

而为了校验是否真的 挂载到了这个 "go;D" 目录,我们做一个实验

然后我们进入容器内部看看

winpty docker exec -it 627d777141e6 bash

winpty 是因为是 Windows 环境,所以需要加,如果是 Linux 则可以忽略,否则会出现错误

the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

以上,我们进入了容器内部,默认是进入的 /go 目录,然后我们 ls 输出,发现是没有 我们 Windows 环境下的 "demo" 目录,以及 "我是一个文本..." 的文件

所以,可以证明一点,我们的挂载是失败了的。

那么会有一个问题,这挂载跑哪去了呢?

当我返回根目录下,我发现了一个奇怪的目录,如下:

这个 '\Git\go' 就显得格外耀眼了,然后我很好奇的进入该目录,发现:

文件名乱码了,我想到可能是因为中文的原因,所以我们在 Windows 下改个名试试:

所以,这挂载文件是错误了的。

我们果断删除 容器,重新处理

运行下面这段代码即可

$ docker run -itd -p 8080:8080 -v D:/docker/www/go:/go --name localhost-go fffd0d9a59da

-v /d/docker/www/go:/go 我们修改为了:-v D:/docker/www/go:/go

然后我们重新进入容器,就能看到

和我们 Windows 下绑定的环境一模一样了

并且返回根目录,也不会再看到奇怪的 'Git\go' 什么的了。

好了,以上 容器我们部署好了,现在就开始运行 go

首先,我们检查 go env 的配置,并且要修改两个:

go env -w GO111MODULE=on
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

GO111MODULE=on  go 命令行会使用 modules

GOPROXY 是设置为阿里云的代理

设置完成后,我们就可以返回 Windows 环境,找到我们的项目 demo 目录

创建一个 main.go 文件,内容为:

package mainimport "fmt"func main() {fmt.Println("Hello World")
}

然后我们进入容器看看

文件存在,并且输出内容看一下

内容是一致的,我们就可以在容器内部,运行程序试试

go run main.go

结果也是符合我们的预期。

直接部署gin(跳过运行容器时因为挂载文件可能会出现的问题)

我们进入容器,第一步是要先初始化 mod,运行:

go mod init demo

能看到创建成功,我们可以切回 Windows 下看看

因为挂载的关系,在容器里创建了文件、目录,在 Windows 环境里,也会创建,反之也是一样的。

接着我们继续在容器内执行命令,下载并安装 gin:

go get -u github.com/gin-gonic/gin

执行以上操作时,可能会出现错误,提示:"go: zip: not a valid zip file" 之类的错误。

我这边整理是说代理的问题,我上面使用的是阿里云代理,也很奇怪,有时候可以,有时候却会出现问题。

所以我切换成 七牛云代理。

go env -w GOPROXY=https://goproxy.cn,direct

然后我们再重新 下载安装gin 就可以了。

进入 main.go 文件,粘贴以下代码

package mainimport "github.com/gin-gonic/gin"func main() {r := gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong",})})_ = r.Run() // listen and serve on 0.0.0.0:8080
}

然后我们进入 docker 容器,运行 go

go run main.go

可以看到,程序成功执行,端口默认的是 8080

当请求后,我们可以进入容器,查看请求记录

以上,就完成了在 Windows 环境下使用 docker 部署 go gin 并运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6.rk3588获取摄像头和激光雷达数据(用线程根据时间同步)

文件夹结构如下: 如果没有特殊说明,我们将py文件写在该路径里面。 保存数据的路径如下: ---img_lidar_save ---2023-12-13(根据日期自动生成当天保存数据的文件夹) ---camera_data(相机数据文件夹) ---image(保存相加…

[蓝桥杯刷题]合并区间、最长不连续子序列、最长不重复数组长度

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录: 成功的关键在于对目标的持久追求。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法 数据库 文章目录 前言合并区间问题📕现实应用大致思路代码实现代码讲解 最长不连续子序列&a…

jvisualvm手动安装VisualGC插件

前言 笔者近期排查问题需要查看GC的情况,于是用到了jvisualvm这个工具,查阅网上资料发现它有一个名为VisualGC的插件非常好用,于是笔者以此文记录一下VisualGC插件的安装步骤。 安装步骤 下载插件 首先我们要到官网 https://visualvm.gi…

未势能源受邀参加中国氢能100人论坛并发表演讲

12月12日-14日,“2023氢能嘉年华暨中国氢能100人论坛年会”在苏州举办,行业内专家学者、氢能头部企业代表等齐聚现场,聚焦氢能在化工、钢铁、交通等领域发展,共同探讨我国氢能产业初期前进之路。 未势能源液氢总工程师黄欢明受邀…

DevOps搭建(六)-安装Maven详细步骤

1、官网下载 下载地址: Maven – Download Apache Maven 2、上传压缩包到服务器 把下载好的压缩包上传到服务器上。 3、解压压缩包 解压压缩包到安装目录/usr/local/ tar -zxvf apache-maven-3.9.3-bin.tar.gz -C /usr/local/ 切换到/usr/local目录下ls命令看…

基于FPGA的视频接口之高速IO(光纤)

简介 对于高速IO口配置光纤,现在目前大部分开发板都有配置,且也有说明,在此根据自己的工作经验以及对于各开发板的说明归纳 通过高速IO接口,以及硬件配置,可以实现对于光纤的收发功能,由于GTX的速率在500Mbs到10Gbps之间,但通道高速io可配置光纤10G硬件,物理通完成,则…

SpringIOC之Jsr330ScopeMetadataResolver

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

科东软件Intewell操作系统:以“鸿”鹄之志,创未来之“道”

打造自主可控的新型工业操作系统是我国加速新型工业化进程,在新一轮科技革命中实现“换道超车”的重要契机。科东软件期待凭借鸿道Intewell新型工业操作系统的创新与应用,打造100%自主可控的工业网络和工业控制底层技术,为我国新型工业化贡献…

顶级Web应用程序测试工具列表

今天主要列举Web应用程序的工具。 今天的列表仅仅提供索引功能,具体要使用的同学,可以自行搜索哦。 通过web应用程序测试,在web应用程序公开发布之前,会发现网站功能、安全性、可访问性、可用性、兼容性和性能等问题。 Web应用程…

模板方法模式(行为型)

目录 一、前言 二、模板模式 三、带钩子的模板模式 四、总结 一、前言 模板方法模式是一种行为型设计模式,它定义了一个操作中的算法框架,将一些步骤延迟到子类中实现。这种模式是基于“开闭原则”的设计思想,即对扩展开放,对…

JAVA:乘除窗体的实现

目录 题目要求: 窗口的实现: try 和 catch 的用法: 思路大意: 关键代码的实现: 题目要求: 使用 try 和catch 方法完成乘法除法的异常处理和窗体的实现,如下图所示: 窗口的实…

西瓜视频RenderThread引起的闪退问题攻坚历程

背景 影响 西瓜之前存在过一类RenderThread闪退,从堆栈上看,全部都是系统so调用,给人的第一印象像是一个系统bug,无从下手。闪退集中在Android 5~6上,表现为打开直播间立即闪退。该问题在2022年占据Native Crash Top5&…

Linux(19):基础系统设定与备份策略

系统基本设定 网络设定(手动设定与 DHCP 自动取得) 通常网络参数的取得方式常见的有底下这几种: 1.手动设定固定 IP 常见于学术网络的服务器设定、公司行号内的特定座位等。这种方式你必须要取得底下的几个参数才能够让你的 Linux 上网的: …

SpringBoot基础使用及对其他项目进行整合

目录 一、简介 1-讲述 2-特点 二、创建配置 1.创建 2.配置 3.代码生成 三、项目整合 每篇一获 一、简介 1-讲述 众所周知 Spring 应用需要进行大量的配置,各种 XML 配置和注解配置让人眼花缭乱,且极容易出错,因此 Spring 一度被称…

i春秋云镜之Initial

首先拿到目标IP:39.99.156.72 通过Fscan进行扫描发现存在Thinkphp RCE漏洞。 ./fscan_amd64 -h 39.99.156.72然后通过利用工具进行RCE。 我们进行getshell之后通过蚁剑进行连接。 反弹shell并转换成python 交互式shell。 rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/b…

《儿童绘本》期刊杂志发表论文投稿

《儿童绘本》杂志是由国家新闻出版管理部门批准,由吉林省舆林报刊发展有限责任公司主管主办,国内外公开发行的全国优秀期刊。办刊宗旨:以“普及绘本知识、推动儿童阅读”为理念,带动家庭亲子阅读,推动阅读教育及图画书…

C语言刷题数组------数组交换

输入一个长度为 10的整数数组 X[10],将里面的非正整数全部替换为 1,输出替换完成后的数组。 输入格式 输入包含 10个整数,每个整数占一行。输出格式 输出新数组中的所有元素,每个元素占一行。输出格式为 X[i] x,其中…

根文件系统(一):基础

本文主要探讨210根文件系统相关知识。 根文件系统 存储设备(flash等)是分块(扇区),访问存储设备是按块号 (扇区号)来访问,文件系统(软件)对存储设备扇区进行管理,将对扇区的访问变成对目录和文件名的访问 根文件系统init进程的应用程序和其他应用程序,提供根目…

多家高校设立“鸿蒙班”;ChatGPT 成为 Nature 年度十大人物丨 RTE 开发者日报 Vol.107

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

FPGA巩固基础:秒表的设计

设计要求: 6位8段数码管,低三位显示毫秒计数,最高位显示分钟,其余两位显示秒计数。 开始案件与暂停按键,复位按键直接全部归零。 扩展部分:每计满一次,led移位一次。 框图设计: …