推荐广州微信网站建设,优化建站,呼伦贝尔做网站,深圳网站建设好不好Docker下的disconf实战全文链接细说搭建过程在前两章中#xff0c;我们利用远程或本地的镜像#xff0c;快速体验了本地启动disconf的过程#xff0c;本章我们一起来分析和梳理整个定制和搭建过程#xff0c;了解这些后#xff0c;我们就能根据自己的需要来定制本地的disc…Docker下的disconf实战全文链接细说搭建过程在前两章中我们利用远程或本地的镜像快速体验了本地启动disconf的过程本章我们一起来分析和梳理整个定制和搭建过程了解这些后我们就能根据自己的需要来定制本地的disconf环境了。以下两点请注意本机环境已经安装了maven并且把maven的bin目录配置到环境变量PATH下编译编译disconf源码时要用到官方shell脚本所以本次实践的操作系统建议用linux或mac如果用windows有三种方法一个是把shell改成bat脚本一个是用虚拟机的linux还有一种是用在docker上搭建一个maven容器把disconf源码放在这个容器下编译先分析再实战首先把disconf环境依赖的所有server都列出来rediszookeepermysqltomcatnginx下一步是理清各个server之间的依赖关系(例如tomcat上的业务要连接mysql数据库)依赖关系如下搞清楚了这个就知道link参数怎么写了server的关系已经理清了接下来就要开始定制mysqltomcatnginx这些镜像了首先是准备材料disconf是个开源的应用我们可以在git上下载最新的源码执行命令git clone gitgithub.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.sql1-init_data.sql201512/20151225.sql20160701/20160701.sql新建一个目录mysql把上面提到的四个sql文件复制到这个目录下再新建一个名为install_data.sh的脚本内容如下#!/bin/bashmysql -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:8FROM 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.sqlENV FILE_1 1-init_data.sqlENV FILE_2 20151225.sqlENV 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/目录下容器会自动执行这个shellCOPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/#给执行文件增加可执行权限RUN chmod ax $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-resourcesWAR_ROOT_PATH/Users/zq2599/temp/201705/03/005/warexport ONLINE_CONFIG_PATHexport 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.propertiesredis-config.propertieszoo.properties这三个文件jdbc-mysql.properties的改动如下图主要是数据url改成一个固定的名字mysqlhost这个在docker run的时候要和link参数中的别名一致还有就是数据库的用户名密码redis-config.properties的改动如下图主要是host参数也要和docker run时候的link参数的别名对齐注意这里要配置两个rediszoo.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服务的根路径对应的应用typeorg.apache.catalina.UserDatabasedescriptionUser database that can be updated and savedfactoryorg.apache.catalina.users.MemoryUserDatabaseFactorypathnameconf/tomcat-users.xml /connectionTimeout20000redirectPort8443 /resourceNameUserDatabase/unpackWARstrue autoDeploytrueprefixlocalhost_access_log. suffix.txtpattern%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-jre8FROM 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 axr $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和exportnginx就把请求转发到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:stableFROM 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 axr $NGINX_CONF_DIR/$NGINX_CONF_FILE_NAME现在打开终端在nginx目录下执行以下命令构建nginx镜像docker build -t conf_nginx:0.0.1 .nginx镜像构建成功编写docker-compose脚本###新增一个docker-compose.yml文件(位置无所谓)内容如下version: 2services:disconf_redis_1:image: daocloud.io/library/redisrestart: alwaysdisconf_redis_2:image: daocloud.io/library/redisrestart: alwaysdisconf_zookeeper:image: zookeeper:3.3.6restart: alwaysdisconf_mysql:image: conf_mysql:0.0.1environment:MYSQL_ROOT_PASSWORD: 123456restart: alwaysdisconf_tomcat:image: conf_tomcat:0.0.1links:- disconf_redis_1:redishost001- disconf_redis_2:redishost002- disconf_zookeeper:zkhost- disconf_mysql:mysqlhostrestart: alwaysdisconf_nginx:image: conf_nginx:0.0.1links:- disconf_tomcat:tomcathostports:- 80:80restart: always按照我们最初梳理的依赖关系启动两个redis官方镜像一个zookeeper官方镜像再启动定制的msyql镜像然后tomcat启动并通过link关联rediszookeepermysql等容器最后是定制的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系统的使用吧体验一下动态配置给业务带来的便利。欢迎关注我的公众号