同主机下Docker+nginx+tomcat负载均衡集群搭建
想用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负载均衡集群搭建的更多相关文章
- Redhat/CentOS7-环境虚拟机简单搭建Nginx+Tomcat负载均衡集群
Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选.由于Tomcat处理静态HTML的能力运不及Apache或者Nginx,所以Tomcat ...
- Nginx+Tomcat 负载均衡集群
案例分析 通常情况下,一台Tomcat站点由于可能出现单点故障及无法应对多客户复杂多样性的请求等问题,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案来完善Web站点架构. Nginx是一款 ...
- 使用Redis存储Nginx+Tomcat负载均衡集群的Session
配置Tomcat的session共享可以有三种解决方案: 第一种是以负载均衡服务器本身提供的session共享策略,每种服务期的配置是不一样的并且nginx本身是没有的. 第二种是利用web容器本身的 ...
- CentOS6.5+nginx+tomcat负载均衡集群
思路: 1.安装jdk 2.安装tomcat 3.安装nginx依赖库 4.安装nginx 5.nginx+2个tomcat集群 一:网络拓扑
- Apache+Tomcat负载均衡集群搭建
1.所需软件 apache_2.2.4-win32-x86-no_ssl.apacheserver mod_jk-apache-2.2.4连接器,连接apache和tomcat apache-tomc ...
- windows配置nginx实现负载均衡集群
windows配置nginx实现负载均衡集群2014-08-20 09:44:40 来源:www.abcde.cn 评论:0 点击:617 网上大部分关于nginx负载均衡集群的教程都是lin ...
- Linux平台上搭建apache+tomcat负载均衡集群
传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...
- windows配置nginx实现负载均衡集群 -请求分流
windows配置nginx实现负载均衡集群 一.windows上安装nginx 1.下载nginx的windows版本http://nginx.org/en/download.html 2.把压缩文 ...
- nginx集群:nginx配置负载均衡集群(nginx1.18.0)
一,nginx的负载均衡集群的特点: 1,nginx集群和lvs的不同? lvs集群:工作在第4层(传输层) nginx集群:工作在第7层(应用层) lvs集群:性能更强 nginx集群:功能更强:可 ...
随机推荐
- 原生js封装添加class,删除class
一.添加class function addClass(ele,cName) { var arr = ele.className.split(' ').concat(cName.split(" ...
- 接口登录CSDN发布博客---封装方法,使用unittest框架
一个简单的跑接口流程:登录后发表带图片的博客.这里涉及到的知识点: 1.登录时通过cookies去保持登录状态,把cookies添加到一个session中,这样可以保持长时间登录状态: 2.我们通过爬 ...
- Python并发编程之进程
一.理论概念 1.定义 进程(Process 也可以称为重量级进程)是程序的一次执行.在每个进程中都有自己的地址空间.内存.数据栈以及记录运行的辅助数据,它是系统进行资源分配和调度的一个独立单位. 2 ...
- Beta第七天
听说
- 实验MyOD
实验MyOD 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和运行结果截图,加上学号水印,提交码云代码链接. 代码如下: (刚开始 ...
- C语言--期末总结
一. 1.当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 答:当初报志愿的时候,没有具体的想法,只凭借着 ...
- 团队作业4——第一次项目冲刺(Alpha版本)11.16
a. 提供当天站立式会议照片一张 举行站立式会议,讨论项目安排: 整理各自的任务汇报: 全分享遇到的困难一起讨论: 讨论接下来的计划: b. 每个人的工作 (有work item 的ID) 1.前两天 ...
- 201621123031 《Java程序设计》第13周学习总结
作业13-网络 1.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被 ...
- 使用genstring和NSLocalizedString实现App文本的本地化
OS提供了简便的方法来实现本地化,其中用的最多的就是NSLocalizedString. 首先查看下NSLocalizedString是什么: #define NSLocalizedString(ke ...
- Flask 学习 七 用户认证
使用werkzeug 实现密码散列 from werkzeug.security import generate_password_hash,check_password_hash class Use ...