一、 前言

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

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

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

题,将会利用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. Tomcat vs Jetty vs Undertow性能对比

    Tomcat,Jetty和Undertow是目前比较主流的3款Servlet容器,而且Spring Boot框架还提供了对它们的集成支持(默认使用的是Tomcat),网络上有许多文章都在介绍Under ...

  2. JVM初认识

    运行时数据区域 程序计数器:程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节 ...

  3. 分布式系统监视zabbix讲解九之使用snmp监控windows

    zabbix监控windows演示 第一步:开启服务. 控制面板>程序>程序和功能>打开或关闭windows功能,勾选上简单网络管理协议(SNMP),以及下面的子程序.点击确定 第二 ...

  4. hystrix源码之请求合并

    请求合并 使用HystrixObservableCollapser可以将参数不同,但执行过程相同的调用合并执行.当调用observe.toObservable方法时,会向RequestCollapse ...

  5. ES6 常用总结——第二章(字符串的扩展)

    ES6为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历. for (let codePoint of 'foo') { console.log(codePoint)} // &quo ...

  6. JVM 的参数类型

    标配参数 -version -help X 参数 -Xint:解释执行 -Xcomp:第一次使用就编译成本地代码 -Xmixed:混合模式 XX 参数 Boolean 类型:-XX:+ 或者 - 某个 ...

  7. 和低效 IO 说再见,回头补一波 Java 7 的 NIO.2 特性

    其实在这之前已经写过一篇关于 Java 7 的新特性文章了,那篇文章主要介绍了 Java 7 的资源自动关闭.Switch String 实现原理.异常捕获 try-catch.新的二进制书写方式等, ...

  8. safari 浏览器版本升级后提示“此网页出现问题,已重新载入网页” 解决办法

    safari回退条件 版本回退的前提是关闭电脑的SIP机制,命令行 csrutil status 检测状态.Mac os 10.14以下版本回退Safari后插件还是可以用的,升了新系统退了也没法用了 ...

  9. Spring AOP系列(五)—反射

    前言 前面我们进行了代理模式.静态代理.动态代理的学习.而动态代理就是利用Java的反射技术(Java Reflection),在运行时创建一个实现某些给定接口的新类(也称"动态代理类&qu ...

  10. Machine Learning-特征工程之特征选择

    特征工程之特征选择 目录 简介 1 Filter(过滤式选择) 1.1 移除低方差特征(variance threshold) 1.2 信息增益(information gain) 1.3 单变量特征 ...