disconf mysql_Docker搭建disconf环境,三部曲之三:细说搭建过程
Docker下的disconf实战全文链接
细说搭建过程
在前两章中,我们利用远程或本地的镜像,快速体验了本地启动disconf的过程,本章我们一起来分析和梳理整个定制和搭建过程,了解这些后,我们就能根据自己的需要来定制本地的disconf环境了。
以下两点请注意
本机环境已经安装了maven,并且把maven的bin目录配置到环境变量PATH下;
编译编译disconf源码时,要用到官方shell脚本,所以本次实践的操作系统建议用linux或mac,如果用windows,有三种方法:一个是把shell改成bat脚本,一个是用虚拟机的linux,还有一种是用在docker上搭建一个maven容器,把disconf源码放在这个容器下编译;
先分析再实战
首先把disconf环境依赖的所有server都列出来:
redis
zookeeper
mysql
tomcat
nginx
下一步,是理清各个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 <
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
#定义工作目录
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=/Users/zq2599/temp/201705/03/005/online-resources
WAR_ROOT_PATH=/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,里面的文件如下图:
把这些文件全部复制到ONLINE_CONFIG_PATH变量对应的目录下,在这个目录下依次修改jdbc-mysql.properties,redis-config.properties,zoo.properties这三个文件:
jdbc-mysql.properties的改动如下图,主要是数据url改成一个固定的名字mysqlhost,这个在docker run的时候要和link参数中的别名一致,还有就是数据库的用户名密码:
redis-config.properties的改动如下图,主要是host参数,也要和docker run时候的link参数的别名对齐,注意,这里要配置两个redis
zoo.properties的配置如下图,主要是host参数,也要和docker run时候的link参数的别名对齐:
把application-demo.properties文件改名为application.properties
好了,修改参数的事情就算做完了,有了这些和link参数一致的host配置,tomcat在运行的时候就能连接上对应的容器了。
现在我们用maven来编译和打包disconf的源码,用终端进入disconf源码的disconf-web子目录,执行以下命令开始编译和打包:
sh deploy/deploy.sh
执行完毕后,在环境变量WAR_ROOT_PATH对应的目录下,可以看到编译和打包的结果,如下图:
新建一个名叫tomcat的文件夹,把上图中的disconf-web.war复制到这个文件夹下,再在这里新增一个server.xml文件,内容如下,用来指定tomcat服务的根路径对应的应用:
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
connectionTimeout="20000"
redirectPort="8443" />
resourceName="UserDatabase"/>
unpackWARs="true" autoDeploy="true">
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
这个配置信息和官方tomcat中的server.xml文件相比,其实只增加了下面这一个节点的内容:
在tomcat文件夹下新增Dockerfile文件,内容如下:
# Docker image of disconf tomcat
# VERSION 0.0.1
# Author: bolingcavalry
#基础镜像使用tomcat:7.0.77-jre8
FROM tomcat:7.0.77-jre8
#作者
MAINTAINER BolingCavalry
#定义工作目录
ENV TOMCAT_BASE /usr/local/tomcat
#复制配置文件
COPY ./server.xml $TOMCAT_BASE/conf/
#复制war包
COPY ./disconf-web.war $TOMCAT_BASE/webapps/
#给配置文件增加读权限
RUN chmod a+xr $TOMCAT_BASE/conf/server.xml
#删除默认的ROOT文件件
RUN rm -rf $TOMCAT_BASE/webapps/ROOT
看的出Dockerfile做的事情并不多,就是复制war包,复制server.xml,删除默认的ROOT应用文件夹这些事情;
现在打开终端在tomcat目录下执行以下命令,构建tomcat镜像:
docker build -t conf_tomcat:0.0.1 .
tomcat镜像构建成功!
构建nginx镜像###
新建一个nginx目录,在里面新增一个nginx.conf文件,内容如下:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#include /etc/nginx/conf.d/*.conf;
upstream disconf {
server tomcathost:8080;
}
server {
listen 80;
server_name localhost;
access_log logs/disconf_access.log;
error_log logs/disconf_error.log;
location / {
root /usr/local/work/html;
if ($query_string) {
expires max;
}
}
location ~ ^/(api|export) {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://disconf;
}
}
}
主要的配置有三点:
将默认的/etc/nginx/conf.d/*.conf配置注释掉;
增加tomcat的host信息,“tomcathost”和后面docker run的link参数的别名保持一致;
动静分离的配置,请求url中如果带有api和export,nginx就把请求转发到tomcathost:8080,其他的请求直接访问nginx服务器的/usr/local/work/html文件夹;
在环境变量WAR_ROOT_PATH对应的目录下,有个html文件夹如下图红框位置,这是web工程全部静态文件,把这个文件夹复制到刚才新建的nginx目录下:
在nginx文件夹下新增Dockerfile文件,内容如下:
# Docker image of disconf nginx
# VERSION 0.0.1
# Author: bolingcavalry
#基础镜像使用nginx:stable
FROM nginx:stable
#作者
MAINTAINER BolingCavalry
#定义工作目录
ENV WORK_PATH /usr/local/work/html
#定义nginx配置文件所在目录
ENV NGINX_CONF_DIR /etc/nginx
#定义nginx配置文件名称
ENV NGINX_CONF_FILE_NAME nginx.conf
#创建工作文件夹
RUN mkdir -p $WORK_PATH
#创建nginx日志文件夹
RUN mkdir -p /etc/nginx/logs/
#复制nginx配置文件
COPY ./$NGINX_CONF_FILE_NAME $NGINX_CONF_DIR/
#复制网页的静态资源文件
COPY ./html $WORK_PATH/
#给配置文件增加读权限
RUN chmod a+xr $NGINX_CONF_DIR/$NGINX_CONF_FILE_NAME
现在打开终端在nginx目录下执行以下命令,构建nginx镜像:
docker build -t conf_nginx:0.0.1 .
nginx镜像构建成功!
编写docker-compose脚本###
新增一个docker-compose.yml文件(位置无所谓),内容如下:
version: '2'
services:
disconf_redis_1:
image: daocloud.io/library/redis
restart: always
disconf_redis_2:
image: daocloud.io/library/redis
restart: always
disconf_zookeeper:
image: zookeeper:3.3.6
restart: always
disconf_mysql:
image: conf_mysql:0.0.1
environment:
MYSQL_ROOT_PASSWORD: 123456
restart: always
disconf_tomcat:
image: conf_tomcat:0.0.1
links:
- disconf_redis_1:redishost001
- disconf_redis_2:redishost002
- disconf_zookeeper:zkhost
- disconf_mysql:mysqlhost
restart: always
disconf_nginx:
image: conf_nginx:0.0.1
links:
- disconf_tomcat:tomcathost
ports:
- "80:80"
restart: always
按照我们最初梳理的依赖关系,启动两个redis官方镜像,一个zookeeper官方镜像,再启动定制的msyql镜像,然后tomcat启动并通过link关联redis,zookeeper,mysql等容器,最后是定制的nginx启动,link关联tomcat,并且nginx容器的80端口映射到当前电脑的80端口;
启动所有容器###
在docker-compose.yml文件所在的目录下,执行命令:
docker-compose up -d
终端会显示正在启动各个容器,如下图,每个容器的名称会被docker-compose加上前缀和后缀:
tomcat的应用启动需要一点时间,我们可以通过docker logs -f disconf_disconf_tomcat_1命令来查看tomcat启动日志,disconf_disconf_tomcat_1是容器名称,如上图中的红框所示。
启动完毕后,在浏览器上输入localhost,可以看见熟悉的disconf登录页面,用户名admin,密码admin,登录进去试试吧:
至此,disconf环境搭建三部曲已经结束,从体验到亲手一步一步配置都经历了,我们可以按照自己的要求为自己定制一个disconf环境了。
后面的文章中,我们一起来实战一下disconf系统的使用吧,体验一下动态配置给业务带来的便利。
欢迎关注我的公众号
disconf mysql_Docker搭建disconf环境,三部曲之三:细说搭建过程相关推荐
- disconf mysql_docker 部署disconf 以及将其做成镜像
1.需要一台服务器(阿里云,腾讯云.实体服务器都行,本次是以实体服务器为依照做的) 3.开始配置disconf 第一步:环境准备 要使用disconf,肯定是开发环境需求,因此需要 mysql 和 r ...
- linux如何搭建lamp环境,Linux操作系统下搭建LAMP环境
准备:先在目录home/csy/下建website代码目录,然后新建php文件,命名为test.php. 在test.php编写代码如下: php phpinfo(); ?> 保存并退出. 一. ...
- 在linux下搭建git环境,在linux下搭建git github开发环境
在linux下搭建git github开发环境 github git linux 1.安装git sudo apt-getinstall git 2.Generating SSH keys 2.1.g ...
- 搭建Docker环境---私有仓库registry搭建
环境 服务端机器 (主机名为192.168.1.2):docker私有仓库服务器,运行registry容器 1 下载镜像registry # docker pull registry 2 查看镜下是否 ...
- mysql linuxl环境搭建_Linux环境下的MySQL搭建
今天重装了一个新的Linux发行版本--deeping,本想着解决一下前面的Ubuntu以外卡死的情况,发现还是卡死,后来把显卡驱动改成开源, 删除了谷歌浏览器,果然deeping稳定了:就不知道今后 ...
- mac怎么搭建php环境,Mac下快速搭建PHP开发环境
GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断 多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个 ...
- 001.搭建开发环境
搭建开发环境 课程内容:搭建AS3开发环境,写第一个AS3程序 课程目的:先入为主 知识点: 1. 开发环境配置 2. 使用FlashDevelop创建AS3工程 3. 在FlashDevelo ...
- 腾讯云服务器如何手动搭建LAMP环境?
LAMP 环境是指 Linux 系统下,由 Apache + MariaDB + PHP 及其它相关辅助组件组成的网站服务器架构.本文本文档介绍如何在腾讯云云服务器(CVM)上手动搭建 LAMP 环境 ...
- 纯小白通过服务器搭建yolov5环境训练coco数据集
后知后觉的我,终于明白了之前师哥说的简简单单的几句话. 由于用的公司电脑,没有GPU,没有办法搭建yolo环境,故没法训练模型. 借助服务器,获取所需的GPU.通过vs code连接服务器,剩余操作其 ...
- 【VSCode】Windows 下搭建 Fortran 环境
文章目录 Part.I 预备知识 Part.II 安装与配置 Chap.I 编译环境 Chap.II 插件 Part.III 测试 Chap.I 一个示例 Chap.II 注意事项 Part.I 预备 ...
最新文章
- 深度研究自然梯度优化,从入门到放弃 | Deep Reading
- IOS-获取Model(设备型号)、Version(设备版本号)、app(程序版本号)等
- python 函数参数类型检查
- Java LinkedList特有方法程序小解 使用LinkedList 模拟一个堆栈或者队列数据结构。...
- Laravel框架性能优化
- jmeter 添加虚拟IP
- 479 Largest Palindrome Product 最大回文数乘积
- mysql order by 语句_Mysql优化order by语句的方法详解
- CI框架 where 跟 OR 怎么连用
- CISP可以自己报名考试吗?
- 一个老菜鸟的学习 ASP.NET MVC 3.0与EF 4.1的痛苦经历与项目源代码分享。
- Runtime在项目中的使用场景
- hash(哈希)是什么
- redis报错NOAUTH Authentication required.
- 老人与海好词100英文带翻译_英语好词好句摘抄 老人与海 英文版 好词好句摘抄...
- 1.初识C语言----什么是C语言,为什么要学C语言?
- API代理连接提取格式
- zz一篇很赞同的文章:2008年以后房价会降?想都不要想
- 关键词挖掘,已经挖掘出来的关键词应该怎么样选取
- python爬虫抓取房产_Python爬虫实战(3):安居客房产经纪人信息采集
热门文章
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
- 通过Jexus 部署 dotnetcore版本MusicStore 示例程序
- 第二篇 Entity Framework Plus 之 Query Future
- rest_framework03:查询所有/新增数据/删除一个数据/封装Response/序列化与反序列化
- Redis常用配置参数详解及查看修改命令
- Java之通过Collections.synchronizedMap创建线程安全的HashMap
- 剑指offer之两个队列实现栈的问题
- windows之如何知道C盘目录下的大文件路径
- C和指针之字符串编程练习11(统计一串字符包含the的个数)
- oracle 导库时日志满了,oracle rac 11g 日志占满系统盘导致数据库down掉