写点什么

使用 Docker 高效搭建开发环境

  • 2019-11-25
  • 本文字数:2128 字

    阅读完需:约 7 分钟

使用Docker高效搭建开发环境

Docker 作为轻量级的基于容器的解决方案,它对系统侵入性低,容易移植,天生就适合做复杂业务部署和开发环境搭建,今天给大家带来的是我司开发是如何使用 Docker 高效搭建开发环境的。


作为一个平时喜欢折腾的开发人员,我喜欢尝试各种环境,使用感兴趣的各种开源软件。


同时,我也是有一些相对的小洁癖,很喜欢 Linux 中权限最小化原则,我也不喜欢自己的环境中有太多不知道的东西。


做了多年的 Web 开发,我接触到的环境大致如下:


1.操作系统从 CentOS 5 到 CentOS 7;


2.Web server 从 apache 到 Nginx;


3.开发语言从最初的 php5.2 到 php7,又到现在主要使用 Go,马上还会开始接触 C++;


4.数据库从 Mysql5.1 到现在的 5.7,前阵子又开始折腾 mariadb;


5。cache 选型从 memcache 到 redis;


队列用过 kafka,去年开始大量使用 NSQ;


公司虽然有专门负责部署、运维这些服务的同学,但我在开发的时候,还是喜欢自己来搭建这些东西,因为这样通常可以对使用到的服务有更多的认识,也能帮助自己使用的更好。


今天我就来和大家分享下我是如何高效的搭建好自己的开发环境的。

1 搭建前说明

这里先说明一点,对每个开源软件,我几乎都是自己编译部署的,而不会使用类似 yum install 这种方式,也很少直接下载官方编译好的二进制包,这都是为了能多深入了解用到的开源软件。


但一些依赖的动态库文件,如 zlib 等,还有编译工具,如 gcc、make 等,我都是通过方便的 yum install 这种方式直接安装的,否则会累死。

2 传统做法

我在很长的一段时间内,都是把每个软件的编译、安装过程写成一个脚本,之后再需要用的时候直接运行脚本即可,但这样的方式,通常会遇到下面这些问题:


1.脚本只能在我当时的操作系统环境下运行。记得当时购买过不同服务商的 vps,虽然不同 vps 我都使用同样的 Linux 发行版,但脚本通常都不能一键跑完。这也是没办法,因为每个 vps 服务商都会制作自己的操作系统镜像版本。


2.操作系统升级,如 CentOS5 - 6,或是换为 Ubuntu,这样基本上脚本都跑不了。


3.软件升级,如 Mysql5.2 - 5.6,构建工具改为 cmake,依赖库改变或升级。


4.如果某个软件依赖的公共库版本和其它软件不同,且公共库升级后和旧版不兼容,那你就只能为这个软件单独编译公共库了,如果只是普通的公共库还好,但如果是所需要的编译工具版本不同,那可就惨了。


上面这些问题,如果你想每个发行版维护一个脚本,那会累死,因为一旦你每次想升级一个软件,难道每个发行版都要编译一遍吗?这就变成了收获价值很低的体力劳动了。


由于喜欢折腾的个性,我对操作系统的升级以及软件包版本的升级又经常发生,所以一直以来,我都在寻找一个好方法,能很方便的维护好自己的开发环境,尽量做到只=新东西只为它工作一次,最后我找到了 docker,目前我都是用它来搭建自己的开发环境的。

3 Docker 做法

先概括介绍下我的方法:


1.让每个软件运行在容器中,因为运行的容器环境是可以固定下来的,所以编译安装脚本写一个就可以了。


2.代码使用数据卷的方式加载到需要的容器中。


3.因为是开发环境,所以网络方面使用最简单的–net=host。


4.将镜像的创建、容器的启动维护在 git 项目中,并抽象出统一的构建过程,很方面的做到新软件接入,新机器部署。


下面用实例来说明吧:


示例 Nginx 环境构建


我将构建过程放到 git 中:https://gitee.com/andals/docker-nginx


Readme 中记录了构建所需要执行的脚本命令,大家访问上面的网址就可以看到,这里我简单介绍下项目的结构:



DockerFile 说明


Dockerfile 结构如下:



整个构建框架为:


1.把构建需要的包(pkg 目录中)放到镜像中;


2.把构建脚本放到镜像中;


3.执行构建脚本;


4.容器启动时,执行 init.sh,里面启动相应的服务。


Readme.md 中记录了执行构建的命令和容器运行命令,示例运行如下:



说明:

  • –volumes-from=data-home 这个就是我放置代码的数据卷,我喜欢把代码放到 $HOME 下面;

  • /data/Nginx 中放置 Nginx 的 conf、log 等,每个软件运行时的 conf、log、data 等我都统一放置在/data 下面;

  • 启动容器时使用–net=host,作为开发环境简单实用;

  • 我就是通过这种方法完成了开发环境的构建,不再有多余的重复工作,并且新机器部署开发环境效率极高。

4 辅助工具 dockerbox

使用 docker 环境后,有个问题,就是没有办法很方便的和软件交互。


这是因为软件都执行在容器中,比如重启 Nginx 吧,需要下面这几步:


1.找到 Nginx 这个容器;


2.进入 Nginx 这个容器;


3.在容器里面再执行 reload.


也可以是:


1.找到 Nginx 这个容器;


2.使用 docker exec.


但无论哪种方式,都比原先直接执行命令麻烦的多。


另外,有时也需要进入容器中,查看服务的运行情况。


为了方便的做这些事情,我开发了一个工具 dockerbox,可以很方便的做到这些事情。


dockerbox 的详情及使用方法请见:https://github.com/ligang1109/dockerbox


5 配置开机运行

最后再说下如何配置开机启动。


我使用虚拟机搭建的开发环境,所以配置这个会省事好多,



dbox 请参考 dockerbox 的使用方法。

6 结束语

上面说的是我现在使用的开发环境搭建方法,有兴趣爱折腾的同学不妨试试看,如果你有更好的方法,也希望能分享给我。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/6L4laPwKxeie-kRFenBfMg


2019-11-25 16:004087

评论

发布
暂无评论
发现更多内容

golang context详解

en

golang Context

在线YAML转Properties工具

入门小站

工具

分享你的见解与经验|RocketMQ Summit 2022 议题征集中!

阿里巴巴云原生

阿里云 RocketMQ 云原生 活动

网络安全kali渗透学习 web渗透入门 使用WireShark对常用协议抓包

学神来啦

《Sysdig 2022云原生安全和使用报告》发现:超过75%的运行容器存在严重漏洞

York

容器 云原生 安全

netty系列之:channelPipeline详解

程序那些事

Java Netty 程序那些事 2月月更

架构训练营模块七作业

沈益飞

架构是训练营 架构师训练营 4 期

架构实战模块7

Anlumina

「架构实战营」

云效应用交付平台 AppStack,10分钟完成代码提交到上线

阿里云云效

阿里云 DevOps 运维 云原生 应用交付

吃到多样性红利的12种方法

永利app贵宾会网址

个人成长 思维模型 多样性

新版上线|能力中心打造全新视角

钉钉开发者

钉钉能力中心 钉钉开放平台能力中心 钉钉开放平台 能力中心

“热搜”中的分布式数据库

OceanBase 数据库

oceanbase 客户案例 四川农信

告警运维中心|构建高效精准的告警协同处理体系

阿里巴巴云原生

阿里云 云原生 监控 Arms 告警运维中心

第八周作业

lv

Rootkit Hunter恶意程序查杀

喀拉峻

网络安全

Web Components 系列(十)—— 实现 MyCard 的基本布局

编程三昧

前端 组件化 2月月更 webComponents

「架构实战营」模块七《如何设计异地多活架构》作业

DaiChen

作业 模块七 「架构实战营」

当元宇宙遇上梵高

脑极体

使用Rainbond部署Logikm,轻松管理Kafka集群

北京好雨科技有限公司

模块七

Only

架构师实战营 「架构实战营」

架构实战营 4 期第七模块作业

jialuooooo

架构实战营

Linux之at命令

入门小站

Linux

利用 Helm 在各类 Kubernetes 中安装 Rainbond

北京好雨科技有限公司

dubbogo 入围 2021 年“科创中国”榜单

apache/dubbo-go

微服务 云原生 dubbo dubbo-go

虎符交易所完成首次HOO回购 超40万HOO添加到虎符AMM流动池

区块链前沿News

Hoo虎符 Hoo 虎符交易所

架构实战营模块七作业

zhongwy

王者荣耀商城异地多活架构设计

tony

「架构实战营」

模块七 - 王者荣耀商城异地多活架构设计

圈圈gor

架构实战营 「架构实战营」

模块七作业

novoer

「架构实战营」

架构实战营4期-模块七作业

木几丶

「架构实战营」

王者荣耀商城异地多活架构设计

supermenG

架构师训练营 4 期

使用Docker高效搭建开发环境_文化 & 方法_OpsDev 李钢_InfoQ精选文章