docker部署go gin框架 Windows环境

news2024/9/23 7:33:35

目录

文章目的是什么

环境介绍

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

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

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


文章目的是什么

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

go run main.go

假如代码是这样的:

package main

import "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 main

import "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 main

import "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.coloradmin.cn/o/1313362.html

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

相关文章

精选硬件连通性测试工具:企业如何做出明智选择

在当今数字化的商业环境中,企业的硬件连通性至关重要。选择适用的硬件连通性测试工具是确保网络和设备协同工作的关键一步。本文将探讨企业在选择硬件连通性测试工具时应考虑的关键因素,以帮助其做出明智的决策。 1. 功能全面性:首要考虑因素…

PHP微信朋友圈广告植入源码 +提供高效的广告植入解决方案,助力微信朋友圈广告推广

源码介绍 可以无限制帮用户开户,也可以理解为多用户版。 可以管理用户发布文章条数,也可以无限制发布。 用户可以上传多个广告,每个广告分别进行统计展示及点击。 用户一键植入,不用粘贴网址,每篇文章会 分别统计展示…

Peter算法小课堂—简单建模(3)

国王的奖赏系列 国王的奖赏1 题目描述: 你作为战斗英雄得到国王的奖赏,可以在地图上选一块土地。地图里共n*m格土地,第x行第y列的土地格子里标记着d[x][y]的整数价值,可能出现负数。国王让你选择若干列土地,只要是连…

车载以太网笔记

文章目录 以太网协议分层协议中间设备子网掩码物理层测试内容比较杂,后续会整理。 以太网协议分层 协议 中间设备

mfc配置halcon环境

新建mfc窗体 选择基于对话框 打开项目属性 1、附加包含目录添加: $(HALCONROOT)\include;$(HALCONROOT)\include\halconcpp 2、链接器->常规->附加库目录 $(HALCONROOT)\lib\x64-win64 3、链接器->输入->附加依赖项 halcon.lib;halconcpp.lib 在对话…

【期末复习向】n元gram的应用

当 n 1 时, 即出现 在 第 i 位 上 的基 元 w i 独 立于 历 史 。 一元文法也 被 写 为 uni-gram 或 monogram; 当 n 2 时 , 2-gram ( bi-gram ) 被称 为 1 阶 马 尔 可夫 链; 当 n 3 时 , 3-gram( tri-gram ) 被称为 2 阶马尔 可 夫 链 &am…

1-Maven基础

文章目录 Maven基础Maven相关概念构建依赖 Maven用途Maven的工作机制 Maven使用-1-Maven软件的解压与配置步骤1:下载步骤2:解压Maven核心程序步骤3:指定本地仓库步骤4:配置阿里云提供的镜像仓库步骤5:配置 Maven工程的…

2.electron之纯原生js/jquery的桌面应用程序(应用篇)

如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…

破局:国内市场确实存在“消费升级”和“消费降级”,3.0全新新零售商业模式

国内市场确实存在“消费升级”和“消费降级”两个趋势,这是由于不同消费者群体的需求和购买力存在差异。消费升级主要发生在高端市场,消费者愿意为高品质、高价值、高价格的商品和服务付出更多。而消费降级则主要发生在中低端市场,消费者更加…

抖捧自动直播是什么,系统功能讲解

目前有在做实体行业级商家服务的老板 你还在为不会直播,不敢直播而苦恼吗? 你还在为想做直播,但没空开直播而焦灼吗? 今天,你的问题都可以统统解决 实体行业直播必备黑科技:抖捧AI自动直播 只需要一部手…

uniapp点击按钮,防止按钮多次点击多次触发事件【防抖操作】

图片、 一、在根目录下新建common文件并创建common.js文件,输入下面代码 // 防止处理多次点击function noMultipleClicks(methods, info) {// methods是需要点击后需要执行的函数, info是点击需要传的参数let that this;if (that.noClick) {// 第一次点…

QT笔记(节选)具体图片等下载资源

QT笔记(节选)具体图片等下载资源 根据b站视频做的笔记: https://www.bilibili.com/video/BV1g4411H78N?p44&spm_id_frompageDriver&vd_sourcea3e6a48ccd3d7d1f969f662653ed68c9 qt是一个跨平台的c图形用户界面应用程序框架&#x…

音乐制作软件Ableton Live 11 mac功能特点

Ableton Live 11 mac是一款数字音频工作站软件,用于音乐制作、录音、混音和现场演出是一款流行的音乐制作软件。 Ableton Live 11 mac特点和功能 Comping功能:Live 11增加了Comping功能,允许用户在不同的录音轨道上进行多次录音,…

1.3 市面常见测试接口的工具

通过前面的学习,涉及接口测试的一些基础知识我们都已经有了了解,那本小节,我们来看看工作中比较常用的测试接口的工具有哪些。 PostmanPostman是我们平常工作中,最最常用的用来测试接口的工具。对于前端开发和后端开发来说,Postman也是工作中必会的工具,那对于我们测试来…

ChatGPT 也宕机了?如何预防 DDOS 攻击的发生

最近,开发人工智能聊天机器人的公司 OpenAI 遭受了一次规模较大的分布式拒绝服务(DDoS)攻击,导致其旗下的 ChatGPT 服务在短短 12 小时内遭遇了 4 次断网,众多用户遭受了连接失败的问题。 这次攻击事件引起了广泛的关…

图片懒加载vue3-lazy

目录 一、实现原理 二、如何使用 1.安装命令 2.main.js入口文件注册插件 3.template中使用指令 三、总结 最近在重构 博客 的时候遇到页面加载慢的问题,原因是页面小图标太多,一次性加载页面压力超大,打算图片可视区域化懒加载&#xf…

JMeter逻辑控制器

JMeter逻辑控制器 一、IF控制器1、作用2、步骤 二、循环控制器1、作用2、步骤3、线程组和循环控制器的区别? 三、ForEach控制器1、作用2、步骤 一、IF控制器 1、作用 **控制下面的测试元素是否执行**2、步骤 添加线程组用户定义的变量添加if控制器,判断…

力扣90. 子集 II(Java 回溯法)

Problem: 90. 子集 II 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 在本题中所给数组nums中的元素有重复,若再直接使用回溯的话会使得最终的子集有重复;其次我们应该知道求子集,求组合这类使用回溯处理的题目,在核心…

【VRTK】【VR开发】【Unity】12-占位身体

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概要】 目前你会发现,就算存在非Trigger Collider的墙壁屏障等,也能够正常穿过,这会导致不沉浸的体验。你需要一个占位身体来实现让墙壁等碰撞并挡住自己…

使用rancher rke快速安装k8s集群

概述 Rancher Kubernetes Engine(RKE)是一个用于部署、管理和运行Kubernetes集群的开源工具。旨在简化Kubernetes集群的部署和操作。 RKE具有以下特点和功能: 简化的部署过程 RKE提供了一个简单的命令行界面,使您可以轻松地部署…