【Docker系列教程之六】Docker的前世今生

在前面的文章中,我带大家把 Docker 的基础知识做了个全面的了解,包括 Docker 是什么, Docker 环境的搭建, Docker 的架构,以及如何通过 Dockerfile 去构建自己的容器等等。虽然这些知识已经足够我们去搭建漏洞环境了,但是为了扩展学习和后期可能会去涉及到像分析 beego 等 Web 框架漏洞,我觉得有必要去提一提 Docker 的前世今生,有必要把 Docker 稍微讲的更加深入一点。了解了这些,我们在分析框架漏洞源码的时候才会变得更加得心应手。

首先我们需要知道的是 Docker 是由 Golang 开发的。而为什么选择用Golang而不选择用其他语言呢?是不是因为其他语言不支持这个呢?

由于我们现在主流的服务都是使用 Unix/Linux 操作系统的,而 Golang 对于第三方的依赖相当的少(只依赖 glibc ),这点既是限制,也是优势。当然了,也是基于这个原因,使用 Golang 开发的 Docker 基本能够完美的运行于大多数安装 Unix/Linux 操作系统的服务器上。

那么 glibc 到底是什么呢?

其实 glibc 是 GNU 发布的 libc 库,即 c 运行库。glibc是 linux 系统中最底层的 API ,几乎其它任何运行库都会依赖于 glibc 。这样也意味着 docker 在 Unix/Linux 系统上运行其实可以抛开 Golang

由于 Golang 编译生成的文件除了 glibc 外没有其它依赖,这样也意味着目前 Docker 只能运行在 Unix/Linux系统上。所以目前 Docker在 Windows 上的运行实际上是运行在一个虚拟的 Linux 环境上。因此 Docker 运行不需要安装 Golang 。

Golang 语言和 Docker 这两种技术已经成为新一代的云计算技术,而且可以看到其发展态势非常迅猛。

当然,既然提到了这里,我们来说一说 Golang 这门语言吧,它到底好在哪里呢?

Golang是什么?

Go 语言是于 2009 年 11月正式发布的,是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。为了方便搜索和识别,有时会将其称为 Golang

由于 Go 语言是一门强类型的通用编程语言。它的基础语法与 C 语言很类似,但对于变量的声明有所不同,也对其他的一些优秀编程语言有所借鉴。另外, Go 语言支持垃圾回收。

与C++相比,Go语言并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了 Slice 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。

而 Go 语言对并发编程的支持是天生的、自然的和高效的。 Go 语言为此专门创造出了一个关键字 go 。使用这个关键字,我们就可以很容易的使一个函数被并发的执行。

回顾了一下Go语言的发展过程, Go 语言这十年的迅猛发展,使它成为了云计算领域中新一代的开发语言。Go语言在 2017 年的编程语言排行榜中首次进入前十名。

据最新统计, Github 上有超过 86,600 个基于 Go 语言的软件项目,而且这只是开源的公开项目,毫无疑问,许多私有的、专利的软件项目也使用了 Go 语言进行开发。

Golang语言的优势

上图可以清晰的反应出Go语言的优势所在:代码短,书写美观,开发效率高

我把 Golang 语言的优势总结为以下几点:

  • 1、语言简单,上手快。 Go 语言的语法特性很简单,你只要有大学 C 语言的基础,完全能够很好的掌握这门编程语言。

  • 2、并行和异步编程几乎无痛点。 Go 语言的 Goroutine 和 Channel 这两个可以堪称为神器。对于并发和异步编程来讲无疑是一个巨大的福音。像 C 、 C++ 、 Java 、 Python 和 JavaScript 这些语言的并发和异步方式太控制就比较复杂了,而且容易出错,而 Go 解决这个问题就显得十分优雅和流畅。

  • 3、Go语言的lib库麻雀虽小五脏俱全。Go语言的lib库中有绝大多数常用的库,足够开发使用。Go语言也有开源的社区,Go语言的库在不久的将来也会变得更加完善。

  • 4、C语言的理念和Python的姿态。个人认为Go语言是结合了C语言和Python的优势开发出的一门编程语言。Go语言在保持语言小巧性的同时,不屏蔽底层且底层友好,还能关注语言的执行效率和性能,用尽可能少的代码完成尽可能多的事,是一门很棒的编程语言。

下图可以很直观地反应出Go语言开发效率相对于其他编程语言的优势所在。

2015年的 StackOverflow 开发者调查报告显示,有 19% 的 DevOps 开发者说他们将来计划使用Go语言,代表着从当前 10% 的 Go 语言用户的增长。

除了 Docker 之外,包括 Kubernetes 容器管理软件和 Hashicorp 的 Nomad 集群管理软件等其它的容器支持软件也由 Go 语言进行开发。所以说 Docker 不会找到比 Go 更好的合作伙伴了。

我们从下图中也可以看到 Golang 工程师的薪资比起 Java 要更高些:

Golang 的开源社区在这里:https://github.com/golang/go,我们在这里能找到所有我们需要的开源的学习资料。在后面的文章中,我们将会基于Docker容器去搭建一个golang环境,方便更好的学习和管理。

猜你喜欢

转载自www.cnblogs.com/blackCatFish/p/9833106.html