disconf mysql_Docker搭建disconf环境,三部曲之三:细说搭建过程
Docker下的disconf實(shí)戰(zhàn)全文鏈接
細(xì)說(shuō)搭建過(guò)程
在前兩章中,我們利用遠(yuǎn)程或本地的鏡像,快速體驗(yàn)了本地啟動(dòng)disconf的過(guò)程,本章我們一起來(lái)分析和梳理整個(gè)定制和搭建過(guò)程,了解這些后,我們就能根據(jù)自己的需要來(lái)定制本地的disconf環(huán)境了。
以下兩點(diǎn)請(qǐng)注意
本機(jī)環(huán)境已經(jīng)安裝了maven,并且把maven的bin目錄配置到環(huán)境變量PATH下;
編譯編譯disconf源碼時(shí),要用到官方shell腳本,所以本次實(shí)踐的操作系統(tǒng)建議用linux或mac,如果用windows,有三種方法:一個(gè)是把shell改成bat腳本,一個(gè)是用虛擬機(jī)的linux,還有一種是用在docker上搭建一個(gè)maven容器,把disconf源碼放在這個(gè)容器下編譯;
先分析再實(shí)戰(zhàn)
首先把disconf環(huán)境依賴的所有server都列出來(lái):
redis
zookeeper
mysql
tomcat
nginx
下一步,是理清各個(gè)server之間的依賴關(guān)系(例如tomcat上的業(yè)務(wù)要連接mysql數(shù)據(jù)庫(kù)),依賴關(guān)系如下,搞清楚了這個(gè)就知道link參數(shù)怎么寫了:
server的關(guān)系已經(jīng)理清了,接下來(lái)就要開始定制mysql,tomcat,nginx這些鏡像了,首先是準(zhǔn)備材料,disconf是個(gè)開源的應(yīng)用,我們可以在git上下載最新的源碼,執(zhí)行命令:
git clone git@github.com:knightliao/disconf.git
下載完畢,打開文件夾,內(nèi)容如下圖:
接下來(lái)我們開始實(shí)戰(zhàn)把,實(shí)戰(zhàn)一共五個(gè)步驟,依次是: 定制mysql鏡像 -> 定制tomcat鏡像 -> 定制nginx鏡像 -> 編寫docker-compose腳本 -> docker-compose啟動(dòng)
定制mysql鏡像###
mysql定制:目的是讓容器在創(chuàng)建時(shí)自動(dòng)執(zhí)行sql腳本,創(chuàng)建庫(kù)和表,并導(dǎo)入初始化數(shù)據(jù),在docker上實(shí)現(xiàn)數(shù)據(jù)庫(kù)腳本自動(dòng)執(zhí)行的方法可以參照《讓docker中的mysql啟動(dòng)時(shí)自動(dòng)執(zhí)行sql》一文,這里簡(jiǎn)單說(shuō)一下步驟:
打開disconf源碼文件夾,在disconf/disconf-web/sql目錄下找到以下四個(gè)文件:
0-init_table.sql
1-init_data.sql
201512/20151225.sql
20160701/20160701.sql
新建一個(gè)目錄mysql,把上面提到的四個(gè)sql文件復(fù)制到這個(gè)目錄下,再新建一個(gè)名為install_data.sh的腳本,內(nèi)容如下:
#!/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;
內(nèi)容很簡(jiǎn)單,就是自動(dòng)登錄mysql,密碼是docker啟動(dòng)的時(shí)候傳入的環(huán)境變量,然后執(zhí)行四個(gè)sql腳本文件
在mysql目錄下新建Dockerfile文件,內(nèi)容如下:
# Docker image of disconf mysql
# VERSION 0.0.1
# Author: bolingcavalry
#基礎(chǔ)鏡像使用daocloud.io/library/mysql:8
FROM daocloud.io/library/mysql:8
#作者
MAINTAINER BolingCavalry
#定義工作目錄
ENV WORK_PATH /usr/local/work
#定義會(huì)被容器自動(dòng)執(zhí)行的目錄
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
#創(chuàng)建文件夾
RUN mkdir -p $WORK_PATH
#把數(shù)據(jù)庫(kù)初始化數(shù)據(jù)的文件復(fù)制到工作目錄下
COPY ./$FILE_0 $WORK_PATH/
COPY ./$FILE_1 $WORK_PATH/
COPY ./$FILE_2 $WORK_PATH/
COPY ./$FILE_3 $WORK_PATH/
#把要執(zhí)行的shell文件放到/docker-entrypoint-initdb.d/目錄下,容器會(huì)自動(dòng)執(zhí)行這個(gè)shell
COPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/
#給執(zhí)行文件增加可執(zhí)行權(quán)限
RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL
打開終端在mysql目錄下執(zhí)行以下命令,構(gòu)建msql鏡像:
docker build -t conf_mysql:0.0.1 .
msql鏡像構(gòu)建成功
定制tomcat鏡像###
構(gòu)建tomcat鏡像時(shí)最重要的就是war包的生成,步驟如下:
創(chuàng)建兩個(gè)文件夾,分別設(shè)置到ONLINE_CONFIG_PATH和WAR_ROOT_PATH這兩個(gè)環(huán)境變量中,環(huán)境變量的設(shè)置方式在不同的操作系統(tǒng)下各不相同,我用的是mac,配置方式是在~/.bash_profile文件中加入以下內(nèi)容(寫完記得執(zhí)行source ~/.bash_profile使環(huán)境變量在當(dāng)前命令行窗口生效):
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,里面的文件如下圖:
把這些文件全部復(fù)制到ONLINE_CONFIG_PATH變量對(duì)應(yīng)的目錄下,在這個(gè)目錄下依次修改jdbc-mysql.properties,redis-config.properties,zoo.properties這三個(gè)文件:
jdbc-mysql.properties的改動(dòng)如下圖,主要是數(shù)據(jù)url改成一個(gè)固定的名字mysqlhost,這個(gè)在docker run的時(shí)候要和link參數(shù)中的別名一致,還有就是數(shù)據(jù)庫(kù)的用戶名密碼:
redis-config.properties的改動(dòng)如下圖,主要是host參數(shù),也要和docker run時(shí)候的link參數(shù)的別名對(duì)齊,注意,這里要配置兩個(gè)redis
zoo.properties的配置如下圖,主要是host參數(shù),也要和docker run時(shí)候的link參數(shù)的別名對(duì)齊:
把a(bǔ)pplication-demo.properties文件改名為application.properties
好了,修改參數(shù)的事情就算做完了,有了這些和link參數(shù)一致的host配置,tomcat在運(yùn)行的時(shí)候就能連接上對(duì)應(yīng)的容器了。
現(xiàn)在我們用maven來(lái)編譯和打包disconf的源碼,用終端進(jìn)入disconf源碼的disconf-web子目錄,執(zhí)行以下命令開始編譯和打包:
sh deploy/deploy.sh
執(zhí)行完畢后,在環(huán)境變量WAR_ROOT_PATH對(duì)應(yīng)的目錄下,可以看到編譯和打包的結(jié)果,如下圖:
新建一個(gè)名叫tomcat的文件夾,把上圖中的disconf-web.war復(fù)制到這個(gè)文件夾下,再在這里新增一個(gè)server.xml文件,內(nèi)容如下,用來(lái)指定tomcat服務(wù)的根路徑對(duì)應(yīng)的應(yīng)用:
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" />
這個(gè)配置信息和官方tomcat中的server.xml文件相比,其實(shí)只增加了下面這一個(gè)節(jié)點(diǎn)的內(nèi)容:
在tomcat文件夾下新增Dockerfile文件,內(nèi)容如下:
# Docker image of disconf tomcat
# VERSION 0.0.1
# Author: bolingcavalry
#基礎(chǔ)鏡像使用tomcat:7.0.77-jre8
FROM tomcat:7.0.77-jre8
#作者
MAINTAINER BolingCavalry
#定義工作目錄
ENV TOMCAT_BASE /usr/local/tomcat
#復(fù)制配置文件
COPY ./server.xml $TOMCAT_BASE/conf/
#復(fù)制war包
COPY ./disconf-web.war $TOMCAT_BASE/webapps/
#給配置文件增加讀權(quán)限
RUN chmod a+xr $TOMCAT_BASE/conf/server.xml
#刪除默認(rèn)的ROOT文件件
RUN rm -rf $TOMCAT_BASE/webapps/ROOT
看的出Dockerfile做的事情并不多,就是復(fù)制war包,復(fù)制server.xml,刪除默認(rèn)的ROOT應(yīng)用文件夾這些事情;
現(xiàn)在打開終端在tomcat目錄下執(zhí)行以下命令,構(gòu)建tomcat鏡像:
docker build -t conf_tomcat:0.0.1 .
tomcat鏡像構(gòu)建成功!
構(gòu)建nginx鏡像###
新建一個(gè)nginx目錄,在里面新增一個(gè)nginx.conf文件,內(nèi)容如下:
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;
}
}
}
主要的配置有三點(diǎn):
將默認(rèn)的/etc/nginx/conf.d/*.conf配置注釋掉;
增加tomcat的host信息,“tomcathost”和后面docker run的link參數(shù)的別名保持一致;
動(dòng)靜分離的配置,請(qǐng)求url中如果帶有api和export,nginx就把請(qǐng)求轉(zhuǎn)發(fā)到tomcathost:8080,其他的請(qǐng)求直接訪問(wèn)nginx服務(wù)器的/usr/local/work/html文件夾;
在環(huán)境變量WAR_ROOT_PATH對(duì)應(yīng)的目錄下,有個(gè)html文件夾如下圖紅框位置,這是web工程全部靜態(tài)文件,把這個(gè)文件夾復(fù)制到剛才新建的nginx目錄下:
在nginx文件夾下新增Dockerfile文件,內(nèi)容如下:
# Docker image of disconf nginx
# VERSION 0.0.1
# Author: bolingcavalry
#基礎(chǔ)鏡像使用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
#創(chuàng)建工作文件夾
RUN mkdir -p $WORK_PATH
#創(chuàng)建nginx日志文件夾
RUN mkdir -p /etc/nginx/logs/
#復(fù)制nginx配置文件
COPY ./$NGINX_CONF_FILE_NAME $NGINX_CONF_DIR/
#復(fù)制網(wǎng)頁(yè)的靜態(tài)資源文件
COPY ./html $WORK_PATH/
#給配置文件增加讀權(quán)限
RUN chmod a+xr $NGINX_CONF_DIR/$NGINX_CONF_FILE_NAME
現(xiàn)在打開終端在nginx目錄下執(zhí)行以下命令,構(gòu)建nginx鏡像:
docker build -t conf_nginx:0.0.1 .
nginx鏡像構(gòu)建成功!
編寫docker-compose腳本###
新增一個(gè)docker-compose.yml文件(位置無(wú)所謂),內(nèi)容如下:
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
按照我們最初梳理的依賴關(guān)系,啟動(dòng)兩個(gè)redis官方鏡像,一個(gè)zookeeper官方鏡像,再啟動(dòng)定制的msyql鏡像,然后tomcat啟動(dòng)并通過(guò)link關(guān)聯(lián)redis,zookeeper,mysql等容器,最后是定制的nginx啟動(dòng),link關(guān)聯(lián)tomcat,并且nginx容器的80端口映射到當(dāng)前電腦的80端口;
啟動(dòng)所有容器###
在docker-compose.yml文件所在的目錄下,執(zhí)行命令:
docker-compose up -d
終端會(huì)顯示正在啟動(dòng)各個(gè)容器,如下圖,每個(gè)容器的名稱會(huì)被docker-compose加上前綴和后綴:
tomcat的應(yīng)用啟動(dòng)需要一點(diǎn)時(shí)間,我們可以通過(guò)docker logs -f disconf_disconf_tomcat_1命令來(lái)查看tomcat啟動(dòng)日志,disconf_disconf_tomcat_1是容器名稱,如上圖中的紅框所示。
啟動(dòng)完畢后,在瀏覽器上輸入localhost,可以看見熟悉的disconf登錄頁(yè)面,用戶名admin,密碼admin,登錄進(jìn)去試試吧:
至此,disconf環(huán)境搭建三部曲已經(jīng)結(jié)束,從體驗(yàn)到親手一步一步配置都經(jīng)歷了,我們可以按照自己的要求為自己定制一個(gè)disconf環(huán)境了。
后面的文章中,我們一起來(lái)實(shí)戰(zhàn)一下disconf系統(tǒng)的使用吧,體驗(yàn)一下動(dòng)態(tài)配置給業(yè)務(wù)帶來(lái)的便利。
歡迎關(guān)注我的公眾號(hào)
總結(jié)
以上是生活随笔為你收集整理的disconf mysql_Docker搭建disconf环境,三部曲之三:细说搭建过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小白选购固态硬盘SSD哪项指标最重要固态
- 下一篇: mysql导入数据提前修改字段_Mysq