利用Docker搭建开发环境
一、 前言
随着平台的不断壮大,项目的研发对于开发人员而言,对于外部各类环境的依赖逐渐增加,特别是针对基础服务的依赖。这些现象导致开
发人员常常是为了简单从而直接使用公有的基础组件进行协同开发,在出现并行开发的情况特别是针对数据库的变动或数据的更改常常会
导致其他开发人员无辜增加问题的排查时间,导致整体的开发效率降低,同时对于远程协助也造成了巨大的障碍。为了解决上述存在的问
题,将会利用Docker Compose技术辅助开发人员对于开发环境的搭建,最终实现开发人员只要装有Docker就可以完成整个开发环境的搭
建。
二、 基本操作
为了标准化这一过程,需要开发人员新建docker-compose.yml在项目跟目录下,并按照其规范的格式进行填写,考虑到许多的系统均需
要依赖存在基本数据的数据库所以建议在跟目录下新建dbinit文件夹,将数据库初始化等相关的文件放入其中,后期对于存在依赖多数
据的情况将考虑在dbinit下新建二级目录以区别不同的数据库。
对于基本的使用方式这里以Sino.BackgroundJobService为例进行说明:
- 打开cmd并进入项目根目录
cd /D G:\SinoOschinaGit\tms\backjob
- 启动Docker Compose
docker-compose up #在前端执行
docker-compose up -d #在后台执行
注意:需要确保Docker for Windows是否开启。
- 停止Docker Compose
docker-compose stop
- 删除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搭建开发环境的更多相关文章
- [转]利用Docker构建开发环境
利用Docker构建开发环境 Posted by makewonder on 2014 年 4 月 2 日 最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境, ...
- 利用Docker构建开发环境
最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环 ...
- Docker 搭建开发环境
本文介绍如何将Docker集成到开发环境,自动构建应用,并使容器拥有独立的内网IP为开发人员提供服务. 术语解释 Docker镜像:一个不可修改的"模板",每个代码版本对应一个镜像 ...
- 使用 docker 搭建开发环境
作为一个 freelancer,经常能够接到很多的开发工作,这些金主,有喜欢 PHP 的,有习惯撒手不管的:有偏好 sqlite 的,也有喜欢 PG 的,我甚至见过 mysql.PG 一起使用的项目: ...
- 利用docker搭建测试环境--安装
软件测试过程中,总会碰到测试环境不够用的尴尬情况.即时有了机器还要经历装系统,配置环境,调试等一系列繁琐的问题.虽然市面上也有一些批处理话的工具(如salt,fabric等),但是还是需要实体机器作为 ...
- Docker搭建开发环境(Nginx+MySQL+PHP)
注意事项 1.像MySQL配置文件.Nginx配置文件.网站根目录这种比较经常操作的需要先使用 docker cp 将文件从容器里复制到主机目录,docker run的时候直接挂载目录就可以了 2.d ...
- 深入浅出Docker(五):基于Fig搭建开发环境
概述 在搭建开发环境时,我们都希望搭建过程能够简单,并且一劳永逸,其他的同事可以复用已经搭建好的开发环境以节省开发时间.而在搭建开发环境时,我们经常会被复杂的配置以及重复的下载安装所困扰.在Docke ...
- 利用Docker搭建本地https环境的完整步骤
利用Docker搭建本地https环境的完整步骤 这篇文章主要给大家介绍了关于如何利用Docker搭建本地https环境的完整步骤,文中通过示例代码将实现的步骤介绍的非常详细,对大家的学习或者工作具有 ...
- Mac下docker搭建lnmp环境 + redis + elasticsearch
之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...
随机推荐
- 不再用上官网,自己部署一套ElementUI官方最新文档
ElementUI官方的访问速度一直很慢,公司内网也无法进行外网访问.故研究了下最新的ElementUI API(2.13.2)部署教程. 先上效果图 ElementUI文档部署过程 到github下 ...
- yum管理——linux字符界面安装图形化及两种界面的切换(3)
1.查看yum软件包组 yum groups list 2.选择安装带 GUI 的服务器 yum groups install "带 GUI 的服务器" 3.字符界面切换为图形化界 ...
- 4.Kafka使用
- Mysql的Windows安装
1,安装包下载, 这里我们使用压缩包安装方式,先进入Oracle官网,搜搜MySQL8.0,下载完成后选择一个磁盘放置,我选择放在D盘 2.安装教程 (1)配置环境变量 (2)生成data文件 用 ...
- python中生成随机整数(random模块)
1.从一个序列中随机选取一个元素返回: random.choice(sep) 2.用于将一个列表中的元素打乱 random.shuffle(sep) 3.在sep列表中随机选取k个 ...
- Helm部署和体验jenkins
如何快速且简单的部署 通过helm可以快速且简单的部署多种应用,关于helm的安装和使用请参考 环境信息 本次实战的环境信息如下: kubernetes集群:三台CentOS7.7服务器 kubern ...
- 一道Postgresql递归树题
转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13698249.html 也是偶然的一次,群友出了一道题考考大家,当时正值疫情最最严重的三月(借口...),披 ...
- java.lang.illegalArgumentException异常
今天在使用spring3.2的时候,配置好注解开发后,运行出现异常 java.lang.illegalArgumentException 经查为 JRE 版本域spring3.2不兼容所致, 将项目J ...
- Go-简介
Go简介 Google开发,新的具有面向接口.函数式编程.并发编程特点的编译性强类型通用编程语言 Go核心 1. 接口 2. 并发编程 3. 函数 Go-接口 package main import ...
- mysql-3-orderby
#进阶3:排序查询 /* 语法: SELECT FROM WHERE ORDER BY ASC|DESC */ USE myemployees; #案例1:查询员工信息,按工资从高到低排 SELECT ...