目录
以将一个简单的go http 部署到docker为例!
方法一:构建service镜像同时拉取go镜像
Dockerfile文件
# alpine Linux发行版,该发行版的大小很小并且内置了Go
FROM golang:alpine
# 设置linux环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# 设置镜像内工作目录
WORKDIR /build
# 将代码复制到容器中
COPY . .
# 将代码编译成二进制可执行文件app
RUN go build -o app .
# 移动到用于存放生成的二进制文件的 /dist 目录
WORKDIR /dist
# 将二进制文件从 /build 目录复制到/dist
RUN cp /build/app .
# 暴露端口
EXPOSE 8888
# 启动容器时运行的命令
CMD ["/dist/app"]
构建
docker build . -t goweb_app
docker run -p 8888:8888 goweb_app
方法二:分阶段构建,不保留源码文件和编译器
在最终的镜像中是不需要go编译器的,也就是说只需要一个运行最终二进制文件的容器即可。
FROM golang:alpine AS builder
# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# 移动到工作目录:/build
WORKDIR /build
# 将代码复制到容器中
COPY . .
# 将我们的代码编译成二进制可执行文件 app
RUN go build -o app .
###################
# 接下来创建一个小镜像
###################
FROM scratch
# 从builder镜像中把/dist/app 拷贝到当前目录
COPY --from=builder /build/app /
# 需要运行的命令
ENTRYPOINT ["/app"]
方法三:本地跨平台编译后,丢到服务器
交叉编译(跨平台编译)
- Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序。
- golang中跨平台交叉编译涉及两个重要的环境变量:GOOS 和 GOARCH,分别代表 Target Host OS 和 Target Host ARCH。
比较重要的几个参数
GOARCH="amd64" // 程序构建环境的目标计算架构
GOOS="linux" // 程序构建环境的目标操作系统
CGO_ENABLED="1" // 指明cgo工具是否可用的标识
命令公式
CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go build -o ${name} main.go
-
name:编译后app的名称,默认为gomod的包名
-
os:目标os,大致有如下一堆:
-
arch:架构
举例
-
Mac 下编译 Linux 和 Windows 64位可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
-
Linux 下编译 Mac 和 Windows 64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
-
Windows 下编译 Mac 和 Linux 64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
提示:如果win命令行提示'CGO_ENABLED' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
可以用git bash去编译。
加执行权限,chmod +x web
,然后执行,访问页面。(嫌开放端口之类的麻烦就把防火墙禁掉)
其他
go在windows编译如何添加图标
-
首先在网上免费的适量图库找一张喜欢的
ico
格式图标[https://www.aigei.com/icon/class/?term=ico],并下载到本地,假设命名为virus.ico
: -
然后在根目录下,源代码
*.go
的文件同级目录下创建.rc
文件,文件名与*.go
文件同名, -
编辑“excelpm.rc”文件内容:
IDI_ICON1 ICON "virus.ico"
-
运行命令生成文件:
windres -o drink_water.syso drink_water.rc
这里生成的 “excelpm.syso”的文件,建议也跟源代码的文件名一样。 -
在终端中运行
go build
,打包出来的exe就带有图标了:
如果没有windres命令,则可以去下载MinGW。
MinGW的全称是:Minimalist GNU on Windows ,实际上是将gcc(c/c++编译器)移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。
解压后,在bin文件夹下查看 “windres”,下一步就是添加环境变量即可使用