一、 前言

随着平台的不断壮大,项目的研发对于开发人员而言,对于外部各类环境的依赖逐渐增加,特别是针对基础服务的依赖。这些现象导致开

发人员常常是为了简单从而直接使用公有的基础组件进行协同开发,在出现并行开发的情况特别是针对数据库的变动或数据的更改常常会

导致其他开发人员无辜增加问题的排查时间,导致整体的开发效率降低,同时对于远程协助也造成了巨大的障碍。为了解决上述存在的问

题,将会利用Docker Compose技术辅助开发人员对于开发环境的搭建,最终实现开发人员只要装有Docker就可以完成整个开发环境的搭

建。

二、 基本操作

为了标准化这一过程,需要开发人员新建docker-compose.yml在项目跟目录下,并按照其规范的格式进行填写,考虑到许多的系统均需

要依赖存在基本数据的数据库所以建议在跟目录下新建dbinit文件夹,将数据库初始化等相关的文件放入其中,后期对于存在依赖多数

据的情况将考虑在dbinit下新建二级目录以区别不同的数据库。

对于基本的使用方式这里以Sino.BackgroundJobService为例进行说明:

  1. 打开cmd并进入项目根目录
cd /D G:\SinoOschinaGit\tms\backjob
  1. 启动Docker Compose
docker-compose up  #在前端执行
docker-compose up -d #在后台执行

注意:需要确保Docker for Windows是否开启。

  1. 停止Docker Compose
docker-compose stop
  1. 删除Docker Compose
docker-compose rm

三、 MySql开发环境

我司大量业务系统均依赖MySql做为核心业务数据库,且业务系统均需要依赖基本的原始数据支持基本的运行,所以不能单纯的直接利

用MySql镜像而是需要进行数据库的初始化后使用,所以要求在dbinit文件夹下需要用户新建Dockerfile文件以及my.cnf文件对数据

库进行自定义,其中Dcokerfile的文件内容要求如下:

FROM mysql:5.5.54

ENV TZ "Asia/Shangehai"
ENV MYSQL_ROOT_PASSWORD=5802486 #root连接密码
ENV MYSQL_DATABASE=tmsystem #数据库名 ADD my.cnf /etc/mysql/conf.d/my.cnf ADD autoinit.sql /docker-entrypoint-initdb.d/ #需要执行的初始化SQL,注意实际运行会按照字母进行排序执行 EXPOSE 3306
CMD ["mysqld"]

如上其中有几处需要开发者根据其中的注释进行对应的调整。对应的my.cnf配置文件如下:

[mysqld]
lower_case_table_names=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
table_cache = 614
innodb_buffer_pool_size = 1G
innodb_thread_concurrency = 4
innodb_file_io_threads = 4
innodb_flush_log_at_trx_commit = 0
thread_concurrency = 4
open_files_limit=10240
max_connections=3000
max_connect_errors=60000
external-locking=FALSE
sort_buffer_size=2M
join_buffer_size=2M
transaction_isolation = READ-COMMITTED
tmp_table_size = 256M
key_buffer = 512M
max_allowed_packet = 100M
thread_stack = 192K
thread_cache_size = 300
query_cache_limit = 4M
query_cache_size = 64M
init_connect = 'SET NAMES utf8'
character_set_server = utf8

以上配置开发者可以根据MySql的具体要求自行调整。完成以上的基本配置后需要到docker-compose.yml中进行

编写,考虑到MySql并不是直接使用原始镜像而是需要进行独立的镜像构建,所以需要build指令,最终的结果如

下:

  mysqldb:
build: ./dbinit/
ports:
- 3306:3306

其中将3306端口直接暴露到宿主的3306端口上,需要开发者确认当前宿主的该端口是否被占用,如果被占用则需

要调整这里实际映射的端口。

四、 Redis开发环境

业务系统对于用户会话以及部分常用的数据存储已经逐渐采用Redis这种高速的键值对存储技术,考虑到实际并不

需要进行相关的数据初始化工作,这里直接使用image启动相关镜像即可:

  redis:
image: index.alauda.cn/library/redis:3.2.1
ports:
- 6379:6379
environment:
- REDIS_PASS:**None**

其中通过环境变量指定无需密码即可。

五、RabbitMQ开发环境

对于大型系统来说,为了降低系统的耦合度,越来越频繁的使用事件总线技术分离服务的客户端和服务端,所以

在我们实际的开发过程中即使不需要最终的服务方存在或者提供客户服务需要连接对应的基础组件保证平台的正

常运作,所以这里需要利用Docker启动相关的镜像服务,具体如下:

  eventbus:
image: index.alauda.cn/library/rabbitmq:3.4-management
ports:
- 5672:5672
- 15672:15672

这里不仅仅开放了实际服务的端口,也将其组件的Web UI开放出去,方便开发人员进行查看。基于以上几个服

务最终完整的docker-compose.yml如下所示:

version: '2'
services:
mysqldb:
build: ./dbinit/
ports:
- 3306:3306
redis:
image: index.alauda.cn/library/redis:3.2.1
ports:
- 6379:6379
environment:
- REDIS_PASS:**None**
eventbus:
image: index.alauda.cn/library/rabbitmq:3.4-management
ports:
- 5672:5672
- 15672:15672

当然随着系统不断发展底层的基础组件也在发生了改变,所以该文档将会逐渐进行完善,最终希望开发者可以

自行完善对于Docker相关技术的提升,从而能够提升实际生产中效率。

利用Docker搭建开发环境的更多相关文章

  1. [转]利用Docker构建开发环境

    利用Docker构建开发环境 Posted by  makewonder on 2014 年 4 月 2 日   最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境, ...

  2. 利用Docker构建开发环境

    最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环 ...

  3. Docker 搭建开发环境

    本文介绍如何将Docker集成到开发环境,自动构建应用,并使容器拥有独立的内网IP为开发人员提供服务. 术语解释 Docker镜像:一个不可修改的"模板",每个代码版本对应一个镜像 ...

  4. 使用 docker 搭建开发环境

    作为一个 freelancer,经常能够接到很多的开发工作,这些金主,有喜欢 PHP 的,有习惯撒手不管的:有偏好 sqlite 的,也有喜欢 PG 的,我甚至见过 mysql.PG 一起使用的项目: ...

  5. 利用docker搭建测试环境--安装

    软件测试过程中,总会碰到测试环境不够用的尴尬情况.即时有了机器还要经历装系统,配置环境,调试等一系列繁琐的问题.虽然市面上也有一些批处理话的工具(如salt,fabric等),但是还是需要实体机器作为 ...

  6. Docker搭建开发环境(Nginx+MySQL+PHP)

    注意事项 1.像MySQL配置文件.Nginx配置文件.网站根目录这种比较经常操作的需要先使用 docker cp 将文件从容器里复制到主机目录,docker run的时候直接挂载目录就可以了 2.d ...

  7. 深入浅出Docker(五):基于Fig搭建开发环境

    概述 在搭建开发环境时,我们都希望搭建过程能够简单,并且一劳永逸,其他的同事可以复用已经搭建好的开发环境以节省开发时间.而在搭建开发环境时,我们经常会被复杂的配置以及重复的下载安装所困扰.在Docke ...

  8. 利用Docker搭建本地https环境的完整步骤

    利用Docker搭建本地https环境的完整步骤 这篇文章主要给大家介绍了关于如何利用Docker搭建本地https环境的完整步骤,文中通过示例代码将实现的步骤介绍的非常详细,对大家的学习或者工作具有 ...

  9. Mac下docker搭建lnmp环境 + redis + elasticsearch

    之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...

随机推荐

  1. Java沙箱安全机制介绍【转载】

    沙箱安全机制的应用层面:360沙箱.win10沙箱.包括VMware Workstation.Oracle VM VirtualBox都可以充当沙箱去使用,沙箱中的操作与本机无关,进而保证本机的安全性 ...

  2. Typora基础使用

    Markdown学习 标题 三级标题 四级标题 字体 Hello,World! Hello,World! Hello,World! Hello,World! 引用 选择狂神说Java,走向人生巅峰 分 ...

  3. Java程序员必备基础:JDK 5-15都有哪些经典新特性

    前言 JDK 15发布啦~ 我们一起回顾JDK 5-15 的新特性吧,大家一起学习哈~ 本文已经收录到github ❝ https://github.com/whx123/JavaHome ❞ 「公众 ...

  4. v-if和v-show的区别与使用

    1.共同点: v-if 和 v-show 都能实现元素的显示隐藏. 2.不同点: v-if显示隐藏是将dom元素整个添加或删除,v-show元素隐藏时,会在dom节点中把该元素设置css属性为disp ...

  5. ERP与EHR系统的恩怨纠葛--开源软件诞生13

    ERP中需要EHR的存在吗--第13篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon ...

  6. 原子类的 ABA 问题

    原子引用 public class AtomicReferenceDemo { public static void main(String[] args) { User cuzz = new Use ...

  7. Linux:改变世界的一次代码提交

    摘要:如果选Linux社区历史上最伟大的一次 Git 代码提交,那一定是 Git 工具项目本身的第一次代码提交. 吾诗已成.无论大神的震怒,还是山崩地裂,都不能把它化为无形! -- 奥维德<变形 ...

  8. ASP.NET Core 基于声明的访问控制到底是什么鬼?

    从ASP.NET 4.x到ASP.NET Core,内置身份验证已从基于角色的访问控制(RBAC)转变为基于声明的访问控制(CBAC). 我们常用的HttpContext.User属性ASP.NET ...

  9. leetcode1558题解【贪心】

    leetcode1558.得到目标数组的最少函数调用次数 题目链接 算法 贪心 时间复杂度O(nlogN),N为数组中最大的那个数. 1.题意就是给定一个函数,该函数有两种功能,一种就是将数组中的所有 ...

  10. Egg.js学习

    egg.js是什么 是一个node.js的后台web框架,类似的还有express,koa 优势:规范.插件机制Egg.js约定了一套代码目录结构(配置config.路由router.扩展extend ...