Docker + redis + nginx + tomcat
环境pc机机器192.168.1.242系统# uname -aLinux hdp-gp-dk02 2.6.32-504.el6.x86_64 #1 SMP Tue Sep 16 01:56:35 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux#cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 6.6 (Santiago)简介一个Web应用,使用Docker容器来部署应用,并将Session交给Redis来存储和管理,涉及到Docker/Redis/Tomcat/Nginx/Spring Web/Spirng Web等技术。其中:Docker——容器技术或虚拟化技术,可以将我们的application及相关依赖打包到一个容器内,方便移植、集群部署,容器完全使用沙箱机制,容器之间互不影响完全独立。下文所有的server都是部署在Docker中。安装包(jar包)jdk-7u79-linux-x64.tar.gzredis-3.0.6.tar.gzapache-tomcat-7.0.56.tar.gznginx-1.8.0.tar.gzcommons-pool-1.5.4.jarcommons-pool2-2.4.1.jarjedis-2.6.2.jartomcat-juli.jartomcat-juli-adapters.jartomcat-redis-session-manager1.2.jarDocker镜像基础环境 centos安装docker省略,前面已经给出;下载centos镜像Docker pull centosDocker安装tomcat 并制作成镜像安装jdk,配置环境变量1. 下载jdk-7u79-linux-x64.tar.gz2. 上传jdk-7u79-linux-x64.tar.gz3. 解压tar zxvf jdk-7u79-linux-x64.tar.gz4. docker容器中移动解压目录,修改环境变量mv jdk1.7.0_79 /usr/localvim .bash_profileexport JAVA_HOME=/usr/local/jdk1.7.0_79export JAVA_BIN=$JAVA_HOME/binexport JRE_HOME=$JAVA_HOME/jreexport PATH=$JAVA_HOME/bin:$PATH#export CLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JRE_HOME/lib/tools.jar5. 更新bash_profilesource .bash_profileDocker安装tomcat1. 下载apache-tomcat-7.0.56.tar.gz2. 上传apache-tomcat-7.0.56.tar.gz3. 解压tar zxvf apache-tomcat-7.0.56.tar.gz4. tomcat开启和关闭开启tomcat/usr/local/tomcat/apache-tomcat-7.0.56/bin/shutdown.sh关闭tomcat/usr/local/tomcat/apache-tomcat-7.0.56/bin/startup.sh将tomcat容器制作成镜像1. 生成镜像:docker commit(tomcat容器id) tomcat_gbicc/v12. 查看镜像:docker images3. 导出镜像:docker save tomcat_gbicc/v1 | bzip2 -9 -c>tomcat_gbicc_v1.tar.bz2Docker安装nginx 并制作成镜像安装jdk,配置环境变量1. 下载jdk-7u79-linux-x64.tar.gz2. 上传jdk-7u79-linux-x64.tar.gz3. 解压tar zxvf jdk-7u79-linux-x64.tar.gz4. docker容器中移动解压目录,修改环境变量mv jdk1.7.0_79 /usr/localvim .bash_profileexport JAVA_HOME=/usr/local/jdk1.7.0_79export JAVA_BIN=$JAVA_HOME/binexport JRE_HOME=$JAVA_HOME/jreexport PATH=$JAVA_HOME/bin:$PATH#export CLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JRE_HOME/lib/tools.jar5. 更新bash_profilesource .bash_profileDocker安装nginx1. 下载nginx-1.8.0.tar.gz2. 上传nginx-1.8.0.tar.gz3. 解压tar zxvf nginx-1.8.0.tar.gz4. 安装所需要的包yum -y install gcc* automake autoconf libtool make安装opensslwget http://www.openssl.org/source/openssl-1.0.1c.tar.gztar -zxvf openssl-1.0.1c.tar.gzcd openssl-1.0.1c/./configmake make install安装zlib wget http://zlib.net/zlib-1.2.8.tar.gztar -zxvf zlib-1.2.8.tar.gzcd zlib-1.2.8./configuremake make install进去nginx-1.8.0./configure --prefix=/home/nginx/nginx$ make$ make install5. nginx开启和关闭安装完成之后生成一个nginx的文件夹,cd进去并切换到sbin目录开启nginx ./nginx关闭nginx./nginx -s stop重启nginx ./nginx -s reload将nginx容器制作成镜像1. 生成镜像:docker commit(nginx容器id) nginx_gbicc/v12. 查看镜像:docker images3. 导出镜像:docker save nginx_gbicc/v1 | bzip2 -9 -c>nginx_gbicc_v1.tar.bz2Docker安装redis 并制作成镜像安装jdk,配置环境变量1. 下载jdk-7u79-linux-x64.tar.gz2. 上传jdk-7u79-linux-x64.tar.gz3. 解压tar zxvf jdk-7u79-linux-x64.tar.gz4. docker容器中移动解压目录,修改环境变量mv jdk1.7.0_79 /usr/localvim .bash_profileexport JAVA_HOME=/usr/local/jdk1.7.0_79export JAVA_BIN=$JAVA_HOME/binexport JRE_HOME=$JAVA_HOME/jreexport PATH=$JAVA_HOME/bin:$PATH#export CLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JRE_HOME/lib/tools.jar5. 更新bash_profilesource .bash_profileDocker安装redis1. 下载redis-3.0.6.tar.gz2. 上传redis-3.0.6.tar.gz3. 解压tar zxvf redis-3.0.6.tar.gz4. 安装gcc、c++环境等所需要的包yum -y install gcc* automake autoconf libtool make gcc-c++进去redis-3.0.6$ make MALLOC=libc$ make install修改配置文件mkdir -p /usr/local/redis/logmkdir -p /usr/local/redis/pidmkdir -p /usr/local/redis/dbcp /usr/local/src/redis/redis.conf /usr/local/redis/redis.confvim /usr/local/redis/redis.confdaemonize yespidfile /usr/local/redis/pid/redis.pidlogfile /usr/local/redis/log/redis.logdir /usr/local/redis/dbtimeout 60添加redis服务开机启动:vim /etc/init.d/redis#!/bin/sh# chkconfig: 2345 60 40# Description: Start and Stop redis# Provides: redis# Default-Start: 2 3 4 5# Default-Stop: 0 1 6PATH=/usr/local/bin:/sbin:/usr/bin:/binREDISPORT=6379EXEC=/usr/local/redis/bin/redis-serverREDIS_CLI=/usr/local/redis/bin/redis-cliPIDFILE= /usr/local/redis/pidCONF="/usr/local/redis/redis.conf"case "$1" instart)if [ -f $PIDFILE ]thenecho "$PIDFILE exists, process is already running or crashed"elseecho "Starting Redis server..."$EXEC $CONFfiif [ "$?"="0" ]thenecho "Redis is running..."fi;;stop)if [ ! -f $PIDFILE ]thenecho "$PIDFILE does not exist, process is not running"elsePID=$(cat $PIDFILE)echo "Stopping Redis server..."$REDIS_CLI -p $REDISPORT SHUTDOWNwhile [ -x ${PIDFILE} ]doecho "Waiting for Redis to shutdown ..."sleep 1doneecho "Redis is stopped"fi;;restart|force-reload)${0} stop${0} start;;*)echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2exit 1esacchmod a+x /etc/init.d/redischkconfig --add redischkconfig --level 2345 redis onchkconfig --list | grep redis5. redis开启和关闭开启redis /etc/init.d/redis start关闭redis/etc/init.d/redis stop重启redis/etc/init.d/redis restart将redis容器制作成镜像1. 生成镜像:docker commit(redis容器id) redis_gbicc/v12. 查看镜像:docker images3. 导出镜像:docker save redis_gbicc/v1 | bzip2 -9 -c>redis_gbicc_v1.tar.bz2Redis管理Session+Nginx负载均衡+Docker+Tomcat1. 修改tomcat的配置要用Redis来存储和管理Session,我们需要修改content.xml,来改变Tomcat的Session管理方式,如下:<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource><Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/><Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="172.17.0.25" port="6379" database="0" maxInactiveInterval="60"/></Context>Redis服务器地址和端口、Session有效时间按自己需要配置。复制上面提到的jar文件到{Tomcat}/lib目录commons-pool-1.5.4.jarcommons-pool2-2.4.1.jarjedis-2.6.2.jartomcat-juli.jartomcat-juli-adapters.jartomcat-redis-session-manager1.2.jar2. 修改nginx的配置用Nginx做负载均衡;在http段里面加上如下配置: upstream 172.17.0.18 { server 172.17.0.26:8080 max_fails=3 fail_timeout=3s weight=1; server 172.17.0.30:8080 max_fails=3 fail_timeout=3s weight=2; keepalive 65;} server { listen 80; server_name172.17.0.18; location / { root html; indexindex.html index.htm; proxy_pass http://172.17.0.18;# proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}总结:上图为docker-容器的ip;使用所有的服务都需要映射出其端口;在开启容器的时候开启就行。
页:
[1]