zoukankan      html  css  js  c++  java
  • 【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环境,方便更好的学习和管理。

    努力提高自己的技术,不忘初心
  • 相关阅读:
    kibana We couldn't activate monitoring
    学Redis这篇就够了!
    elasticsearch 官方监控文档 老版但很有用
    java dump 内存分析 elasticsearch Bulk异常引发的Elasticsearch内存泄漏
    Apache Beam实战指南 | 大数据管道(pipeline)设计及实践
    InnoDB一棵B+树可以存放多少行数据?
    函数编程真不好
    面向对象编程灾难
    可能是全网最好的MySQL重要知识点 | 面试必备
    终于有人把elasticsearch原理讲通了
  • 原文地址:https://www.cnblogs.com/blackCatFish/p/9833106.html
Copyright © 2011-2022 走看看