一、 前言

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

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

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

题,将会利用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. URL及日期等特殊数据格式处理-JSON框架Jackson精解第2篇

    Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...

  2. Spring Boot实战之Redis缓存登录验证码

    1.工具类 1 import lombok.experimental.UtilityClass; 2 3 import java.awt.*; 4 import java.awt.image.Buff ...

  3. SpringBoot框架:快速入门搭建运行一个应用程序(一)

    一.环境配置 Java环境:1.8版本 开发工具:IntelliJ IDEA 二.简单应用 1.创建项目 选择创建的项目类型为Spring Initializr,Project SDK选择1.8版本的 ...

  4. Java基础一篇过(六)Java8--lambda表达式

    一.简介 lambda表达式是Java8的一个重要特性,也可以称为闭包,常用于配合Java8的Stream对集合元素进行操作,使得代码更简介紧凑. 二.代码解析 虽说lambda表达式是一个新的特性, ...

  5. http(Hyper Text Transfer Protocol)

    一.定义    http(Hyper Text Transfer Protocol):超文本传输协议二.作用    数据传输三.概念    HTTP消息:        1.客户端发向服务器的请求消息 ...

  6. PHP正则表达式核心技术完全详解 第2节

    作者:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,原创文章, B站技术分享 B站视频 : Bilibili.com 个 ...

  7. vsCode 搭建Java开发环境

    1.安装扩展 Java Extension Pack Spring Boot Extension Pack 2.配置Maven 打开设置 搜索maven 找到并打开  在 settings.json ...

  8. c#RSA的SHA1加密与AES加密、解密

    前言:公司项目对接了一个对数据保密性要求较高的java公司.api接口逻辑是这样的:他们提供 SHA1私钥 与 AES的秘钥.我们需要将 传递查询参数 通过SHA1 私钥加密再转换成 十六进制 字符串 ...

  9. C# Redis分布式锁 - 单节点

    为什么要用分布式锁? 先上一张截图,这是在浏览别人的博客时看到的. 在了解为什么要用分布式锁之前,我们应该知道到底什么是分布式锁. 锁按照不同的维度,有多种分类.比如 1.悲观锁,乐观锁; 2.公平锁 ...

  10. VS中OpenCV用imread读取不到图片

    转自:https://blog.csdn.net/u012423865/article/details/78116059 在VS中OpenCV用imread读取不到图片 今天在Visual Studi ...