Go云原生开发零基础教程:搭建第一个容器化Go服务

准备工作:安装Go和Docker环境

在开始Go云原生开发之前,先搭建好本地开发环境。
你需要安装Go 1.20以上版本(下载地址)以及Docker Desktop(下载地址)。
安装完成后打开终端验证:

go version
# 输出类似 go version go1.21.0 linux/amd64

 docker --version
# 输出类似 Docker version 24.0.6

如果你计划部署到Kubernetes,建议同时启用Docker Desktop内置的K8s集群(Settings → Kubernetes → Enable),或者安装Minikube。
本文示例使用Docker Desktop自带的K8s,打开你的终端确保kubectl可用:

kubectl version --client

编写你的第一个Go HTTP服务

创建一个项目文件夹,比如 go-cloud-native,在里面新建 main.go,写入以下代码:

package main

import (
	"fmt"
	"log"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, 云原生世界!")
}

func main() {
	http.HandleFunc("/", handler)
	log.Println("服务启动在 :8080")
	log.Fatal(http.ListenAndServe(":8080", nil))
}

这个极简服务会在8080端口响应“Hello, 云原生世界!
”。
现在启动一下:

go run main.go

打开浏览器访问 http://localhost:8080,你应该看到那行字。
Ctrl+C 停止服务。

使用Docker容器化你的Go服务

在项目根目录创建 Dockerfile(无后缀),内容如下:

FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod ./
COPY main.go ./
RUN go build -o myapp .

FROM alpine:latest
WORKDIR /root
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]

采用多阶段构建,最终镜像只有几MB。
然后构建镜像并运行容器:

docker build -t go-cloud-native:v1 .
docker run -d -p 8080:8080 --name go-app go-cloud-native:v1

再次访问 http://localhost:8080,看到同样的响应说明容器化成功。
docker stop go-app && docker rm go-app 清理容器。

在Kubernetes中部署Go服务

确保K8s集群已启用(Docker Desktop → 设置 → Kubernetes → 启用)。
创建部署文件 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: go-app
  template:
    metadata:
      labels:
        app: go-app
    spec:
      containers:
      - name: go-app
        image: go-cloud-native:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: go-app-service
spec:
  selector:
    app: go-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  type: LoadBalancer

执行以下命令部署:

kubectl apply -f deployment.yaml
# 等待Pod就绪
kubectl get pods
# 查看Service的外部IP(Docker Desktop下为localhost)
kubectl get svc go-app-service

访问 http://localhost(或EXTERNAL-IP指定的地址),再次看到欢迎信息,说明你的Go云原生开发流程已跑通。

常见问题与避坑说明

  • Windows下路径分隔符:Dockerfile中的路径使用正斜杠,Windows下 COPY 时注意。
  • 镜像拉取策略:在K8s中如果不设置 imagePullPolicy: IfNotPresent,默认每次从远程拉取,本地镜像不会被使用导致ImagePullBackOff。我们上面已经正确设置。
  • 端口映射:Service中 port: 80 是对外端口,targetPort: 8080 是容器内端口,务必对应。
  • 验证方式:每次修改代码后,需重新构建镜像、更新Deployment(kubectl set image 或重新apply),简易测试可直接用 docker run 先验证。

如果你在Go云原生开发中遇到其他问题,建议先按本文步骤完整跑通,再扩展到更复杂的业务逻辑。

分享到:
上一篇
零基础也能上手的Python自动化运维教程
下一篇
Rust系统安全入门:从零搭建内存安全的服务器应用
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意