Docker上部署goweb项目

news2024/9/27 19:22:13

文章目录

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

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

  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

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/170219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix 监控 Linux操作系统的监控指标

一、Zabbix 监控 Linux操作系统的监控指标 (仅供参考) Zabbi x默认使用Zabbix agent监控操作系统,其内置的监控项可以满足系统大部分的指标监控,因此,在完成Zabbix agent的安装后,只需在前端页面配置并关联相应的系统监控模板就可以了。 如果内置监控项不能满足监控需求…

走向开放世界强化学习、IJCAI2022论文精选、机器人 RL 工具、强化学习招聘、《强化学习周刊》第73期...

No.73智源社区强化学习组强化学习周刊订阅《强化学习周刊》已经开启“订阅功能”,扫描下面二维码,进入主页,选择“关注TA”,我们会向您自动推送最新版的《强化学习周刊》。本期贡献者:(李明,刘青…

【Kotlin】类的继承 ① ( 使用 open 关键字开启类的继承 | 使用 open 关键字开启方法重写 )

文章目录一、使用 open 关键字开启类的继承二、使用 open 关键字开启方法重写一、使用 open 关键字开启类的继承 Kotlin 中的类 默认都是 封闭的 , 无法被继承 , 如果要想类被继承 , 需要在定义类时 使用 open 关键字 ; 定义一个普通的 Kotlin 类 : class Person(val name: S…

分析GC日志来进行JVM调优

不同的垃圾收集器产生的GC日志大致遵循了同一个规则,只是有些许不同,不过对于G1收集器的GC日志和其他垃圾收集器有较大差别,话不多说,正式进入正文。。。 什么时候会发生垃圾收集 首先我们来看一个问题,那就是什么时…

SpringBoot集成Elasticsearch7.4 实战(三)

本篇文章主要讲的是:在Springboot环境下,管理数据1. 数据管理1.1. 新增数据1.1.1. 单实例新增http方式提交数据,案例中我将数据格式做了规范,提交过程中需要指定索引名,以及JSON格式数据,这样尽可能在实际过程中做到通…

图论算法:普里姆算法(C++实现+图解)

文章目录最小生成树普里姆算法实现过程代码实现最小生成树 什么是最小生成树? 对于如图所示的带权无向连通图来说:从图中任意顶点出发,进行dfs或者bfs便可以访问到图中的所有顶点,因此连通图中一次遍历所经过的边的集合以及图中所有顶点的…

libvirt零知识学习2 —— libvirt源码下载

1. libvirt官网主页 libvirt的官网地址为: https://libvirt.org/ 主页如下图所示: 2. libvirt官网下载主页 libvirt的官网下载页地址为(在主页中点击“Download”按钮即可跳转到): https://libvirt.org/downloads…

KaiwuDB 首席解决方案专家 金宁:1.0 时序数据库核心功能解读

以下是实录文章精简版欢迎大家点赞、收藏、关注!大家好,今天介绍将分为 3 部分:首先从物联网蓬勃发展的时代背景出发,我们一起来看看数据库究竟将面临怎样的挑战与机遇;接着我将为大家详细 KaiwuDB 1.0 时序数据库的核…

(Java高级教程)第四章必备前端基础知识-第一节:HTML

文章目录一:HTML概述(1)概述(2)标签(3)HTML基本结构二:常用标签介绍(1)注释(2)标题(3)段落(4&…

React Fragment

首先 我们编写这样一个例子 我们在创建一个react项目 在src的目录下创建components目录 components下创建一个子组件 我这里的名字叫 subset.jsx import React from "react";export default class subset extends React.Component{constructor(props){super(prop…

阿B百大名单公布,有你喜欢的up吗?

阿B在1月13日中午19点30分公布了2022百大UP主名单,那么今年的某站年度UP主都是谁呢?你喜欢的up入选了吗? 咱就来自己查一下都有谁入选了吧~ 我们是用python自动获取名单的哦。 环境使用 python 3.9 pycharm 模块使用 selenium 谷歌驱动 …

Java基础之《netty(26)—netty其他常用编解码器》

一、解码器-ReplayingDecoder 1、函数声明 public abstract class ReplayingDecoder<S> extends ByteToMessageDecoder 2、ReplayingDecoder扩展了ByteToMessageDecoder类&#xff0c;使用这个类&#xff0c;我们不必调用readableBytes()方法。参数S指定了用户状态管理…

【Linux】版本管理工具 Git

目录 一、什么是 Git 二、如何使用 Git 1、创建远程仓库 2、将远端仓库克隆到本地 3、将本地文件添加到仓库 3.1、三板斧第一招&#xff1a;文件添加 3.2、三板斧第二招&#xff1a;提交本地 3.3、三板斧第三招&#xff1a;提交远端 4、删除文件 5、删除仓库 一、什么是 Gi…

postman接口关联

有两种方法&#xff0c;使用json提取器实现接口关联&#xff0c;还有使用正则表达式提取器实现接口关联。方法一&#xff1a;使用json提取器实现接口关联第一个接口&#xff1a;//使用json提取器提取contractID、documentID//把返回的字符串格式的数据转换成对象的形式var resu…

SAP FICO 理解成本中心会计

成本中心会计 一、成本要素 管理会计&#xff08;CO&#xff09;的数据均来源于FI损益类科目&#xff0c;也就是说只有损益类科目才可以创建成本要素&#xff08;必须先创建损益类科目&#xff0c;后创建成本要素&#xff09;&#xff0c; 但是不一定所有的损益类科目都需要…

gma 气象气候函数包的简要介绍及运算过程主要问题说明(内存不足、出现 nan 等)及解决方法

0 概述 0.1 明确气候与气象的概念 气候(Climate)&#xff1a;是指一个地区大气物理特征的长期平均状态&#xff0c;具有一定的稳定性&#xff0c;且周期长。根据世界气象组织&#xff08;WMO&#xff09;的规定&#xff0c;一个标准气候计算时间为 30 年。 气象(Meteorology)&…

【论文笔记】一文读懂残差网络ResNet(附代码)

Residual Net论文笔记1. 传统深度网络的问题2. 残差结构和残差网络2.1 残差是什么2.2 残差模块 Residual Block2.3 基本模块BasicBlock和BottleNeck2.4 残差网络ResNet设计2.4.1 恒等映射与残差的连接3. Forward/Backward Propagation3.1 Forward propogation3.2 Back Propogat…

深信服行为感知命令执行漏洞

深信服行为感知命令执行漏洞1.深信服行为感知漏洞1.1.漏洞描述1.2.漏洞影响1.3.漏洞复现1.3.1.登录页面1.3.2.构建漏洞URL1.3.2.1.查询IP地址1.3.2.2.查询当前目录下文件1.深信服行为感知漏洞 1.1.漏洞描述 深信服 行为感知系统c.php远程命令执行漏洞&#xff0c;使用与EDR相同…

Docker搭建kafka集群

Docker搭建kafka集群集群规划镜像版本kafka为什么需要依赖zookeeper创建docker网络搭建zk集群新建文件docker-compose-zk.yml启动搭建kafka集群新建docker-compose-kafka.yml启动集群安装kafka-manager新建 docker-compose-kafka-manager.yml启动kafka-manager配置cluster修改k…

Pandas 数据结构 - DataFrame

Pandas 数据结构 - DataFrameDataFrame 是一个表格型的数据结构&#xff0c;它含有一组有序的列&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔型值&#xff09;。DataFrame 既有行索引也有列索引&#xff0c;它可以被看做由 Series 组成的字典&#xff08…