在前面的文章中,我带大家把 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环境,方便更好的学习和管理。