Docker上部署goweb项目

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

一、安装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 的默认值是我们当前的操作系统 如果 windowslinux,注意 mac os 操作的上的值是darwin。

GOARCH 则表示 CPU 架构如 386amd64,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

请添加图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: goDocker