想用Docker模拟一下nginx+tomcat集群部署,今天折腾了一天,遇坑无数,终于在午夜即将到来之际将整个流程走通,借本文希望给同样遇到类似问题的小伙伴们留点线索。

主机环境是CentOS 7,nginx容器作为负载均衡,两个tomcat容器模拟Java应用服务器,这三个容器部署在同一个主机上。

一、创建tomcat Docker镜像(如果你有其他的镜像,该步可略过,下同)

Dockerfile:

FROM centos
LABEL author=Aldwin ENV JDKFile="server-jre-8u152-linux-x64.tar.gz" \
TomcatFile="apache-tomcat-9.0.2.tar.gz" \
TomcatConfigFile="server.xml" \
WebsitePath=/home/website \
JAVA_HOME=/usr/local/java \
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar \
CATALINA_HOME=/usr/local/tomcat \
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin COPY $JDKFile $TomcatFile $TomcatConfigFile ./ RUN mkdir -p $JAVA_HOME \
&& tar -xzf $JDKFile -C $JAVA_HOME --strip-components= \
&& rm -rf $JDKFile \
&& mkdir -p $CATALINA_HOME \
&& tar -xzf $TomcatFile -C $CATALINA_HOME --strip-components= \
&& rm -rf $TomcatFile \
&& mkdir -p $WebsitePath \
&& cp -f $TomcatConfigFile $CATALINA_HOME/conf \
&& rm -rf $TomcatConfigFile EXPOSE CMD ["/usr/local/tomcat/bin/catalina.sh", "run"] && tail -f /usr/local/tomcat/logs/catalina.out

1. 创建一个空目录,将Dockerfile文件、war包文件和tomcat的配置文件server.xml放入其中。

2. 将上面涉及的安装文件下载到Dockerfile同目录下。

3. cd到1所述的目录中,生成website镜像:

$ docker build -t website .

二、创建nginx Docker镜像

Dockerfile:

FROM nginx
LABEL author=Aldwin COPY nginx.conf ./ RUN mv -f nginx.conf /etc/nginx/

nginx.conf:

worker_processes  ;

events {
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ; upstream tomcats {
server website1 weight= max_fails= fail_timeout=20s;
server website2 weight= max_fails= fail_timeout=20s;
} server {
listen ;
server_name localhost; location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}

红色部分是需要特别注意的。

1. 创建一个空目录,将Dockerfile文件、war包文件和tomcat的配置文件server.xml放入其中。

2. 将上面涉及的安装文件下载到Dockerfile同目录下。

3. cd到1所述的目录中,生成mynginx镜像:

$ docker build -t mynginx .

三、创建网络(User-Defined Networks)

同主机下的容器互联需要建立网络。

1. 首先,我们可以先查看现有的网络:

$ docker network ls

2. 创建名为mynet的网络

$ docker network create mynet

四、启动容器

1. 用website镜像启动容器website1:

$ docker run -d --name website1 -p : --net mynet website

注意--net mynet,该参数将website1容器加入到了mynet网络中。

2. 用website镜像启动容器website2:

$ docker run -d --name website2 -p 9202:80 --net mynet website

3. 用mynginx镜像启动容器nginx:

$ docker run -d --name nginx -p : --net mynet mynginx

这时访问localhost,应该就可以访问到tomcat下你war包内的默认主页了。

注意,nginx.conf里的upstream server一定是容器的别名,而不能是docker分配给容器的ip地址,否则会报错。

同主机下Docker+nginx+tomcat负载均衡集群搭建的更多相关文章

  1. Redhat/CentOS7-环境虚拟机简单搭建Nginx+Tomcat负载均衡集群

    Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选.由于Tomcat处理静态HTML的能力运不及Apache或者Nginx,所以Tomcat ...

  2. Nginx+Tomcat 负载均衡集群

    案例分析 通常情况下,一台Tomcat站点由于可能出现单点故障及无法应对多客户复杂多样性的请求等问题,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案来完善Web站点架构. Nginx是一款 ...

  3. 使用Redis存储Nginx+Tomcat负载均衡集群的Session

    配置Tomcat的session共享可以有三种解决方案: 第一种是以负载均衡服务器本身提供的session共享策略,每种服务期的配置是不一样的并且nginx本身是没有的. 第二种是利用web容器本身的 ...

  4. CentOS6.5+nginx+tomcat负载均衡集群

    思路: 1.安装jdk 2.安装tomcat 3.安装nginx依赖库 4.安装nginx 5.nginx+2个tomcat集群 一:网络拓扑

  5. Apache+Tomcat负载均衡集群搭建

    1.所需软件 apache_2.2.4-win32-x86-no_ssl.apacheserver mod_jk-apache-2.2.4连接器,连接apache和tomcat apache-tomc ...

  6. windows配置nginx实现负载均衡集群

    windows配置nginx实现负载均衡集群2014-08-20 09:44:40   来源:www.abcde.cn   评论:0 点击:617 网上大部分关于nginx负载均衡集群的教程都是lin ...

  7. Linux平台上搭建apache+tomcat负载均衡集群

    传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...

  8. windows配置nginx实现负载均衡集群 -请求分流

    windows配置nginx实现负载均衡集群 一.windows上安装nginx 1.下载nginx的windows版本http://nginx.org/en/download.html 2.把压缩文 ...

  9. nginx集群:nginx配置负载均衡集群(nginx1.18.0)

    一,nginx的负载均衡集群的特点: 1,nginx集群和lvs的不同? lvs集群:工作在第4层(传输层) nginx集群:工作在第7层(应用层) lvs集群:性能更强 nginx集群:功能更强:可 ...

随机推荐

  1. 浅谈new/delete和malloc/free的用法与区别

    每个程序在执行时都会占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为自由存储区或堆. 一.new和delete用法 如下几行代码: int *pi=new int; int *pi=ne ...

  2. sqlite的limit使用

    如果我要取11-20的Account表的数据,则为: Select * From Person  Limit 9 Offset 10;表示从Person  表获取数据,跳过10行,取9行 .也可以这样 ...

  3. webSocket通讯

    1.使用facebook第三方SRWebSocket进行websocket通讯. pod 'SocketRocket' 2.通讯地址: ws://192.168.1.128:18882/ws 注意:s ...

  4. 关于php日期前置是否有0

    例如:2018-01-04,这个日期和月份前置是有0 如果不想有0,date( 'y-n-j',time() ):默认的是date( 'y-m-d',time() ),这个日期和月份前置是有0. da ...

  5. 关于Netty的入门使用

    Netty介绍: Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比 ...

  6. Struts2——第一个helloworld页面

    struts2是一个较为成熟的mvc框架,先看看怎么配置struts2并且产生helloworld页面. 首先从官网下载struts2,http://struts.apache.org/downloa ...

  7. chrome浏览器访问google插件

    访问google其实很多时候都是为了搜索资料,本文分享下,chrome浏览器访问google插件 下载地址:http://www.ggfwzs.com/ 1,下载完成后,解压: 如下: 2,打开谷歌浏 ...

  8. js计时功能

    //个位秒加 function time4jia() { //分钟60为上限 所有加停止 if (sz(a('time1').innerHTML) == 6) { return; } var m4 = ...

  9. 浅谈数据结构vector

    vector: 又名 向量 1.C++中的一种数据结构. 2.是一个类. 3.相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. A.使用时, ...

  10. fabric.js和高级画板

    本文介绍fabric.js框架使用,以及使用fabricjs打造一个高级画板程序. 高级画板功能介绍 全局绘制颜色选择 护眼模式.网格模式切换 自由绘制 画箭头 画直线 画虚线 画圆/椭圆/矩形/直角 ...