【云原生 | 37】Docker快速部署编程语言Golang_docker go运行环境-程序员宅基地

技术标签: 云原生  golang  阶段六:零基础入门云原生(Docker+k8s)  docker  

博主简介
        云计算领域优质创作者
        新星计划第三季python赛道第一名
        阿里云ACE认证高级工程师
        阿里云开发者社区专家博主
博主微信:15575411187
交流社区小鹏linux(个人社区)欢迎您的加入!

目录

1. 关于Golang

2. 哪些大公司正在使用Go语言 

3. 搭建并运行Go容器 

4. 搭建并运行Beego容器

5. 搭建并运行Gogs:基于Go的Git服务 

  结束语


1. 关于Golang

Go语言(也称Golang)是一个由Google主导研发的编程语言,于2009年推出。它的语法清晰明了,设计精良,拥有一些先进的特性,还有一个庞大的标准库。Go的基本设计理念是:编译效率、运行效率和开发效率要三者兼顾。使用Go开发,既可以得到很多灵活的语法支持,又可以拥有C/C++的运行和编译效率。此外,Go提供了轻量级的协程,支持大规模并发的场景。

因为Go语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说Go语言是一门混合型的语言。

此外,很多重要的开源项目都是使用Go语言开发的,其中包括 Docker、Go-Ethereum、Thrraform 和 Kubernetes。

Go语言有一个吉祥物,在会议、文档页面和博文中,大多会包含下图所示的 Go Gopher,这是才华横溢的插画家 Renee French 设计的,她也是 Go 设计者之一 Rob Pike 的妻子。

2. 哪些大公司正在使用Go语言 

Go语言是谷歌在 2009 年发布的一款编程语言,自面世以来它以高效的开发效率和完美的运行速度迅速风靡全球,被誉为“21 世纪的C语言”。

现在越来越多的公司开始使用Go语言开发自己的服务,同时也诞生了很多使用Go语言开发的服务和应用,比如 Docker、k8s 等,下面我们来看一下,有哪些大公司在使用Go语言。

1) Google 

作为创造了Go语言的 google 公司,当然会力挺Go语言了。Google 有很多基于 Go 开发的开源项目,比如 kubernets,docker,大家可以参考《哪些项目使用Go语言开发》一节了解更多的Go语言开源项目。

2) Facebook 

Facebook 也在使用Go语言,为此他们还专门在 Github 上建立了一个开源组织 facebookgo。大家可以通过 Meta Go · GitHub 访问查看 facebook 开源的项目,其中最具代表性的就是著名平滑重启工具 grace。

3) 腾讯 

腾讯在 15 年就已经做了 Docker 万台规模的实践。因为腾讯主要的开发语言是 C/C++ ,所以在使用Go语言方面会方便很多,也有很多优势,不过日积月累的 C/C++ 代码很难改造,也不敢动,所以主要在新业务上尝试使用 Go。

4) 百度 

百度主要在运维方面使用到了Go语言,比如百度运维的一个 BFE 项目,主要负责前端流量的接入,其次就是百度消息通讯系统的服务器端也使用到了Go语言。

5) 七牛云 

七牛云算是国内第一家选Go语言做服务端的公司。早在 2011 年,当Go语言的语法还没完全稳定下来的情况下,七牛云就已经选择将 Go 作为存储服务端的主体语言。

6) 京东 

京东云消息推送系统、云存储,以及京东商城的列表页等都是使用Go语言开发的。

7) 小米 

小米对Go语言的支持,在于运维监控系统的开源,它的官方网址是 Open-Falcon - Monitoring system & time series database。此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Go语言。

8) 360 

360 对Go语言的使用也不少,比如开源的日志搜索系统 Poseidon,大家可以通过 GitHub - Qihoo360/poseidon: A search engine which can hold 100 trillion lines of log data. 查看,还有 360 的推送团队也在使用Go语言。

除了上面提到的,还有很多公司开始尝试使用Go语言,比如美团、滴滴、新浪等。

Go语言的强项在于它适合用来开发网络并发方面的服务,比如消息推送、监控、容器等,所以在高并发的项目上大多数公司会优先选择 Golang 作为开发语言。

3. 搭建并运行Go容器 

1.使用官方镜像 

运行Go语言环境的最简方法是使用官方golang镜像。可以使用docker run指令直接启动Go语言的交互环境:
$ docker run -it golang /bin/bash
root@79afc2b64b06:/go# go versiongo version go1.7 linux/amd64
还可以将Go编译指令写入Dockerfile中,基于此Dockerfile构建自定义镜像。具体步骤如下。

第一步,新建项目文件夹,并在根目录新建Dockerfile:

FROM golang:1.6-onbuild             # 显示声明基础镜像版本,利于后期维护。
# onbuild版本Dockerfile的具体内容如下:
FROM golang:1.6
RUN mkdir -p /go/src/app
WORKDIR /go/src/app
CMD ["go-wrapper", "run"]           # 通过`go-wrapper`程序执行当前目录下的主函数
ONBUILD COPY . /go/src/app          # 拷贝当前项目代码至运行目录
ONBUILD RUN go-wrapper download     # 下载依赖,具体实现参考`go-wrapper`源码
ONBUILD RUN go-wrapper install      # 安装依赖,具体实现参考`go-wrapper`源码
# `go-wrapper`源码地址:`https://github.com/docker-library/golang/blob/master/gowrapper`
# Dockerfile源码地址: `https://github.com/docker-library/golang/blob/master/1.6/
onbuild/Dockerfile`

第二步,新建自定义go程序go-sample.go:

package main
import "fmt"
func main() {
    fmt.Println("Hello,世界")
}

第三步,使用docker build指令构建镜像:

$ docker build -t golang-image .

最后,使用docker run指令运行Go容器:

$ docker run -it --rm --name golang-container golang-image
+ exec app
Hello,世界
至此成功运行了Go语言的实例容器。如果需要在容器中编译Go代码,但是不需要在容器中运行它,那么可以执行如下命令:
$ docker run --rm -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp golang go build -v
_/usr/src/myapp
这会将Go项目文件夹作为Docker数据卷挂载起来并作为运行目录。然后,Docker会在工作目录中编译代码,执行go build命令并输出可执行文件至myapp。

2.Go项目容器化 

首先,下载Golang官方提供的outyet示例项目:

$ mkdir outyet
$ cd outyet
# ֯使用go get下载 :
$ go get github.com/golang/example/outyet
# 或者直接使用wget下载 :
$ wget https://github.com/golang/example/archive/master.zip
$ unzip master.zip
$ cd example-master/outyet
$ ls
Dockerfile containers.yaml main.go main_test.go

示例项目搭建成功后,可以按照以下模板去自定义项目的Dockerfile:

# ֯使用golang基础镜像。基于Debian系统,安装最新版本的golang环境。工作空间(GOPATH)配置是"/go"
FROM golang
# 将本地的包文件拷贝至容器工作目录。
ADD . /go/src/github.com/golang/example/my-go
# 在容器中构建my-go。可以在这里手动或者自动(godep)管理依赖关系。
RUN go install github.com/golang/example/my-go
# 设定容器自动运行my-go。
ENTRYPOINT /go/bin/my-go-app
# 监听8080端口。
EXPOSE 8080
如果使用onbuild版本的基础镜像,那么源文件拷贝、构建与配置等过程就会自动完成,无需在Dockerfile中逐一配置,如下所示:
FROM golang:onbuild
EXPOSE 8080
下面开始构建与运行此Golang项目。在outyet项目根目录执行docker build指令,使用本地目录下的Dockerfile:
$ docker build -t outyet .
构建过程中,Docker会从Docker Hub中获取golang基础镜像,拷贝本地包文件,构建项目并给镜像打上outyet标签。下面,使用docker run指令运行此镜像:
$ docker run -p 6060:8080 --name test --rm outyet
此时,实例项目的容器已经在运行状态。打开浏览器访问 http://localhost:6060/ 即可看到运行界面。

4. 搭建并运行Beego容器

Beego是一个使用Go的思维来帮助开发者构建并开发Go应用程序的开源框架。Beego使用Go开发,思路来自于Tornado,路由设计来源于Sinatra。使用方法如下。

第一步,下载安装:

go get github.com/astaxie/beego

第二步,创建文件hello.go:

package main
import "github.com/astaxie/beego"
func main() {
    beego.Run()
}

第三步,编译运行:

go build -o hello hello.go
./hello
第四步,打开浏览器并访问 http://localhost:8080
至此,一个Beego项目成功构建了。

5. 搭建并运行Gogs:基于Go的Git服务 

Gogs的目标是打造一个最简单、轻松的方式搭建自助Git服务。使用Go语言开发使得Gogs能够通过独立的二进制分发,并且支持Go语言支持的所有平台,包括Linux、Mac OS X、Windows以及ARM平台。

可以使用docker run直接创建并运行镜像:

$ docker run --rm --name gogs gogs/gogs

如果需要停止此镜像,可以使用docker stop与docker rm指令:

$ docker stop gogs; docker rm gogs
如果需要将数据持久化,可以先新建数据文件夹,然后将其作为数据卷挂载至gogs容器中:
$ mkdir -p /srv/lxc/gogs/data
$ docker run -d --name gogs \ -p 8300:3000 -p 8322:22 -v /srv/lxc/gogs/data:
/data gogs/gogs

  结束语

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_62294245/article/details/127367072

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签