接上篇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运行的完整流程如上。
评论列表(1条)
[…] 下一篇:Go开发docker部署的网络应用流程 […]