当前位置: 首页 > article >正文

docker 部署 gin

编译与执行

✅「静态编译语言 + 生成原生二进制文件 + 操作系统直接执行」

Go 语言之所以在工程部署场景中大受欢迎的核心优势:它直接编译成原生二进制可执行文件(binary executable)

🔧 Go 是“静态编译语言”(编译型 + 静态链接)

go build -o myapp main.go

Go 会做三件事:

  1. 编译你的 .go 代码为机器码(CPU 可执行指令)
  2. 静态链接所有标准库、依赖库(打包进一个文件里)
  3. 生成一个二进制文件,比如 myapp(Linux/macOS)或 myapp.exe(Windows)

📦 所以你得到了一个真正的“自包含”程序,不依赖 Go 环境,不依赖 Python/Java/Node 运行时。

Go 编译出来的这个二进制文件本质上是:

  • CPU 能直接运行的 ELF(Linux) 或 Mach-O(macOS) 或 PE(Windows)格式的可执行文件
  • 包含了你代码 + 标准库 + 三方库 + TLS 支持等依赖

所以你只要上传 myapp 这个二进制文件到目标服务器/容器,直接运行即可

./myapp不需要:•	Go 环境•	包管理器•	解释器•	虚拟机•	容器也不需要装 runtime!

🧠 那 Go 编译出来的“二进制文件”底层到底是什么?

它就是我们操作系统认的那种:

  • Linux:ELF 格式
  • Windows:.exe 的 PE 格式
  • macOS:Mach-O
file myapp>>>>>myapp: Mach-O 64-bit executable x86_64 

Go 是直接编译成操作系统能执行的原生二进制文件的语言,部署时只需上传这个文件,直接运行,不需要 Go 环境、不需要解释器、不需要虚拟机,是工程部署最轻的一种形式。

特性GoC/C++
编译方式静态编译(go build)静态/动态编译(gcc, clang)
编译结果单个二进制文件可是二进制,也可能依赖动态库
是否默认静态链接✅ 是(不启用 CGO 默认静态)❌ 否(默认很多依赖 libc.so 等动态库)
标准库/网络支持✅ 标准库很全(http, json, etc.)❌ 需引入第三方库(如 Boost、libcurl)
交叉编译支持✅ 简单(GOOS/GOARCH)❌ 较复杂(需 toolchain、配置多)
内存安全性✅ 有垃圾回收、内存管理更安全❌ 容易出现野指针、内存泄漏
并发支持✅ 原生 goroutine,极简❌ pthread 很重,难用
编译速度⚡ 快⏳ 慢

docker 部署

Dockerfile

就是 build 形成一个二进制文件,然后使用 alpine 去运行这个二进制文件

# Dockerfile
# 构建阶段,	使用官方 Go 的 Alpine 版本(极小体积)作为构建镜像
FROM golang:alpine AS builderWORKDIR /buildCOPY go.mod go.sum ./
RUN go mod downloadCOPY . .RUN go build -o gin-api-template .# 运行阶段,	•	使用 alpine 最小基础镜像作为运行环境(无 Go 环境)FROM alpine:latestRUN apk add --no-cache ca-certificatesWORKDIR /appCOPY --from=builder /build/gin-api-template .
COPY .env .EXPOSE 8080CMD ["./gin-api-template"]

核心的命令:

  • 执行构建命令,生成二进制文件 gin-api-template
  • o 指定输出文件名为 gin-api-template
RUN go build -o gin-api-template .
阶段操作说明
构建FROM golang:alpine AS builder使用小巧的 Go 构建镜像
构建go build -o编译 Go 项目为独立二进制文件
运行FROM alpine:latest运行环境无 Go,仅运行编译好的二进制,
运行COPY .env支持读取配置
启动CMD [“./gin-api-template”]容器启动后运行主程序

✅ 什么是 Alpine?

Alpine Linux 是一个体积极小、安全、资源占用极低的 Linux 发行版:

  • 📦 镜像大小只有 5MB 左右
  • 🛡️ 默认关闭大多数服务,攻击面小,安全性高
  • 🚀 启动快、非常适合云原生和容器部署
  • 🧊 使用 musl libc 和 busybox 替代 glibc 和 coreutils,减少依赖

docker-compose.yml

version: '3.8'services:gin-api:build: .ports:- "8080:8080"volumes:- .env:/app/.env  # 确保文件名一致env_file:- .envrestart: unless-stopped

相关文章:

docker 部署 gin

编译与执行 ✅「静态编译语言 生成原生二进制文件 操作系统直接执行」 Go 语言之所以在工程部署场景中大受欢迎的核心优势:它直接编译成原生二进制可执行文件(binary executable)。 🔧 Go 是“静态编译语言”(编译型…...

十三: 神经网络的学习

这里所说的“学习”是指从训练数据中自动获取最优权重参数的过程。为了使神经网络能进行学习,将导入损失函数这一指标。而学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数。为了找出尽可能小的损失函数的值,我们将介绍利…...

Qt OpenGL编程常用类

Qt提供了丰富的类来支持OpenGL编程,以下是常用的Qt OpenGL相关类: 一、QOpenGLWidget 功能:用于在 Qt 应用程序中嵌入 OpenGL 渲染的窗口部件。替代了旧版的QGLWidget。提供了OpenGL上下文和渲染表面。 继承关系:QWidget → QOpenGLWidget 属性与方法: QOpenGLWidget 属…...

数据结构 --- 顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改 顺序表分为:静态顺序表、动态顺序表 一.静态顺序表 #define N 7 typedef int SLDataType;typedef struct Seqlist {…...

MySQL高级查询技巧:分组、聚合、子查询与分页【MySQL系列】

本文将深入探讨 MySQL 高级查询技巧,重点讲解 GROUP BY、HAVING、各种聚合函数、子查询以及分页查询(LIMIT 语法)的使用。文章内容涵盖实际应用中最常见的报表需求和分页实现技巧,适合有一定 SQL 基础的开发者进一步提升技能。 一…...

无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)

在倾转旋翼无人机、垂直起降(VTOL)及混合动力飞行器的研发中,动力系统在垂直-水平模式切换时的动态性能至关重要。LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模…...

.NET8入门:14.ASP.NET Core MVC进阶——Model

上一篇文章我们了解了一下MVC在ASP.NET8中的一些基础概念,接下来深入了解一下ASP.NET Core MVC中Model的一些特性和用法。 Model 职责 Model 代表应用程序的核心数据和业务逻辑部分。它负责: 封装业务数据:表示应用程序中的实体,…...

latex figure Missing number, treated as zero. <to be read again>

\begin{figure}[h] \centering \includegraphics[width\linewidth]{pictures/architecture.pdf} \caption{Typical architecture.} \label{fig:architecture} \end{figure}, 我在编译latex,这段代码报错, Missing number, treated …...

java CompletableFuture创建异步任务(Completable异步+ExecutorService线程池)

文章目录 前置自定义线程池使用 CompletableFuture 创建异步任务 前置 来自 import java.util.concurrent.CompletableFuture; 自定义线程池 推荐根据业务需求配置 ExecutorService pool new ThreadPoolExecutor(10, // 核心线程数20, // 最大线程数60L, TimeUnit.SECONDS…...

LeetCode 高频 SQL 50 题(基础版)之 【聚合函数】部分

题目:620. 有趣的电影 题解: select * from cinema where description !boring and id%21 order by rating desc题目:1251. 平均售价 题解: select p.product_id product_id,round(ifnull(sum(p.price*u.units)/sum(u.units),0)…...

【AI学习】检索增强生成(Retrieval Augmented Generation,RAG)

1,介绍 出自论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》,RAG是权宜之计,通过RAG将问题简单化、精简化、剔除噪声,让LLM更容易理解、生成内容。RAG:检索增强技术检索生成(重…...

低成本高效图像生成:GPUGeek和ComfyUI的强强联合

一、时代背景 在如今的数字化时代,图像生成技术正不断发展和演变,尤其是在人工智能领域。无论是游戏开发、虚拟现实,还是设计创意,图像生成已成为许多应用的核心技术之一。然而,随着图像质量需求的提升,生成…...

基于Matlab实现卫星轨道模拟仿真

在IT行业中,卫星轨道模拟和仿真程序是航空航天领域的重要工具,用于预测和分析人造卫星的运动轨迹。 我们需要理解卫星轨道的基本原理。地球引力使得卫星围绕地球运动,形成特定的椭圆或圆形轨道。牛顿的万有引力定律和开普勒的行星运动定律为…...

前端使用 spark-md5 实现大文件切片上传

需要计算文件MD5和、分片MD5: 封装公共方法代码如下: import SparkMD5 from "spark-md5"/*** 计算文件MD5* param file* returns*/ export function calculateFileMD5(file) {return new Promise((resolve) > {const reader new FileRea…...

《操作系统真相还原》——进入内核

ELF 按书上的操作来,在现代操作平台编译链接默认生成elf64 格式的文件, 很显然程序头位置发生变化,因为定义elf 结构的类型中有64位,所以我们需要将编译链接出32位格式的 gcc -m32 -c -o main.o main.c ld -m elf_i386 main.o …...

【QQ音乐】sign签名| data参数 | AES-GCM加密 | webpack(上)

1.目标 网址:https://y.qq.com/n/ryqq/toplist/26 切换榜单出现请求,可以看到sign和data是加密的 2.逆向分析 搜索sign: 可以看到sign P(n.data),而n.data就是请求的加密data参数 data {"comm":{"cv":4747474,&qu…...

【STM32】按键控制LED 光敏传感器控制蜂鸣器

🔎【博主简介】🔎 🏅CSDN博客专家 🏅2021年博客之星物联网与嵌入式开发TOP5 🏅2022年博客之星物联网与嵌入式开发TOP4 🏅2021年2022年C站百大博主 🏅华为云开发…...

M-OFDM模糊函数原理及仿真

文章目录 前言一、M序列二、M-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、m-OFDM 模糊函数②、m-OFDM 距离分辨率③、m-OFDM 速度分辨率④、m-OFDM 等高线图 四、资源自取 前言 本文进行 M-OFDM 的原理讲解及仿真&#x…...

【MySQL】MVCC与Read View

目录 一、数据库并发的三种场景 二、读写场景的MVCC (一)表中的三个隐藏字段 (二)undo 日志 (三)模拟MVCC (四)Read View (五)当前读和快照读 三、RC和…...

相机--双目立体相机

教程 链接1 教程汇总 立体匹配算法基础概念 视频讲解摄像机标定和双目立体原理 两个镜头。 双目相机也叫立体相机--Stereo Camera,属于深度相机。 作用 1,获取图像特征; 2,获取图像深度信息; 原理 原理和标定 …...

多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现

多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现 目录 多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现效果一览基本介绍…...

工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”

在日常工作里,需求变动或者新增功能是再常见不过的事情了。而面对这种情况时,那些耦合度较高的代码就会给我们带来不少麻烦,因为在这样的代码基础上添加新需求往往困难重重。为了保证系统的稳定性,我们在添加新需求时,…...

23、Swift框架微调实战(3)-Qwen2.5-VL-7B LORA微调OCR数据集

一、模型介绍 Qwen2.5-VL 是阿里通义千问团队开源的视觉语言模型,具有3B、7B和72B三种不同规模,能够识别常见物体、分析图像中的文本、图表等元素,并具备作为视觉Agent的能力。 Qwen2.5-VL 具备作为视觉Agent的能力,可以推理并动态使用工具,初步操作电脑和手机。在视频处…...

37. Sudoku Solver

题目描述 37. Sudoku Solver 回溯 class Solution {vector<vector<bool>> row_used;vector<vector<bool>> col_used;vector<vector<bool>> box_used;public:void solveSudoku(vector<vector<char>>& board) {row_used.r…...

C# Renci.SshNet 登陆 suse配置一粒

C# 调用Renci.SshNet 的SSH类库&#xff0c;登陆 suse linux系统&#xff0c;如果没有配置&#xff0c;会报错&#xff1a; Renci.SshNet.Common.SshAuthenticationException: No suitable authentication method found to complete 1、需要root登陆os,配置 /etc/ssh/sshd_con…...

RV1126-OPENCV 图像叠加

一.功能介绍 图像叠加&#xff1a;就是在一张图片上放上自己想要的图片&#xff0c;如LOGO&#xff0c;时间等。有点像之前提到的OSD原理一样。例如&#xff1a;下图一张图片&#xff0c;在左上角增加其他图片。 二.OPENCV中图像叠加常用的API 1. copyTo方法进行图像叠加 原理…...

修改 vscode 左侧导航栏的文字大小 (更新版)

1. 起因&#xff0c; 目的: 问题&#xff1a; vscode 左侧的文字太小了&#xff01;&#xff01;&#xff01;我最火的一篇文章&#xff0c;写的就是这个问题。 看来这个问题&#xff0c;是很广泛的一个痛点。我最近更新了 vscode&#xff0c; 这个问题又出现了。再来搞一下。…...

从C++编程入手设计模式2——工厂模式

从C编程入手设计模式 工厂模式 ​ 我们马上就要迎来我们的第二个创建型设计模式&#xff1a;工厂方法模式&#xff08;Factory Method Pattern&#xff09;。换而言之&#xff0c;我们希望使用一个这样的接口&#xff0c;使用其他手段而不是直接创建的方式&#xff08;说的有…...

云原生 Cloud Native Build (CNB)使用初体验

云原生 Cloud Native Build&#xff08;CNB&#xff09;使用初体验 引言 当“一切皆可云”成为趋势&#xff0c;传统开发环境正被云原生工具重塑。腾讯云CNB&#xff08;Cloud Native Build&#xff09;作为一站式开发平台&#xff0c;试图解决多环境协作难题。 本文将分享c…...

格式工厂 FormatFactory v5.20.便携版 ——多功能媒体文件转换工具 长期更新

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VORWF3Q7D0eCVV06LHbzheD-A1?pwdjikz# 【​本章下载二】&#xff1a;https://pan.quark.cn/s/8ee59ed83658 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…...