文章目录
- 一、安装go语言环境
- ①下载go语言环境
- ②解压go语言环境到指定目录
- ③验证是否成功
- ④配置镜像加速
- 二、go语言项目配置
- 第一种:先编译后打包(分步部署,靠谱)
- 第二种:直接打包法
- 三、成功运行
一、安装go语言环境
①下载go语言环境
wget https://studygolang.com/dl/golang/go1.16.6.linux-amd64.tar.gz
可以去Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com)下载自己想要的版本
②解压go语言环境到指定目录
tar -C /usr/local -zxvf go1.16.6.linux-amd64.tar.gz
将文件解压到/usr/local里面,然后配置环境变量(配置到/etc/profile或者HOME/.profile都行,一个是用户变量,一个是系统变量)
vi /etc/profile
在/etc/profile最后一行添加环境变量
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
保存退出后source一下(vi 的使用方法可以自己搜索一下)
source /etc/profile
③验证是否成功
控制台输入 go
④配置镜像加速
通常会使用到github上的包,但是在拉取得时候经常会因为DNS污染拉取不到,我们可以配置国内的镜像加速
这里给出的是阿里镜像加速,通过加速拉取包也不是百分百成功,检查自己的命令正确后多操作几次就可以了
- 在环境变量中加入以下内容:
- GOPROXY=https://mirrors.aliyun.com/goproxy/
二、go语言项目配置
这里做的是将一个完整的项目打包成一个docker镜像,然后使用(有两种方式)
- 直接将go项目交叉编译成为一个可执行文件,然后在利用docker生成镜像(先编译后打包)
- 使用go语言项目与dockerfile直接打包出一个镜像(直接打包)
针对以下两种打包法都用一份测试代码
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", hello)
server := &http.Server{
Addr: ":8080",
}
fmt.Println("server startup...")
if err := server.ListenAndServe(); err != nil {
fmt.Printf("server startup failed, err:%v\n", err)
}
}
func hello(w http.ResponseWriter, _ *http.Request) {
w.Write([]byte("hello liwenzhou.com!"))
}
第一种:先编译后打包(分步部署,靠谱)
1.交叉编译
①简介
在进行Go开发的时候,go env
可以设置Go的环境变量信息
GOOS 的默认值是我们当前的操作系统, 如果 windows,linux,注意 mac os 操作的上的值是darwin。
GOARCH 则表示 CPU 架构,如 386,amd64,arm 等。
Go语言在windows或者mac上也可以将go语言编译成linux版本(go语言可执行文件只能在对应的系统上跑,但可以在任意系统编译任意的软件)
常用的环境切换
linux 64
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
windows
SET CGO_ENABLED=1
SET GOOS=windows
SET GOARCH=amd64
②.linux上进行编译
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build .
③在windows下进行编译(编译成linux可执行的文件)
// 设置Linux编译环境
// 第一种
SET CGO_ENABLED=0
set GOARCH=amd64
set GOOS=linux
// 第二种
go env -w CGO_ENABLED=0 GOOS=linux
// 开始编译
go build -o ./build/ ./main.go
2.创建dockerfile
FROM alpine:3.12
RUN mkdir "/app"
WORKDIR "/app"
COPY 可执行文件名 /app/app
ENTRYPOINT ["./app"]
3.生成docker镜像
docker build -t 镜像名:版本 .
效果如下:
第二种:直接打包法
这里要有go.mod文件,可以使用以下命令生成go.mod文件
go mod init xxx.go
1.先创建一个文件夹,存放我们要使用的东西(至少要有main.go、go.mod与dockerfile)其余的根据自己的项目进行搭配
2.编写dockerfile文件
FROM golang:alpine
# 为我们的镜像设置必要的环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# 移动到工作目录:/build
WORKDIR /build
# 将代码复制到容器中
COPY . .
# 将我们的代码编译成二进制可执行文件app
RUN go build -o app .
# 移动到用于存放生成的二进制文件的 /dist 目录
WORKDIR /dist
# 将二进制文件从 /build 目录复制到这里
RUN cp /build/app .
# 声明服务端口(与项目内监听的保持一致)
EXPOSE 8080
# 启动容器时运行的命令
CMD ["/dist/app"]
然后使用以下命令创建镜像文件
docker build . -t goweb_app
三、成功运行
docker run -p 8080:8080 goweb_app