私有化下云托管入门指南
本文档介绍从零开始创建一个 Go 的容器化应用,并部署到腾讯云托管(CloudBase Run)。
前提条件:
- 开通企业版套餐,并部署微搭低代码私有部署集群版本
- 需要与云托管网路打通的容器镜像服务器(用于存放你构建的镜像)
- 需要环境留足资源,确保部署的容器化服务能够运行起来
- 本地开发时,需要安装 golang 与 docker
第 1 步:编写基础应用
创建名为 helloworld
的新目录,并转到此目录中:
mkdir helloworld
cd helloworld
初始化项目:
go mod init helloworld
在同一目录中,创建一个 main.go
文件,并将以下代码行复制到其中:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/api/post", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
handler(w, r)
})
port := "8089"
if err := http.ListenAndServe(":"+port, nil); err != nil {
log.Fatal(err)
}
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "{\"message\": \"Hello Weda!\"}\n")
}
此代码会创建一个基本的 Web 服务器,侦听 8089
端口, 当然你可以给这个代码,添加输入 body,具体请查阅 golang web 开发。
第 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 /app/server /app/server
EXPOSE 8089
# 启动 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 8089:8089 helloworld-go
访问 curl -X POST 'http://127.0.0.1:8080/api/post'
,您应该能看到 "{"message": "Hello Weda!"}" 的输出。
第 4 步:上传镜像至容器镜像服务器
// 说明:
// 1) my-regisitry.tencentcloudcr.com是容器镜像的服务名, 这个只是示例;
// 2) mysoftware是容器命名空间, 以你的为准,这里只是示例
// 3) helloworld-go:v0.0.1 容器名与tag, tag类似版本
docker tag helloworld-go my-regisitry.tencentcloudcr.com/mysoftware/helloworld-go:v0.0.1
// 4) 登录你的容器镜像的服务
docker login -p xxx -u yyy my-regisitry.tencentcloudcr.com
// 5) 推送镜像到你的仓库
docker push my-regisitry.tencentcloudcr.com/mysoftware/helloworld-go:v0.0.1
第 5 步:部署到软件化的云托管
登录微搭低代码私有部署集群版本管理端:
选择"云托管" --> "通过容器镜像部署"后,按照提示进行部署。
第 6 步:通过 APIs 调用服务
等待服务部署完成, 登录低代码平台-->"扩展能力"-->"资源链接"-->"APIs 连接器" --> "自定义 APIs" --> "HTTP 请求"
例如: 你的服务的默认域名为:http://helloweb-private:8080 对应的 path 为/api/post
则可以在 APIs 中的 URL 设置为:http://helloweb-private:8080/api/post