资讯专栏INFORMATION COLUMN

使用Docker统一团队的开发环境

alin / 2291人阅读

摘要:开场白作为一个技术团队的,你是如何保证成员的开发环境达到公司的标准,或者是你定制的最低要求的如果你的回答是差不多就行了,有问题再说,那么,你已经在给自己挖坑了。好的,成员们开始构建你定制的开发环境了。

开场白

作为一个技术团队的Leader,你是如何保证成员的开发环境达到公司的标准,或者是你定制的最低要求的?
如果你的回答是:差不多就行了,有问题再说,那么,你已经在给自己挖坑了。

同事A的开发环境中用的是PHP 7.1,所以他在代码里写了这么一个函数:

function getName(?int $id): string {
    return "name";
}

好的,?int 的意思是你的参数必须是数字,但是可以填一个数字以外的特殊类型,那就是null。


同事B用的是PHP 7.0,那么抱歉,他得这么改:

function getName(int $id = null): string {
    return "name";
}

?int需要被改成int,因为那是7.1的Nullable语法


同事C用的是 PHP 5.6,好的,继续改吧:

function getName($id = null) {
    return "name";
}

所有的类型定义都得移除,沮丧吗?



好的,你作为Leader?怎么选择用哪个同事的代码作为最终输出?可想而知,选择哪个都不合适。

选择 7.1

同事C 在抱怨,要那么高的版本真的好吗?我没用过新特性,也不感兴趣。

选择 7.0

同事A 在抱怨了,新语法多简洁啊,一个 ?int 就搞定了。

选择 5.6

同事A/B 在抱怨,为什么不用强类型,写代码太没乐趣了。




为什么

问题出在Leader,给了成员太多的选择。会有什么后果?

优点 缺点
部分成员的利益受损
内部意见不统一,产生隔阂
可能出现被动学习新知识,生产力下降
维护多个不同时期的项目时,本地环境的版本切换十分不方便
你的领导能力受到质疑
在诱惑面前,人们往往会选择最有利于自己的方式。不要试图去挑战人性,作为Leader的你,必须比任何一个成员都先做出选择。
正题 Docker

我不想讲docker是什么,因为其他人的博客里已经写烂了。

你需要知道的是,你可以把开发环境扔进docker,然后让每个成员忘记自己电脑里的开发环境。至于用了什么版本的php、mysql、linux、nginx、nodeJs,已经固定在docker里了。
你再也不用担心你的成员会用其他版本的环境去写代码了,因为你已经制定了你的规矩。

优点 缺点
成员没得选,只能用同一个版本的环境 Leader需要写Docker配置
成员只需要知道docker怎么启动,零学习成本
技术方面的交流障碍减少
代码符合项目的基本需求,生产力提升
即使再多项目也没关系,因为每个项目都是docker启动,不需要考虑版本
Leader可以花更多精力在其它事情了
Dockerfile

也许你已经写完了所有的Dockerfile配置,并把这些文件放进了项目的根目录dockers/,同时为你的成员写好了一个构建脚本build.sh,接着加入版本控制(git,svn),最后推到git服务器等待成员拉取最新的开发环境。好的,成员们开始构建你定制的开发环境了。

# 构建镜像
sh build.sh

# 查看构建的镜像
docker images

# 根据镜像生成容器,仅供参考。本文不讲述docker具体用法
docker run -it -d php:7.1 /bin/bash
docker run -it -d nginx:1.14.0 /bin/bash
docker run -it -d mysql:5.7 /bin/bash

犀利的你可能把生成容器的操作写成一个脚本quick-start.sh,而且用的风声水起。笔者拍拍你的肩膀,同学,为什么不用docker-dompose呢?

Docker Compose

可以这么说吧,这个东西就像是同时启动了多个你想要启动的镜像,而且你还可以同时结束生成的容器。

# 同时启动
docker-compose up

# 同时结束
docker-compose down

是的,很任性,你只需要配置一下你需要启动哪些镜像,然后把配置放到根目录docker-dompose.yml中即可。
当然了,还有更多特性,比如 哪些容器之间需要互相关联,被关联的容器要用什么别名,需不需要等待关联容器启动完成之后再启动自己,等等。。。

补充

如果您的项目比较多,那么推荐您利用git的子模块(点击访问)去维护你的docker配置。这样您改配置只要改一个地方,所有项目里面都会同步过去的,极大的提高了您的效率和维护成本。

# 假设已经建好docker的git仓库   git@git_repository_a
# 那么在您的开发项目中,初始化只需这样做:
git submodule add git@git_repository_a

# 您会发现项目根目录多了一个文件 .gitmodules 以及多了一个docker仓库的文件夹
结语

可能不算是一篇技术文章,只是抛砖引玉,引导新的Leader怎么带领团队走向正规化的道路。若是真要写那么细,可能10篇都不够写了。有什么技术方面的问题可以在下方留言。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27339.html

相关文章

  • 五阿哥钢铁电商平台Docker容器云平台建设实践——你想知道都在这里!

    摘要:容器云架构方案。容器云架构方案基于容器技术,运维技术团队开发了五阿哥网站的容器云平台。多云对接私有云和公有云进行统一托管,包含网络区域配置,实例开通及的环境初始化配置等。技术选型及实践镜像标准众所周知,的镜像是分层的。 前言 五阿哥钢铁电商平台(www.wuage.com)是由钢铁行业第一的中国五矿与互联网第一的阿里巴巴联手打造,并充分运用双方股东优势资源,即:阿里巴巴在大数据、电商运...

    jeffrey_up 评论0 收藏0
  • 曾金龙:迅雷云Docker开发实践

    摘要:问能否谈一下迅雷云使用的过程其实最初的时候,迅雷团队对是怀有谨慎的态度的。三调度算法是迅雷云定制优化的。迅雷在使用这方面一直没有把数据层面交给迅雷云之外的系统。 非商业转载请注明作译者、出处,并保留本文的原始链接:http://www.ituring.com.cn/article/201256 曾金龙就职于迅雷网络,是国内覆盖面最广的迅雷P2P引擎核心研发成员。他毕业于中山大...

    iflove 评论0 收藏0
  • 阿里巴巴1682亿背后“企业级”高效持续交付

    摘要:摘要在北京云栖大会上,阿里巴巴高级技术专家陈鑫花名神秀,给大家带来了亿背后的企业级高效持续交付,引起强烈共鸣。 摘要: 在2017北京云栖大会上,阿里巴巴高级技术专家陈鑫(花名神秀),给大家带来了《1682亿背后的企业级高效持续交付》,引起强烈共鸣。神秀从技术负责人关心的研发流程混乱、质量无法保障、环境管理低效、资源浪费等方面,结合阿里巴巴的DevOps实践,深度解析了企业级持续交付如...

    Youngs 评论0 收藏0
  • 宜信开源|详解PaaS平台LAIN功能和架构

    摘要:是宜信公司大数据创新中心开发的开源平台。为宜信大数据创新中心各个团队提供了统一的测试和生产环境,简化了服务的部署与上线流程,也降低了运维人员对系统管理的复杂度。基于容器技术,面向多样化的技术栈,并且天然隔离系统和应用的依赖。 LAIN是宜信公司大数据创新中心开发的开源PaaS平台。在金融的场景下,LAIN 是为解放各个团队和业务线的生产力而设计的一个云平台。LAIN 为宜信大数据创新中...

    mist14 评论0 收藏0
  • 云计算与 Cloud Native | 数人云CEO王璞@KVM分享实录

    摘要:分享实录云计算技术源于互联网公司,现在云计算已经是下一代企业级的发展趋势。如何做云计算一直是云计算技术的领导者。互联网公司的快速发展,已经印证了云计算技术和云原生应用相比传统构架的巨大优势。 今天小数又给大家带来一篇干货满满的分享——来自KVM社区线上群分享的实录,分享嘉宾是数人云CEO王璞,题目是《云计算与 Cloud Native》。这是数人云在KVM社区群分享的第一弹,之后还有数...

    _Zhao 评论0 收藏0

发表评论

0条评论

alin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<