Docker下的disconf实战全文链接
《Docker搭建disconf环境,三部曲之一:极速搭建disconf》;
《Docker搭建disconf环境,三部曲之二:本地快速构建disconf镜像》;
《Docker搭建disconf环境,三部曲之三:细说搭建过程》;
《Docker下使用disconf:极速体验》;
《Docker下使用disconf:细说demo开发》;
细说搭建过程在前两章中,我们利用远程或本地的镜像,快速体验了本地启动disconf的过程,本章我们一起来分析和梳理整个定制和搭建过程,了解这些后,我们就能根据自己的需要来定制本地的disconf环境了。
以下两点请注意
本机环境已经安装了maven,并且把maven的bin目录配置到环境变量PATH下;
编译编译disconf源码时,要用到官方shell脚本,所以本次实践的操作系统建议用linux或mac,如果用windows,有三种方法:一个是把shell改成bat脚本,一个是用虚拟机的linux,还有一种是用在docker上搭建一个maven容器,把disconf源码放在这个容器下编译;
先分析再实战首先把disconf环境依赖的所有server都列出来:
redis<无需定制,用官方镜像>
zookeeper<无需定制,用官方镜像>
mysql<定制,创建库,表,导入初始化数据>
tomcat<定制,包含业务war包,路径配置>
nginx<定制,配置动静分离,包含静态web资源>
下一步,是理清各个server之间的依赖关系(例如tomcat上的业务要连接mysql数据库),依赖关系如下,搞清楚了这个就知道link参数怎么写了:
server的关系已经理清了,接下来就要开始定制mysql,tomcat,nginx这些镜像了,首先是准备材料,disconf是个开源的应用,我们可以在git上下载最新的源码,执行命令:
git clone git@github.com:knightliao/disconf.git下载完毕,打开文件夹,内容如下图:
接下来我们开始实战把,实战一共五个步骤,依次是: 定制mysql镜像 -> 定制tomcat镜像 -> 定制nginx镜像 -> 编写docker-compose脚本 -> docker-compose启动
定制mysql镜像mysql定制:目的是让容器在创建时自动执行sql脚本,创建库和表,并导入初始化数据,在docker上实现数据库脚本自动执行的方法可以参照《让docker中的mysql启动时自动执行sql》一文,这里简单说一下步骤:
打开disconf源码文件夹,在disconf/disconf-web/sql目录下找到以下四个文件:
0-init_table.sql
1-init_data.sql
201512/20151225.sql
20160701/20160701.sql
新建一个目录mysql,把上面提到的四个sql文件复制到这个目录下,再新建一个名为install_data.sh的脚本,内容如下:
#!/bin/bash mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF source $WORK_PATH/$FILE_0; source $WORK_PATH/$FILE_1; source $WORK_PATH/$FILE_2; source $WORK_PATH/$FILE_3;内容很简单,就是自动登录mysql,密码是docker启动的时候传入的环境变量,然后执行四个sql脚本文件
在mysql目录下新建Dockerfile文件,内容如下:
# Docker image of disconf mysql # VERSION 0.0.1 # Author: bolingcavalry #基础镜像使用daocloud.io/library/mysql:8 FROM daocloud.io/library/mysql:8 #作者 MAINTAINER BolingCavalry <zq2599@gmail.com> #定义工作目录 ENV WORK_PATH /usr/local/work #定义会被容器自动执行的目录 ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d #定义sql文件名 ENV FILE_0 0-init_table.sql ENV FILE_1 1-init_data.sql ENV FILE_2 20151225.sql ENV FILE_3 20160701.sql #定义shell文件名 ENV INSTALL_DATA_SHELL install_data.sh #创建文件夹 RUN mkdir -p $WORK_PATH #把数据库初始化数据的文件复制到工作目录下 COPY ./$FILE_0 $WORK_PATH/ COPY ./$FILE_1 $WORK_PATH/ COPY ./$FILE_2 $WORK_PATH/ COPY ./$FILE_3 $WORK_PATH/ #把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shell COPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/ #给执行文件增加可执行权限 RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL打开终端在mysql目录下执行以下命令,构建msql镜像:
docker build -t conf_mysql:0.0.1 .msql镜像构建成功
定制tomcat镜像构建tomcat镜像时最重要的就是war包的生成,步骤如下:
创建两个文件夹,分别设置到ONLINE_CONFIG_PATH和WAR_ROOT_PATH这两个环境变量中,环境变量的设置方式在不同的操作系统下各不相同,我用的是mac,配置方式是在~/.bash_profile文件中加入以下内容(写完记得执行source ~/.bash_profile使环境变量在当前命令行窗口生效):
ONLINE_CONFIG_PATH=http://www.likecs.com/Users/zq2599/temp/201705/03/005/online-resources WAR_ROOT_PATH=http://www.likecs.com/Users/zq2599/temp/201705/03/005/war export ONLINE_CONFIG_PATH export WAR_ROOT_PATH/Users/zq2599/temp/201705/03/005/online-resources和/Users/zq2599/temp/201705/03/005/war都是刚刚新建的文件夹;
打开disconf的源文件的子目录disconf-web/profile/rd,里面的文件如下图: