【Golang - 实践】Docker部署Golang项目
一 Docker部署1 分阶段构建编写Dockerfile一般在项目根目录下新建设置代理GOPROXY=https://goproxy.cn,direct防止go mod下载超时DockerfileFROM golang:1.16-alpine AS builder# 为我们的镜像设置必要的环境变量ENV GO111MODULE=on \GOPROXY=https://goproxy.cn,dir
·
一 Docker部署
1 分阶段构建
- 编写Dockerfile
一般在项目根目录下新建
设置代理GOPROXY=https://goproxy.cn,direct
防止go mod
下载超时
Dockerfile
FROM golang:1.16-alpine AS builder
# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# 移动到工作目录:/build
WORKDIR /build
# 复制项目中的 go.mod 和 go.sum文件并下载依赖信息
# 设置代理,防止后面因为墙的原因下载go.mod依赖信息超时
# RUN go env -w GOPROXY=https://goproxy.io
COPY go.mod .
COPY go.sum .
RUN go mod download
# 将代码复制到容器中
COPY . .
# 将我们的代码编译成二进制可执行文件 bubble
RUN go build -o qlnc .
###################
# 接下来创建一个小镜像
###################
FROM scratch
# COPY ./templates /templates
# COPY ./static /static
# 从builder镜像中把/dist/app 拷贝到当前目录
COPY --from=builder /build/qlnc /
# 需要运行的命令
ENTRYPOINT ["/qlnc"]
-
将项目拷贝到服务器
我在windows打包,再传到linux服务器上构建镜像会有问题,所以将整个项目拷贝到服务器来打包 -
构建镜像
在Dockerfile所在目录执行
docker build . -t qlnc_app
- 创建容器
-it --rm
创建临时的容器,可以看到日志,但不能继续使用控制台
docker run -it --rm --name qlnc_server -p 8080:8080 qlnc_app
确认没问题后,正式创建容器,-d
以守护进程的方式运行
docker run -d --name qlnc_server -p 8080:8080 qlnc_app
2 遇到的问题
问题1:相对路径找不到文件(为解决)
- 使用docker部署一个带配置文件的golang项目
- go项目docker打包发布后读取不到项目内的文件
- Go语言:如何解决读取不到相对路径配置文件问题
- go run或build运行后,相对路径路径找不到:no such file or directory
- 彻底解决Golang获取当前项目绝对路径问题
问题2:无法构建镜像
参考docker官方构建go项目镜像的教程,用了golang:1.16-buster
作为基础镜像解决了
3 参考教程
- Docker官网构建Go项目镜像
- 田园博客:如何使用Docker部署Go Web应用(主要参考)
- 李文周的博客类似,有些细节说的比较清楚
- 李文周的博客:如何使用Docker部署Go Web应用
- docker+golang部署go服务器到腾讯云服务器上
- 在windows上构建,传到服务器构建镜像时有问题
- Docker Go 语言应用程序的编译与打包
- B站视频教程,部署一个go程序(go程序也需要go.mod文件)
- 解释了分阶段构建
二 Nginx部署(未实践)
- linux部署go项目
- 直接部署 & nginx部署
- 李文周的博客:部署Go语言项目
- 独立部署 & nginx部署
更多推荐
已为社区贡献1条内容
所有评论(0)