Docker 获 7500 万美元融资,估值达 13 亿美元|航海日志 Vol.24

汇总一周容器圈热点资讯,让开发者了解最 in 的容器技术,让企业熟知最实时的国内外容器行业动态。

Docker 获 7500 万美元融资,估值达 13 亿美元

企业软件公司 Docker 昨日宣布获得 7500 万美元融资,交易后估值达 13 亿美元。此轮融资预计于本月底完成,将帮助 Docker 吸引企业客户,其广受全世界开发人员欢迎的开源工具也终于可以开始赚钱了。该公司将用部分资金打造一支销售和营销团队,专门服务企业客户。Docker 的上一轮融资是在 2015 年,当时交易后估值为 10 亿美元,如今的估值又得到小幅增长。
虽然 Docker 的技术受到了大量开发人员的好评——其社区拥有 3000 多名个人贡献者和270 多个技术开发小组,但超高的人气并没有给他们带来实际收入。
Docker 方面拒绝对此次融资和公司估值置评。这家成立7年的公司拥有 ADP LLC 和通用电气等知名企业客户,竞争对手又有创企 Mesosphere 和谷歌 Kubernetes 等开源系统。
今年春天,Docker 管理层经历了一系列变动。5月,Concur Technologies 的原首席执行官Steve Singh 来到 Docker,取代联合创始人 Ben Golub 成为公司一把手。产品执行副总裁 Marc Verstaen 近日也离开了公司,接替他的是另一家公司的联合创始人兼首席技术官 Solomon Hykes。

 AWS 正式加入 CNCF,Kubernetes 已成为容器编排事实标准?

就在微软上周刚刚宣布加入 CNCF 不久,AWS 便也紧随其后,于近日宣布以铂金身份加入云原生计算基金会(CNCF),这也就意味着在容器编排方面 ,AWS 选择了拥抱开源的方式。
AWS 加入 CNCF,也就意味着要解决 AWS 和 Kubernetes 之间的融合问题。Kubernetes 这一原先由 Google 开发的开源的容器编排工具正快速成为管理容器化软件开发环境的事实标准。
CNCF 是用于管理和统筹 Kubernetes 项目的,而作为新加入 CNCF 的成员,AWS 也承诺花费时间和金钱来帮助进一步构筑和发展该项目,并贡献一些其他的小项目来让 Kubernetes 更易于使用。
亚马逊曾经一度推出自己的容器编排产品:Amazon EC2 容器服务,这样就有很多云计算用户和公司越来越担心 AWS 只关心自己的产品和服务,是想牢牢的将用户锁定在 AWS,让用户不断的投入时间和金钱。然而,Kubernetes 能够让云计算用户轻松的扩展自己的负载到多个云计算供应商中,当然也包括自己本地的服务器。AWS 可能意识到了这一点,认为应该去积极支持(尽管不是全部)。
其实,近期 AWS 的一些动作已经表明,AWS 正在向 Kubernetes 靠拢。比方说,一份近期的报告就显示,AWS 意图在 Kubernetes 之上开发一套容器编排产品,而加入 CNCF,也让这个计划水到渠成。
有分析人士表明:AWS 以实际行动站在了开源的阵营,某种程度上我们可以认为这是开源的再一次胜利,当然,最大的受益者仍然是拥抱 Kubernetes 的用户和开发者。目前为止,Gartner 公有云魔力向限的前三名:AWS、Azure、Google,均在自己的公有云服务中支持 Kubernetes,也加入了 CNCF,这意味着三家将在标准中角力。但是对于用户来说,再也不存在锁定的问题了。
这无疑是 AWS,作为强者的一次让步,也说明 AWS 的聪明之处——一切以利益为先,绝不逆势而为。

使用 Golang 在构建时注入变量

在这篇博文中,我将介绍如何在构建时将变量注入 Golang 可执行文件。
下面的实例包含了 Docker 项目的 CLI,和提交 ID77b4dce:

为什么需要加入版本信息? 这个一个很好的客户支持方式–您可以快速,轻松地识别他们使用的版本,以及使用寿命。

获取有用的变量

在你开始之前,首先思考一下注入什么样的变量在构建时是有意义的?它可以是从 CI 机器的主机名到 Web 服务调用的结果,或者更常见的是Git日志中的最后一个提交 ID。
我们在这里使用最后一次提交 ID。创建一个包含 README 的 git 项目:

你会在你的 Git 日志里看到两次提交。

以下是您最近一次提交的 ID:

接下来,我们可以将其捕获到环境变量中:

代码准备

使用这个 hello world 代码:

为了传递构建时变量,我们需要在我们的主包中创建这个变量。我们称它为var GitCommmit string。

用它来测试:

当前版本为空,但我们现在可以开始注入一个变量。

覆写 go build

现在,我们需要覆写go build命名,使用-ldflags标记来传入信息。

现在我们看到应用程序在构建时注入了一个硬编码的版本。

使用 Docker 操作

一旦你确定了你的构建时变量,你需要更新你的Dockerfile。
编写Dockerfile:

构建并测试:

这只是一个展示如何使用Docker和Go设置构建变量的小例子。你可以继续深入了解并且使用多步构建来优化镜像的大小。
这里提供一个我的用于构建基于树莓派,MacOS和64位Linux的Dockerfile:FaaS CLI Dockerfile

Docker 中的生成器模式与多步构建

这篇文章主要介绍Docker项目中可以使开发人员有效构建小规模镜像的两个PR。
什么是生成器模式?
像 Golang 这样的静态编译语言倾向于从 Golang“SDK” 镜像中获取 Dockerfile,添加源代码,然后将其推送到 Docker Hub。不幸的是,这样形成的镜像相当大–至少有 670 MB。
构建器模式(非正式的称呼)使用两个 Docker 镜像–一个执行构建,另一个用于运送第一次构建的结果。

Golang 不是唯一可以使用基本镜像来构建的语言。我的一些 Windows 容器同样采用这种模式来构成更小的镜像。
构建器模式的示例:
1.从整个运行时/ SDK(Dockerfile.build)的 Golang 基本镜像导出
2.添加源码
3.生成一个静态链接的二进制文件
4.将静态二进制文件从镜像复制到主机(docker create,docker cp)
5.衍生自SCRATCH或其他一些轻量级镜像,例如alpine
6.添加二进制文件
7.将小镜像推入 Docker Hub
这通常意味着有两个独立的 Dockerfile 和一个 shell 脚本来编排上述 7 个步骤。
示例
以下是我的href-counter存储库中的一个例子,它是一个Golang应用程序,用于计算网页上的内部/外部锚点标签。
我会提供创建小镜像所需要的文件,你可以清晰的明白其中的步骤。
Dockerfile.build

Dockerfile

build.sh

什么是多步构建

多步构建可以提供构建器模式的优点,而不需要维护三个独立的文件:

这对于开发人员和维护者来说是巨大的,特别是当您支持多种Dockerfiles的不同架构,如Raspberry Pi
一般的语法包括多次在Dockerfile添加FROM语句–最后一个FROM语句是最后的基本镜像。要从中间图像复制伪影和输出,请使用COPY –from= 。
第二个PR优化了这种语法,这意味着你可以做一些像这样的镜像:

这一期的『航海日志』就到这里,下期再浪~
参考链接
  • http://geek.csdn.net/news/detail/230919
  • https://blog.docker.com/2017/08/what-is-containerd-runtime/
  • https://blog.alexellis.io/inject-build-time-vars-golang/
  • https://blog.alexellis.io/mutli-stage-docker-builds/
作者介绍
杨雪颖 Misha:DaoCloud 技术顾问,能文能撸码の通用型选手,兼 Labs 吉祥物。
莫非 Beck:DaoCloud 微服务攻城狮,吃饱了就困的一流段子手。

Leave a Reply

Your email address will not be published. Required fields are marked *