Gin(十三):交叉编译和Docker部署

从零构建现代化Go Web应用骨架:Gin、GORM与Wire实战指南 在Web后端开发中,构建一个清晰、健壮且可维护的项目结构是提升开发效率与代码质量的基础。遵循“约定优于配置”与模块化设计原则,能够有效统一团队协作规范,减少重复性基建工作。通过集成Gin框架实现高性能HTTP路由与中间件管理,结合GORM简化数据库操作,并利用Wire实现编译时依赖注入,可以构建出高内聚、低耦合的应用架构。这种技术组合不仅提升了代码的可测试性与可维护性,还为快速构建RESTful API服务提供了坚实的技术底座。本文以webgoc项目模板为例,详细解析了如何从零搭建一个包含统一响应处理、配置 阅读详情

陆陆续续已经更新到了第十三期,基本的知识点都已经讲解的差不多,那么最后一步就是对项目进行部署。这里我们将项目部署到 Linux 的服务器 Docker 上。本期知识点包括交叉编译和Docker部署。

?交叉编译

什么是交叉编译呢?交叉编辑简单的说就是一个平台生成另一个平台的可执行程序。我们大部分开发环境是 windows 或者 macOS ,当然也有使用 linux 用户(其实在 windows 上更加推荐使用 WSL 进行开发),而我们的上线服务器一般都是 linux,所以我们要进行项目的交叉编译。Go 中对交叉编译相对简单,我们只需要进行简单的设置即可完成交叉编译。

打开我们的项目根目录,打开终端,设置 GOOS 和 GOARCH。

在 windows 下编译为 linux 程序。

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o out/linux/gin_hello .

这里的 go build -o out/linux/gin_hello 是指将编译后的文件输出到 out/linux 下,编译后的二进制叫做 gin_hello 。

我将命令写到了 .bat 方便处理,不用每次都执行贴一下这几行命令。

在项目根目录下新建立 build.bat ,然后执行该文件。当然,很多工程或者项目使用 Makefile 进行的编译

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o out/linux/gin_hello .
exit

执行完该文件就会在 out/linux 下出现 gin_hello

这里我们便完成了交叉编译,编译后的程序是 linux 下的可执行文件。

?安装 Dokcer

这里使用的操作系统为 centos 7 ,安装前要更新一下软件源 sudo yum update ,之后对 Docker 软件源进行添加。

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

再次更新一下软件源 sudo yum update ,最后就可以安装我们的 docker 了

sudo yum install docker-ce

添加到开机启动

sudo systemctl enable docker

启动Docker

sudo systemctl start docker

此时,我们的 Docker 已经完成安装。但是我们还需要为我们的 Docker 设置远程连接,让我们本地开发可以连接到服务器。

?警告 下面的方法仅仅是为了教程演示 请勿在生成环境中使用该方法,该方法存在缺陷,使 Docker 端口暴漏在公网环境中,任何人都可以在Docker进行部署。如果需要生产环境中打开远程端口,需要配置权限认证方式,这里不过多做介绍

在 Centos 7 中,进行对下面的文件进行编辑

vim /usr/lib/systemd/system/docker.service

找到 ExecStart 开头的进行如下添加和修改。

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock -H fd:// --containerd=/run/containerd/containerd.sock

此时,重启服务器或者重新启动 Docker 就完成了 Docker 的远程连接。

?安装数据库

首先我们要在 dockers 上进行 数据库 MySQL 的安装。首先在执行我们的搜索命令,看看能不能找到MySQL 相关的信息 docker search mysql 。

确认可以查找到 MySQL 后,就可以完成 MySQL 进行的拉取 ,通过命令 docker pull mysql 拉取 MySQL 镜像。此时并没有指定 MySQL 的版本,会给我们拉取最新的 MySQL 版本。

拉取完毕,通过 docker iamges 查看当前所有的镜像,这里我们只有一个 MySQL 。

我已经对 MySQL 镜像进行了获取,那么接下来就是通过镜像创建容器。

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql

此时我们的 MySQL 容器就创建成功,并且启动完成,而且我们制定了 MySQL 的密码为 1234,端口为 3306。

docker exec -it mysql /bin/bash

我们为 MySQL 指定一个终端,来进行数据库的创建。

输入 mysql -u root -p 回车后输入密码 1234,进入数据库。输入 create database ginhello 和我们本地数据库名称一致。

这样,我们在服务器上的操作就完成了。

?Goland 连接 Docker,并部署项目

首先我们要对我们的代码进行简单的修改,之前我们一直是 DEBUG 模式在运行项目,而现在我们要正式上线了,需要修改我们的启动模式,在 main.go 中进行添加。

gin.SetMode(gin.ReleaseMode)

此时就可以执行我们的交叉编译时候写的脚本 build.bat,会生成新的 linux 可执行文件。

新建 Dockerfile,编写 Dockerfile

FROM alpine

WORKDIR /web/gin

COPY ./out/linux/. .

CMD ./gin_hello

简单的说一下这些含义,拉取一个 alpine 的镜像,这基本是最小的 linux , 指定我们的 WORKDIR, 将我们生成的 linux 可执行程序复制到 WORKDIR 下,运行项目。

当然这些还不够,当我们编写完成该文件的时候,在第一行会出现运行按钮。

单击运行按钮,选择 Edit 'Dockerfile’

会出现下面的界面。点击 ① 处的省略号,出现旁边的界面,进行 Docker 的配置,在 ② 处填写我们的 IP 端口为 2375 设置完成后,等待,看看 ③ 处是否有 Connection successful 。否者链接失败,查看上述步骤是否出错。完成后点击 OK。

完成 Docker 的配置,接着完成端口映射。

Host port 表示宿主主机端口,就是我们的服务器端口,而 Container port 表示我们的 容器的端口。因为 gin 项目运行在容器内,且启动端口为 8080,我们通过端口映射,访问宿主主机 80 端口,而映射到 8080 端口。

完成上述设置,就可以点击启动我们的 Dockerfile。

我们可以在 Goland 的 Service 中找到当前进度。

等待完成,打开服务器公网IP。

可以看到我们之前写的代码。

此时我们就完成了部署。

✍总结

通过本章节的 交叉编译,Docker 安装,Docker 镜像安装和启动容器,部署 Gin 项目,完成了一个项目通过 Docker上线部署的过程。

?‍?本章节代码

本章节代码可以使用之前任何一个章节代码,但是这里还是进行了代码的上传,包含本章节使用的 Dockerfile 和 build.bat

Github

个人公众微信号

文章与个人公众号同步更新,欢迎各位扫码关注。

在这里插入图片描述

Go命令工具全解:go build/run/test/fmt/mod 这篇把Go常用的命令行工具过了一遍,go build编译、go run运行、go test测试、go fmt格式化、go mod依赖管理。交叉编译和go install这两个点最容易踩坑,碰到问题先查Go版本。模块一的Go语言基础到这里就结束了。下一篇我们进入模块二,开始聊Go的并发编程,goroutine和channel怎么玩。 阅读详情

相关推荐

长短期记忆网络(Long Short-Term Memory networks, LSTM)

如何简单的理解LSTM——其实没有那么复杂:

weixin_39910711的博客 2万+

Windows打包Gin项目并部署在Linux

【代码】Windows打包Gin项目并部署在Linux。

qq_42896461的博客 527

一分钟学会MATLAB-数据清洗(含完整代码)

数据清洗是数据分析过程中的一个重要步骤,目的是提高数据的质量,以便进行更有效的分析。% 删除超出阈值的行。% 用线性插值填充缺失值。% 删除包含缺失值的行。% 找到缺失值的位置。% 可视化数据,识别异常值。缺失值是数据清洗中常见的问题。通过以上步骤,你可以有效地清洗数据,使其准备好进行后续的分析和建模。

2402_87132195的博客 3316

交叉编译环境搭建

在嵌入式Linux开发中,无论是应用还是驱动开发,一般都是采用交叉编译的方式,对arm平台进行开发。在很多时候想要平台的可以运行文件都是通过linux编译好后移植到相应的平台上实现再次开发的,但是通过交叉编译环境生成的文件在linux。这样情况下就想要用到相应的交叉编译工具链,来完成程序的编译,生成相应的可执行文件,以适配目标平台的系统架构。

Cfx1998的博客 1973

向量乘法器设计

同样基于Wallace树乘法器,我们来构造向量乘法器。 在一些矩阵运算中经常用到向量的相乘运算,本例以4维向量为例子介绍向量乘法器的verilog HDL设计。 设向量a = (a1, a2, a3, a4), b = (b1, b2, b3, b4)。 则a 与 b的点乘为:a * b = a1 b1 + a2 b2 + a3 b3 + a4 b4, 即向量对应位置的值相乘,再相加...

Reborn Lee 2969

vins-fusion环境配置、安装与测试

本文主要介绍如何搭建vins-fusion的运行环境,以及解决vins-fusion编译运行时遇到的环境冲突问题,并在此基础上实现例程的运行。

qq_52068373的博客 1万+

golang gin项目编译成二进制,部署在linux服务器流程

部署注意: 1、如果你制定的其他端口,需要到你的服务器商家账户上开放对应的端口才能访问 2、我的gin项目监听端口是调取配置文件的方式获取监听的端口,这样做在windows平台上运行没有任何问题,但是部署在linux服务器上可以正常运行,但是在外网无法访问,需要改成固定的监听端口才能正常访问(如:r.Run(":9920")),困扰了一天才解决,血一样的教训 1、编译 我用的是windows系统需要设置打包环境 # 1 目标平台的体系架构(386、amd64、arm) set GOARCH=amd.

weixin_44540711的博客 4237

Win10+Anaconda环境下PaddleOCR保姆级安装指南(附常见报错解决方案)

本文提供Win10+Anaconda环境下PaddleOCR的保姆级安装指南,涵盖从环境配置到模型部署的全流程,特别针对常见报错提供解决方案。通过详细的步骤说明和实用技巧,帮助开发者快速完成PaddleOCR安装与测试,避免常见陷阱,提升OCR开发效率。

weixin_29096377的博客 375

docker交叉编译工具链

简化配置:使用Docker容器可以将编译所需的依赖和工具打包到一个镜像中,这样可以简化配置过程。只需要在需要进行交叉编译的机器上安装Docker,并使用预先构建好的镜像即可开始编译。可移植性:Docker容器可以在不同的操作系统和平台上运行,因此可以在任何支持Docker的机器上进行交叉编译。环境隔离:Docker容器提供了一个独立的运行环境,可以隔离不同的开发环境和依赖。一致性:使用Docker容器可以确保每次编译都在相同的环境中进行,避免了由于不同开发环境导致的编译结果不一致的问题。

Dontla的博客 2092

Challenge 4 - OSCP A

在c盘下发现一个windows.old,在里面可以找到SYSTEM和SAM文件,下载到本地,利用samdump2解密发现没解出来,再来试试pwdump.py(https://github.com/CiscoCXSecurity/creddump7)得到压缩包密码bludecode,解压之后发现一个比较特殊的文件configuration.php,里面有两个类似密码的字符串。登录之后在/opt/backups/下发现几个特殊文件,其中sitebackup3.zip是个正常的压缩包。但是这个压缩包是有密码的。

羽的博客 5788

YOLOv8首发优化:遥感目标检测 | 专为低质量遥感图像设计的边缘 - 高斯聚合(EGA)模块,解决低空间分辨率、传感器噪声、目标模糊、低光照退化和部分遮挡等限制

一种轻量级网络,其创新性地整合了专为低质量遥感图像设计的边缘 - 高斯聚合(EGA)模块。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 493

交叉编译docker镜像

通过buildx可以使用Dockerfile构建多平台镜像; 但是针对java工程的maven Jib插件,可以直接使用其中高版本的实验功能“platforms”构建多平台镜像,不需要修改docker配置。 可使用buildx验证或docker inspect查看镜像的编译平台

重瞳Tech的博客 2355

SAP 经营范围(Operating Concern) 和业务范围 (Business Area) 在核算架构或是管理架构中的区别和联系分别是什么 请给具体的示例

摘要:SAP系统中,业务范围(Business Area)和经营范围(Operating Concern)在核算架构中具有不同功能。业务范围是FI/CO共用维度,用于跨公司码的业务线核算(如电子产品、机械设备),支持内部管理和简单对外报表。经营范围则是CO-PA专属维度,聚焦获利能力分析,可细化到产品+客户+区域组合(如分析手机在华东区域的获利情况)。两者存在层级关联:经营范围包含业务范围作为基础维度,业务范围数据会传递至经营范围进行深度分析。实际应用中需先配置业务范围,再设置经营范围并关联相关维度,共同支

金牌架构师 96

docker 部署 gin

Go语言部署优势与Docker实践 Go语言采用静态编译技术,直接将源代码编译为原生二进制可执行文件(ELF/Mach-O/PE格式),无需依赖运行时环境。通过go build命令生成的自包含二进制文件包含所有标准库和依赖,实现"一次编译,随处运行"的部署优势。相较于C/C++,Go具有更强的跨平台编译能力、更完善的标准库和更安全的并发模型。 在Docker部署中,采用多阶段构建策略:使用golang:alpine镜像编译生成二进制文件,然后以仅5MB的alpine基础镜像作为运行环境,

JacinLee的博客 1150

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

使用docker部署golang helloworld

本文介绍如何通过docker部署后端程序,为入门级教程. 对安装docker与基本命令与go语法不多作赘述。 文章仅对涉及的命令作出解释 web 代码 main.go package main import ( "github.com/gin-gonic/gin" _ "github.com/lib/pq" ) func main(){ go func() { r1:= gin.De...

fwhezfwhez的博客 3675

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Docker部署GoLang程序,保姆级教程!

今天介绍一下 GoLang 的 restful 服务,如何部署到 docker 容器内。本篇不详细介绍 GoLang 编程方面的知识,重点介绍已经写好的 GoLang 程序,如何部署到 docker。

菜鸟厚非 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Go Gin Example

https://github.com/EDDYCJY/go-gin-example/blob/master/README_ZH.md  Go Gin Example gin 的一个例子,包含许多有用特性 目录 本项目提供 Gin实践 的连载示例代码 Gin实践 连载一 Golang介绍与环境安装 Gin实践 连载二 搭建Blog API's(一) Gin实践 连载三 搭建Blog A...

kangle0228的博客 1960

【GIN+GO】实战-博客

转自: https://segmentfault.com/a/1190000013297625 本系列示例代码 go-gin-example 本系列目录 连载一 Golang介绍与环境安装 连载二 搭建Blog API’s(一) 连载三 搭建Blog API’s(二) 连载四 搭建Blog API’s(三) 连载五 使用JWT进行身份校验 连载六 编写一个简单的文件日志 连载七 Golang优雅重启HTTP服务 连载八 为它加上Swagger 连载九 将Golang应用部署到Docker 连载十 定制

码农印象 347

kiro2api Docker 部署指南:docker-compose 三条路径快速构建生产级 AI API 代理

kiro2api 是一个高性能的 **AI API 代理** 服务器,将 Claude(Anthropic)、OpenAI 与 AWS CodeWhisperer 三套协议统一为一个网关。本指南带你通过 **docker-compose、预构建镜像、本地源码构建** 三条路径完成 Docker 部署,10 分钟从零搭建生产级 AI API 代理服务。 ## kiro2api 概览:为什么选择这款

gitblog_00459的博客 392

windows系统中开发的GO程序生成docker镜像并部署到阿里云服务(linux系统)的操作说明

本文简述将go程序生成docker镜像的操作方法,以及如何部署到阿里云服务。

longchanghua_enshi的专栏 1563

一文讲解Go Web服务搭建部署

以上代码表示启动gin服务,使用8080端口,包含一个get请求,路由地址"http://localhost:8080/ping"至此,通过go完成简单服务的编写以及部署。

A_Tevens的博客 653

SimpleHttpServer - 轻量文件上传服务

基于Gin框架开发的轻量级文件上传服务,支持大文件分片上传、断点续传和私有化文件管理。核心功能包括:自动分片传输降低网络波动影响、中断后可续传已完成分片、10KB内文件二维码分享、响应式UI展示上传进度。采用Go语言编译为单文件,支持systemd管理,快速部署于Linux系统(amd64/arm64)。提供文件全生命周期管理(查看/下载/删除/搜索),支持管理员密码保护和下载白名单。适用于内网文件共享、开发测试环境等场景,默认端口18181,最大支持20GB单文件上传。

perfect12312645的博客 1442

如何用Go语言写出生产级API服务?手把手带你完成项目部署

掌握Go语言构建高性能API服务的核心方法,本go语言入门教程带你从零实现生产级项目部署。涵盖Gin框架使用、路由设计、中间件开发与Docker容器化部署,提升后端开发效率。适合初学者快速上手,值得收藏。

QuickCode的博客 1075

Go语言一站式实战:从Web后端到AI-Agent开发全链路指南

Go语言以其简洁的语法和强大的并发模型,成为构建高性能后端服务的首选语言之一。其核心原理在于通过goroutine和channel实现轻量级并发,显著提升程序执行效率。在技术价值层面,Go不仅适用于传统的Web服务开发,更在微服务、云原生和实时通信等领域展现出独特优势。应用场景广泛覆盖电商系统、即时通讯、缓存中间件及新兴的AI应用后端。本文聚焦于Go实战开发,通过项目驱动的学习路径,系统讲解如何运用Go构建从基础CRUD到实时IM系统,再到集成Redis缓存与分布式锁的完整应用。特别深入探讨了Go在AI-A

weixin_30621959的博客 381

Team IDE源码解析:Go+Vue+Electron技术架构揭秘

Team IDE是一款功能强大的集成开发环境,采用Go+Vue+Electron技术栈构建,为开发团队提供数据库管理、远程服务器连接、消息队列监控等一体化解决方案。本文将深入解析Team IDE的源码架构,揭示其如何通过现代技术栈实现跨平台、高性能的开发工具。 ## 🚀 项目概述与技术架构 Team IDE是一个基于Go语言后端、Vue.js前端和Electron桌面框架的三层架构应用。这种

gitblog_00989的博客 718

Golang数学建模服务化实战:从公式到可部署模型

数学建模的核心挑战,早已超越理论推导,转向模型的可调试性、可复用性与快速交付能力。其底层逻辑在于将抽象数学表达(如微分方程、优化目标)转化为稳定、跨平台、低依赖的计算服务。Golang凭借静态编译、原生HTTP支持和轻量并发,天然适配这一技术需求——它不替代Python做探索性计算,而是承担‘模型交付层’角色,实现零环境依赖的一键启动与实时参数调优。典型应用场景包括竞赛现场演示、教学模型封装、科研算法产品化等。本文聚焦Golang在数学建模中的工程落地路径,涵盖gonum数值计算、gin服务封装、CSV/E

weixin_30338497的博客 350
上一篇: Gin(十二):JWT使用
下一篇: Gin 大结局
代码猎奇站
博客等级 码龄7年 39粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值