剑客
关注科技互联网

Docker缩短新开发者熟悉项目时间的五个方面

【编者的话】本文介绍了如何使用Docker容器来减少新员工入职加入团队的准备启动时间的五个方法,包括Docker容器是唯一的依赖、容易知道如何构建环境、跨机器的便携性、一致性的开发环境以及轻量级的环境。

无论公司规模大小,加入新的开发者并且想要让其尽快达到能够干活的程度,仍然是一个显著的挑战。新开发者被雇佣和生产(作者所谓的生产可以看“注1”)的时间越长,需要耗费的时间就越长,尤其是一些经验丰富的开发者。

鉴于此,有效的入职工作流程有两个需要考虑关键的问题:

  • 如何将从新人坐下到熟悉项目的时间缩短到尽可能小?
  • 新员工如何尽快进入状态?

实际上,一个更好的问题是:无论开发人员是刚刚到公司还是刚刚接触一个项目,我们该如何让他们尽快熟悉项目并进行开发?

*注【1】:本文中,所谓生产可以理解为添加新功能,修复现有bug,或者能够调研安装开发过程需要用到的代码库。

有很多技术可以用来解决上述问题,包括shell脚本、 WAMP、MAMP和LAMP 堆栈技术
以及虚拟机,但是我发现最引人注目的是 Docker
。Docker是 DevOps
世界中众所周知的新生儿,它最新的一系列技术,旨在使项目能够从开发环境平滑地过滤到生产环境。

当然,Docker能够让你比较容易接触新技术,并且让你觉得它无所不能。 然而,Docker真的特别擅长减少新开发人员的新人时间(从入职到能干活)。今天,我将介绍Docker可以显着减少新员工熟悉项目时间的五个方面。

Docker是唯一的依赖

如果你已经做开发至少五年,你应该熟悉一系列用于构建开发环境的方法。

最初,有(L,W,M)AMP堆栈,可以让开发人员的机器包含各种开发库和依赖包。虽然对于一些项目是很有用的,但是这种方法往往会导致机器迅速变得凌乱。特别是在不同的项目需要不同版本的相同开发库(例如加密,字符串处理,数字处理或SSL)的时候。

开发机器也可能会被迅速填满大量安装包,以及一系列配置。 因此,几乎不可能在生产环境中或在任何其他地方重新构建相同的环境。相反,这又将导致不良的“为我所用”的效应。

有了Docker,这不就再是一个问题。 在 Docker Hub
上拥有一系列预配置的Docker容器,可以满足各种开发需求。比如说,如果你正在创建一个Ruby app,可以从Docker Hub上拉取一个Ruby容器。如果您要创建Go或Python app,可以拉取Go或Python容器。更进一步,如果你正在创建一个基于框架的应用程序,例如 Zend Expressive for PHP
,你可以从Docker Hub上拉取相应的容器配置。

如果应用程序的需求更多,你可以先确定相关的需求,然后构建一个自定义的容器配置,组装必要的容器来满足这些需求。如果你构建了自定义容器,而Docker Hub上还没有这种容器,你可以考虑把容器上传,以便其他人也可以使用它。

无论你的需求是什么,使用Docker后,开发机器不再需要安装各种不同类型的开发库,软件包或配置。这样,开发机将变得更加轻量、更加干净,而不是因为一堆的依赖变得臃肿。开发人员也不会再逃避责任,总以为机器“为我所用”。

Docker很容易让你知道如何构建环境

让我们看看Docker如何简化配置需求。长期以来,虚拟机是配置开发环境的最佳工具。通过使用基于 VirtualBox
Parallels
VMWare
等工具创建的虚拟机,开发环境可以构建成与测试,暂存,生产或任何其他环境完全相同。在这些环境中,你可以模拟代码被托管的方式。

然而,虚拟机与在裸机硬件上运行的机器没有什么不同。所有的软件,库,扩展和依赖仍然需要安装和配置。因此,构建它们的时间仍然不是小任务,并且为不同的项目复制它们也不简单。因此,你需要使用 Vagrant
Puppet
Chef
Salt
Ansible
等工具来解决这个问题。这些工具可以创建可复制和可版本化的配置脚本,通过这些脚本可以在任何环境上构建相同的虚拟机。

但是,不管选择哪种配置工具,都需要花费很多时间来学习。有些工具甚至需要花费更长的时间来学习,即使是最简单的一款工具(Ansible),想要创建配置,用以构建一个具备缓存、日志、邮件和数据库等功能的PHP应用程序还是要花费不少的时间。最近我就创建了一个这样的项目,配置开发,测试和生产环境包括了15个目录和34个文件。

然后就是资源利用率的问题。假设你需要在生产环境的不同机器上部署Web、数据库、队列和缓存服务器,你至少在开发环境中准备四个虚拟机进行开发,然后将他们组装在一起形成完整的服务,而每一台每个虚拟机都需要分配内存、CPU和驱动器空间。

通过Docker,这些事情会变得容易,你不需要花太多时间设置所有环境。使用 Docker Compose
,根据你应用程序的需求,配置可能如下:

version: '2'



services:

nginx:

    image: nginx

    ports:

        - 8080:80

    volumes:

        - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf

    volumes_from:

        - php



php:

    build: ./docker/php/

    expose:

        - 9000

    volumes:

        - .:/var/www/html

这里我们为PHP应用程序构建了一个环境,有两个容器,一个运行NGINX,一个通过FPM运行PHP。这与Ansible或Puppet配置形成鲜明对比。使用Ansible或Puppet,你必须指定所有必需的依赖包。而使用Docker,你只需要一个容器之间能共享的基础镜像,然后添加你需要的东西。

由于我们只需要两个组件来运行应用程序,我们就只需要关心这两个组件。 因此,使用Docker有以下几个好处:

  • 我们不必关心所有相关的二进制文件。
  • 配置非常简单明了。
  • 学习时间大大减少。

如果有人从来没有接触过Docker,没关系,我建议他们可以花20到30分钟学习下Docker,充分了解Docker的原理以及配置方式,例如文件在容器中所处的位置等等。不需要进行冗长的培训课程,他们也不必成为DevOps大师,如果需要的话,他们自己就可以进行配置更改。

通过将一组现有容器连接在一起并提供所需的额外配置,可以非常快速地创建容器配置。因此,DevOps可以非常快地创建开发环境配置,而不是花费过多的时间在其他技术上。

跨机器可移植性

在许多方面,Docker可以根本上解决可移植性问题,即使在Windows和Mac上也是如此。

Docker现在使用的只有Linux技术,它基于Linux容器( LXC
)、 cgroups
内核命名空间
,默认情况下,Mac和Windows无法运行Docker。2014年,微软宣布初步支持改进Windows Server,以便可以支持Docker。然而,我不知道在写这篇文章的时候,这种改进是否已经完成或者苹果是否有类似的这种支持。

尽管如此,Docker仍然可以在两个平台上运行,分别通过 Docker for Windows
Docker for Mac
。这些包提供了一个Linux基础库,可以在其上运行Docker。基于这些改变和软件包,无论开发人员使用哪种平台,他们都可以利用Docker配置文件和相关工具快速搭建工作所需的所有环境。

考虑到配置文件是一个或一系列的文本文件,通过文本编辑器就可以进行维护,而文本编辑器在所有主流操作系统中都存在,这使得配置文件易于在版本控制下进行存储。

我知道,可能有些IT企业的政策是限制使用某些操作系统。然而,这通常是一个不好的选择。由于Docker适用于所有主要平台,因此没有理由限制开发人员选择想用的操作系统。

跨开发环境一致性

这是我真正喜欢的一个好处,也是我在使用虚拟机时不曾体会到的。当你使用Docker容器时,可以跨机器移动它。只要目的端机器可以运行Docker,就没什么问题。你可以将应用程序及其依赖项整合在一个容器中,并将其从一个机器移动到另一个机器。

无论Docker运行在什么主机上,它可以确保不出现任何兼容性问题。这是我前段时间在构建装有Docker的虚拟机时,想要做到但是没有成功做到的事情。

轻量级环境

这是一个有趣的,但或许又稍有争议的问题。Docker每个容器只运行一个进程,因此,容器的资源需求通常不大。因为资源需求相当小,使用Docker的其他应用都可以变得比较轻量和灵活。

举个例子,使用Mac OS X作为主机操作系统进行开发,并使用Docker for Mac来提供Mac和Docker之间的过渡层。当Docker for Mac启动时,就已经完成了最长的启动时间。

当你引导容器配置时,通常发生在几秒钟,而不是像虚拟机需要几分钟(或更长)。无论是创建一个还是多个容器,或者启动现有的容器,都可以在秒级完成。这和使用VirtualBox和Ansible创建或启动一个虚拟机所耗费的配置时间或启动时间进行比较,Docker启动和运行的要更快。

让我们拿 BusyBox
做对比,BusyBox是一个微小的Linux发行版,只有5mb大,可以用它来构建虚拟机。一般使用BusyBox都是因为它比较轻量和灵活,但考虑到虚拟机和Docker的工作方式,Docker仍然会更快地开始运行。

我确实做了一些广泛的概括,但我并不是要说VirtualBox、Vagrant、Ansible或任何其他虚拟机工具不好。我已经使用这些工具很久了,并且我会继续使用。

总结

虽然Docker仍然是一个新事物,但它不是一项新技术,它很早就被使用来构建,管理和部署应用程序。此外,它具有许多优点,使其成为构建开发环境的首选工具,可以大幅缩短新加入公司、部门或项目等开发人员熟悉项目的时间。

如果你还没有使用过Docker,我强烈推荐你去试一试。如果你想进行尝试,你可以从 Codeship
网站的"request a 14-day trial"着手,它将教会你如何减少开发成本以及快速构建应用程序。快去试一试Docker,看看它如何能够帮助你做得更好。

原文链接: Five Ways Docker Can Reduce Startup Time for New Hires
(翻译:肖远昊)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址