【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

使用 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:003497

评论

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

1.1 了解Spring框架 -《SSM深入解析与项目实战》

谙忆

微服务架构下的核心话题 (二):微服务架构的设计原则和核心话题

xcbeyond

架构 微服务 设计原则

【DevOps】Jenkins持续集成流水线(中)

Man

DevOps jenkins CI/CD JACOCO FINDBUG

第九周作业

Geek_a327d3

如何设计一个优秀的组件

Lee Chen

大前端

零基础建网站必备技能,看这一篇就够了

北柯

程序语言 网站搭建 编程网站

《SSM深入解析与项目实战》目录与说明

谙忆

【译】代码中如何写出更有意义的命名

Jackey

代码质量

设计模式之——单例模式你真的会吗?

诸葛小猿

设计模式 单例模式 Singleton 饿汉式 懒汉式

数据处理能力相差 2.4 倍?Flink 使用 RocksDB 和 Gemini 的性能对比实验

Apache Flink

flink

百度大脑人脸离线识别SDK升级盘点,Linux ARM版本上线

百度大脑

人工智能 人脸识别 百度大脑 sdk

当百度遇上新基建:开放是基本原则 做智能时代的赋能者

百度大脑

人工智能 百度 AI 新基建 百度大脑

为Z3 Air-赋能,十代酷睿引领游戏5GHz新时代!

最新动态

英特尔十代酷睿携手机械革命X3-S 纵享顺畅游戏之巅

最新动态

EasyDL的数据集、模型与代码的版本管理:灵活管理效率提升

百度大脑

人工智能 模型训练 百度大脑

原创 | 使用JPA实现DDD持久化- O:对象的世界(2/3)

编程道与术

Java hibernate DDD JDBC jpa

有它的加持,单机玩转百亿大数据不是梦!

易观大数据

计算之美(1/12)

我的偶像是木子

数据结构 算法

如果不懂编程,请看这里!!!

代码制造者

学习 编程 低代码 零代码

什么是深度强化学习?

华章IT

学习 智能体

设计模式中的单例模式并不完美

架构师修行之路

设计模式 单例模式 23种设计模式 高并发系统设计

详解GaussDB(for MySQL)服务:复制策略与可用性分析

华为云开发者联盟

数据 路径 可用性 华为云 GaussDB

直播平台在贝壳找房中的实践与运用

陈威威

架构 分层架构 直播 分层思维 多元场景应用

信创舆情一线--工信部开展网络安全技术应用试点示范工作

统小信uos

联盟链有自己的路要走

Leonbond

区块链 联盟链 公有链

影调:光影交响曲

北风

摄影 风光 影调 光影 人像

环信大学:模型的边界!

环信

如何将FastDFS存储数据平滑迁移至XSKY对象存储?

XSKY星辰天合

设计模式之假如需要一百万个对象

架构师修行之路

对于容器技术的看法

倾心煎蛋

Gitlab 部署配置

wong

gitlab

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