Docker上部署goweb项目

一、安装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污染拉取不到,我们可以配置国内的镜像加速

这里给出的是阿里镜像加速,通过加速拉取包也不是百分百成功,检查自己的命令正确后多操作几次就可以了

  1. 在环境变量中加入以下内容:
  2. 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

请添加图片描述

猜你喜欢

转载自blog.csdn.net/apple_51931783/article/details/128406022
今日推荐