跳到主要内容

Go 快速开始

本文档介绍从零开始手动将一个 Go 应用容器化,并部署到腾讯云托管(CloudBase Run)。

代码示例:

https://github.com/TencentCloudBase/cloudbase-examples/tree/master/cloudbaserun/go

第 1 步:编写基础应用

创建名为 helloworld 的新目录,并转到此目录中:

mkdir helloworld
cd helloworld

创建一个包含以下内容的 go.mod 文件:

module helloworld

go 1.24

在同一目录中,创建一个 main.go 文件,并将以下代码行复制到其中:

package main

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

func main() {
http.HandleFunc("/", handler)
port := "80"
if err := http.ListenAndServe(":"+port, nil); err != nil {
log.Fatal(err)
}
}

func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World!\n")
}

此代码会创建一个基本的 Web 服务器,侦听 80 端口。

第 2 步:将应用容器化

在项目根目录下,创建一个名为 Dockerfile 的文件,内容如下:

# 使用官方 Golang 镜像作为构建环境
FROM golang:1.24-alpine as builder

# 设置工作目录
WORKDIR /app

# 复制源代码
COPY . .

RUN go mod download


# 构建二进制文件
RUN CGO_ENABLED=0 GOOS=linux go build -mod=readonly -ldflags="-s -w" -v -o server

# 选用运行时所用基础镜像(GO语言选择原则:尽量体积小、包含基础linux内容的基础镜像)
# https://hub.docker.com/_/alpine
FROM alpine:latest

# 安装基本工具和时区数据
RUN apk add --no-cache tzdata ca-certificates && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
apk del tzdata


# 设置工作目录
WORKDIR /app

# 将构建好的二进制文件拷贝进镜像
COPY --from=builder /app/server /app/server

EXPOSE 80

# 启动 Web 服务
CMD ["/app/server"]

添加一个 .dockerignore 文件,以从容器映像中排除文件:

vendor/
Dockerfile
README.md
.dockerignore
.gcloudignore
.gitignore

第 3 步(可选):本地构建和运行

如果您本地已经安装了 Docker,可以运行以下命令,在本地构建 Docker 镜像:

docker build -t helloworld-go .

构建成功后,运行 docker images,可以看到构建出的镜像:

REPOSITORY     TAG       IMAGE ID         CREATED          SIZE
helloworld-go latest 6948f1ebee94 8 seconds ago 15 MB

随后您可以将此镜像上传至您的镜像仓库。

执行以下命令来运行容器:

docker run -p 80:80  helloworld-python

访问 http://localhost,您应该能看到 "Hello World!" 的输出。

第 4 步:部署到 CloudBase 云托管

如果您已经安装了 CloudBase CLI,可以在项目目录下使用以下命令将应用部署到 CloudBase 云托管:

tcb cloudrun deploy

输入环境和服务名称后,CLI 会自动打包应用像并部署到云托管。更多部署方式请参考 部署服务

Go 框架项目的示例可参考: