Go语言实战案例——进阶与部署篇:使用Docker部署Go服务

作者:程序员爱钓鱼日期:2025/10/11

在现代软件开发中,应用的可移植性和环境一致性至关重要。无论是在开发环境、测试环境还是生产环境,我们都希望 Go 项目能够快速部署、稳定运行。而 Docker 正是实现这一目标的关键工具。

本文将带你从零开始,实战演示如何使用 Docker 构建并部署一个 Go Web 服务。通过这个案例,你将学会将 Go 应用打包成轻量级容器镜像,并在任何地方一键运行。


一 为什么使用 Docker 部署 Go 服务

在未使用 Docker 之前,部署 Go 项目通常需要以下步骤:

1 安装 Go 环境 2 拉取源代码 3 手动编译 4 配置运行参数 5 启动服务

这种方式在多人协作或跨平台部署时非常容易出现环境不一致的问题。 而使用 Docker 部署后,只需一个镜像文件,任何服务器都可以直接运行,无需再配置环境。

使用 Docker 的好处包括:

  • 构建与运行环境完全一致
  • 部署过程自动化、标准化
  • 镜像可复用,可回滚
  • 轻量级容器启动速度快

二 创建一个示例 Go 服务

新建一个简单的 Go Web 服务项目

项目结构如下:

1myapp/
2├── main.go
3├── go.mod
4└── Dockerfile
5

main.go 中编写一个基础 HTTP 服务:

1package main
2
3import (
4    "fmt"
5    "net/http"
6)
7
8func handler(w http.ResponseWriter, r *http.Request) {
9    fmt.Fprintf(w, "Hello, Docker! This is a Go web service.")
10}
11
12func main() {
13    http.HandleFunc("/", handler)
14    fmt.Println("Server running on port 8080...")
15    http.ListenAndServe(":8080", nil)
16}
17

运行测试:

1go run main.go
2

访问浏览器 http://localhost:8080 可以看到返回内容。


三 编写 Dockerfile 构建镜像

Dockerfile 是镜像构建的核心文件,它描述了如何从基础镜像一步步生成可运行的应用。

在项目根目录创建 Dockerfile 文件,内容如下:

1# 使用官方 Go 镜像作为构建环境
2FROM golang:1.22 AS builder
3
4WORKDIR /app
5
6# 拷贝项目文件
7COPY go.mod .
8COPY main.go .
9
10# 下载依赖并编译可执行文件
11RUN go mod tidy
12RUN go build -o myapp main.go
13
14# 使用更小的基础镜像运行可执行文件
15FROM alpine:latest
16
17WORKDIR /root/
18
19# 从上一阶段复制可执行文件
20COPY --from=builder /app/myapp .
21
22# 暴露端口
23EXPOSE 8080
24
25# 启动服务
26CMD ["./myapp"]
27

说明:

1 第一阶段使用官方 Go 镜像进行构建,避免污染运行镜像 2 第二阶段采用 Alpine 最小镜像,仅包含运行时可执行文件 3 多阶段构建大大减小最终镜像体积


四 构建 Docker 镜像

在项目目录执行以下命令:

1docker build -t myapp:latest .
2

命令说明:

  • -t myapp:latest 表示给镜像命名为 myapp 并标记为 latest
  • . 表示使用当前目录中的 Dockerfile 构建镜像

构建完成后查看镜像:

1docker images
2

可以看到类似输出:

1REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
2myapp        latest    e2f9b8c45e12   10 seconds ago   15MB
3

五 运行 Docker 容器

镜像构建完成后,直接运行容器即可启动服务:

1docker run -d -p 8080:8080 myapp
2

参数说明:

  • -d 表示后台运行
  • -p 8080:8080 将宿主机端口映射到容器端口

使用浏览器访问 http://localhost:8080 可以看到返回结果:

1Hello, Docker! This is a Go web service.
2

这表示容器中的 Go 服务已成功启动。


六 验证容器状态

查看正在运行的容器:

1docker ps
2

输出结果:

1CONTAINER ID   IMAGE    COMMAND      STATUS          PORTS                   NAMES
2a3b1c5d8f7e1   myapp    "./myapp"    Up 10 seconds   0.0.0.0:8080->8080/tcp  myapp_container
3

查看容器日志:

1docker logs a3b1c5d8f7e1
2

停止容器:

1docker stop a3b1c5d8f7e1
2

七 部署到远程服务器

部署到生产环境只需两步:

1 在本地构建镜像并推送到镜像仓库

1docker tag myapp registry.example.com/myapp:v1
2docker push registry.example.com/myapp:v1
3

2 在服务器上拉取镜像并运行

1docker pull registry.example.com/myapp:v1
2docker run -d -p 8080:8080 registry.example.com/myapp:v1
3

服务器端即可直接运行服务,无需任何额外配置。


八 优化建议

1 使用 .dockerignore 文件排除无关文件,加快构建速度

1.git
2build
3tmp
4*.log
5

2 在 Dockerfile 中固定 Go 版本,避免编译差异 3 若是微服务项目,可使用 docker-compose 管理多个容器 4 在 CI/CD 流水线中集成构建与发布流程,实现全自动部署


九 总结

本文通过一个完整的案例展示了如何使用 Docker 部署 Go 服务。主要步骤包括:

  • 编写 Go 服务
  • 创建 Dockerfile
  • 构建镜像
  • 运行容器
  • 部署到服务器

通过 Docker,Go 应用可以实现真正的“一次构建,到处运行”,部署过程更快、更稳定、更安全。

掌握 Docker 部署,是每一个 Go 开发者迈向生产级工程实践的关键一步。



Go语言实战案例——进阶与部署篇:使用Docker部署Go服务》 是转载文章,点击查看原文


相关推荐


一款由网易出品的免费、低延迟、专业的远程控制软件,支持手机、平板、Mac 、PC、TV 与掌机等多设备远控电脑!
追逐时光者2025/10/9

前言 在多设备协同日益普及的今天,高效、流畅的远程控制已成为工作与生活的刚需。网易出品的这款免费远程控制软件,凭借低延迟、高画质与跨平台兼容性,轻松实现手机、平板、Mac、PC、TV 乃至掌机对电脑的远程操控,让自由办公与畅快娱乐触手可及。 工具介绍 网易UU远程是一款由网易出品的专业远程控制软件。支持手机、平板、Mac 、PC、TV 与掌机等多设备远控电脑,满足远程游戏、办公和协助需求。凭借高速直连和超低延迟,提供流畅的本地操控体验,支持真彩、 HDR 、4K、144 帧画面显示,支持远程开


基于数据挖掘的在线游戏行为分析预测系统
Python极客之家2025/10/8

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :)  1. 项目简介         随着在线游戏市场的快速增长,了解玩家行为对于提高用户留存率、优化游戏设计和提升用户体验变得至关重要。本项目旨在开发一个基于数据挖掘的在线游戏行为分析预测系统,利用先进的算法对玩家的行为数据进行分析,预测玩家的行为模式,并提供相应的优化建议。         该系统将涵盖数据收集、预处理、特征工程、模型训练、预测和结果展示等多个环节,旨在为游戏开发者和运营团队提供一个全面的玩家行为分析平台


前端读取文件夹并通过 SSH 上传:完整实现方案 ✅
excel2025/10/6

在 Web 应用中,除了单文件上传,很多时候我们还需要用户直接选择整个文件夹,并批量上传到远程服务器。典型场景包括:静态资源部署、文档归档、远程备份等。本文整合了 前端文件夹选择方案(webkitdirectory + File System Access API) 与 Node.js + node-ssh 后端上传,实现端到端的完整流程。 前端部分:选择文件夹并上传 前端的目标是让用户选择目录,遍历其中所有文件,并逐一上传到后端。 方案一:webkitdirectory 这是目前兼容度最好的


岚图汽车 x Apache Doris : 海量车联网数据实时分析实践
SelectDB技术团队2025/10/5

岚图汽车作为东风汽车集团旗下高端智慧新能源品牌,自 2019 年创立以来,以用户型科技企业为定位,构建了覆盖 SUV、MPV、轿车三大品类的产品矩阵。依托国务院国资委管理,世界 500 强东风集团五十多年的造车积淀与全产业链资源,岚图汽车坚持自研,打造了 ESSA 原生智能电动架构、中央集中式 SOA 电子电气架构等核心技术,旗下岚图 FREE+、梦想家、追光等车型凭借高品质与技术创新,成为最快实现累计产量突破 20 万辆的央国企新能源高端品牌。2025 年连续月销量破万,产品出口覆盖超 40


Linux--权限
L-n72025/10/4

文章目录 Linux权限的概念Linux权限管理文件访问权限的设置file 指令目录的权限总结 Linux权限的概念 Linux下有两种用户:超级用户(root)、普通用户。 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情。 超级用户:的命令提示符是“#”,普通用户的命令提示符是“$” 命令:su [用户名] 功能:切换用户。 要从root用户切换到普通用户user,则使用suuser。 要从普通用户user切换到root用户则使用su


PostgreSQL LIMIT 语句详解
lly2024062025/10/2

PostgreSQL LIMIT 语句详解 在数据库操作中,LIMIT 语句是一个非常实用的功能,它允许我们限制查询结果的数量。在 PostgreSQL 中,LIMIT 语句同样发挥着至关重要的作用。本文将详细介绍 PostgreSQL 的 LIMIT 语句,包括其用法、语法以及在实际应用中的注意事项。 1. LIMIT 语句的基本用法 LIMIT 语句通常用于限制查询结果的返回行数。其基本语法如下: SELECT column1, column2, ... FROM table_name WH


【1 月最新】前端 100 问:能搞懂 80% 的请把简历给我
程序员依扬2025/10/2

引言 再更新:上微信搜「高级前端面试」小程序,上下班路上刷题,半年突击进大厂! 更新:目前已达到『23K』Star了,谢谢大家的支持,最近折腾了一个博客网站出来,方便大家阅读,后续会有更多内容和更多优化,猛戳这里查看 ------ 以下是正文 ------ 半年时间,几千人参与,精选大厂前端面试高频 100 题,这就是「壹题」。 在 2019 年 1 月 21 日这天,「壹题」项目正式开始,在这之后每个工作日都会出一道高频面试题,主要涵盖阿里、腾讯、头条、百度、网易等大公司和常见题型。得益于大家


AR眼镜在安防领域人脸识别技术方案|阿法龙XR云平台
北京阿法龙科技有限公司2025/10/2

方案基于AR眼镜构建移动安防人脸识别系统,通过端 - 边 - 云协同架构实现实时身份核验,核心内容如下: 数据采集层 采用AR眼镜内置千万像素红外摄像头,支持 1080P@30fps 实时采集,通过畸变校正算法优化鱼眼效应,获取高质量人脸原始数据。 人脸提取层 在 AR 眼镜端部署轻量级人脸检测模型(如 MobileNet-SSD),通过前端人脸抠像技术实现: 基于 MTCNN 算法进行人脸区域快速定位采用自适应阈值分割去除背景干扰通过仿射变换实现人脸姿态归一化(±30° 姿态矫正)输


鸿蒙与iOS跨平台开发方案全解析
i建模10/1/2025

本文深度解析鸿蒙与iOS跨平台开发的六大主流方案,从技术特性到实战策略全面对比。重点介绍了华为官方ArkUI-X(支持三端编译、原生集成分布式能力)和腾讯开源Kuikly(基于Kotlin跨平台、优化GC性能)两大方案,并对比了Flutter和React Native等跨端框架的适配成本。文章详细探讨了平台差异适配策略,包括导航交互、推送服务和UI一致性的实现方法,并给出性能优化实践。最后根据场景需求给出选型建议:新项目推荐ArkUI-X,高性能应用选择Kuikly,现有Flutter项目可扩展插件方案。未


Java HTTP协议(二)--- HTTPS,Tomcat
英雄不问出处~9/30/2025

面试中经典的面试题https加密:(1) 对称加密,加密业务数据(2) 非对称加密,加密对称密钥(3) 中间人攻击(4) 使用证书,来验证服务器的公钥这些相结合,就保证了https的安全性了。

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0