Go开发docker部署的网络应用流程

接上篇Go开发网络应用初探 , 写一下本人在Windows下打包docker并在Linux服务器上部署的流程。

一、还是强调必备的科学上网环境

我尝试过配置和使用代理,结果发现在打包过程中,还有很多不走代理的会卡死。

所以,最好的方式是让你的开发服务器能走旁路由或者直接在Mihomo下,走tun模式。tun模式会开出一个虚拟网卡,接管你的所有流量,缺陷是可能会发生DNS泄露,导致运营商知道你在使用魔法。

二、初始化Go项目

新建一个项目目录,在Powershell下,

mkdir my-geo-app && cd my-geo-app
go mod init my-geo-app

二、写main.go

把项目代码main.go 复制到项目目录

三、整理并下载依赖

go mod tidy

四、验证环境(可以跳过)

go run main.go

五、写Dockerfile

在项目目录下,写一个dockerfile文件, 因为我追求docker镜像尽可能的小和稳定,所以用Alpine Linux,也可以用Distroless,甚至 Scratch。

# ---------- 构建阶段 ----------
FROM golang:1.26-alpine AS builder

# Alpine 需要安装 git 才能下载某些依赖
RUN apk add --no-cache git

WORKDIR /app
ENV GOPROXY=https://goproxy.cn,direct

COPY go.mod go.sum ./
RUN go mod download

COPY . .

# 编译优化:-s -w 去掉调试符号,减少体积
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
    go build -ldflags="-s -w" -o my-geo-app

# ---------- 运行阶段 ----------
# 使用超轻量级 alpine
FROM alpine:latest

WORKDIR /app

# 安装必要的 CA 证书和时区数据(Geo 代码通常需要时区)
RUN apk add --no-cache ca-certificates tzdata

# 复制二进制
COPY --from=builder /app/my-geo-app .

# 设置时区为上海
ENV TZ=Asia/Shanghai

EXPOSE 8080

CMD ["./my-geo-app"]

六、清除旧的docker image

如果以前build过镜像,先清除一下。

docker images
docker rmi my-geo-app

七、Docker build

docker build -t my-geo-app .

在build阶段会下载基础镜像, 可能会存在下载或构建失败,检查网络环境,问AI吧

八、 Docker镜像离线打包

docker save -o my-geo-app.tar my-geo-app:latest

九、上传镜像压缩包并解压镜像

用xshell等ssh工具,把镜像压缩包上传到Linux的tmp目录,在tmp目录下,

docker load -i my-geo-app.tar

十、Docker Run

按相关参数运行docker run 创建容器。

十一、观察docker 日志

docker logs -f my-geo-app

Windows下开发Go网络应用并在Linux下Docker运行的完整流程如上。

原创文章,作者:Gary,如若转载,请注明出处:https://www.cpw5.top/1719.html

淘宝小店:陈皮王五工作室

公司网址:海灵德(六安)环境科技有限公司

(0)
GaryGary
上一篇 6天前
下一篇 2024-08-20 上午10:44

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(1条)