文档章节

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

 天使爱美
发布于 2016/11/04 16:22
字数 3047
阅读 51
收藏 2

本文介绍了如何使用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,看看它如何能够帮助你做得更好。

 

 

文章来源:DockOne

© 著作权归作者所有

粉丝 1
博文 36
码字总数 59694
作品 0
朝阳
私信 提问
Docker缩短新开发者熟悉项目时间的五个方面

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

有容云
2016/11/18
21
0
Docker孵化的5个开源项目

回顾过去短短的5年时间,容器生态系统和整个社区的创新速度值得关注。这种超速发展很大程度上因为有开源社区的深度参与。这种参与度有助于促进持续创新。 当Docker在2013年发布时,社区立马变...

Docker
2018/08/22
0
0
管理员后台和会员后台及支付接口系统开发

【项目属性】 二、交付计划 项目周期 :60天 技能要求 : 基于PHP开发或者java开发等,且有过类似的开发经验,熟悉会员系统开发业务。 倾向的接包方 : 有能力的开发者 需要接包方提供发票 : 不...

rewrty
2017/05/12
62
1
企业应该投资谁?DevOps工程师还是全栈开发者?

  【IT168 评论】企业如何决定投资DevOps工程师还是全栈开发人员? 如今,这两者之间的差异远比程序员认为的要小。对于一些企业来说,投资DevOps工程师还是全栈开发人员是一个不小的决定。事...

it168网站
2017/08/01
0
0
容器Docker学习系列三~每天几个小命令

今天要学习的命令包含剩下的五个rmi,tag,build,history,save,import 今天继续学习我们的Docker命令,在简单的了解命令后我们会开始实战操作执行Docker容器,应用起来我们的命令。今天继续学习...

技术小能手
2018/08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

x002-语言元素

变量命令规则 硬性规则: 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。 大小写敏感(大写的a和小写的A是两个不同的变量)。 不要跟关键字(有特殊...

伟大源于勇敢的开始
今天
4
0
nginx反向代理配置

nginx配置文件位置/usr/local/nginx/conf/nginx.conf 配置文件修改: # cd /usr/local/nginx/conf # vim nginx.conf server {listen 80;server_name localhost;#charset k......

行者终成事
今天
5
0
OSChina 周日乱弹 —— 这是假的,和我之前的不一样

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《男孩》-梁博 / 陶孟童 / 肖和东 / 高誉容 《男孩》-梁博 / 陶孟童 / 肖和东 / 高誉容 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
8
0
Rust学习笔记一 数据类型

写在前面 我也不是什么特别厉害的大牛,学历也很低,只是对一些新语言比较感兴趣,接触过的语言不算多也不算少,大部分也都浅尝辄止,所以理解上可能会有一些偏差。 自学了Java、Kotlin、Python、...

MusiCodeXY
今天
5
0
Java 脚本引擎入门

Java Script Engine Java 脚本引擎可以将脚本嵌入Java代码中,可以自定义和扩展Java应用程序,自JDK1.6被引入,基于Rhino引擎,JDK1.8后使用Nashorn引擎,支持ECMAScript 5,但后期还可能会换...

阿提说说
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部