Docker Compose 一键部署Nginx代理Tomcat集群

时间:2022-09-09 10:02:01

Docker Compose 一键部署Nginx代理Tomcat集群

目录结构

[root@localhost ~]# tree compose_nginx_tomcat/
compose_nginx_tomcat/
├── docker-compose.yml
├── mysql
│   ├── conf
│   │   └── my.cnf
│   └── data
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.12.1.tar.gz
│   └── nginx.conf
├── tomcat
│   ├── apache-tomcat-8.0.46.tar.gz
│   ├── Dockerfile
│   ├── jdk-8u181-linux-x64.tar.gz
│   └── server.xml
└── webapps
└── ROOT
└── index.jsp 7 directories, 10 files

一、创建Nginx Compose

1、创建DockerCompose项目目录

mkdir compose_nginx_tomcat
cd compose_nginx_tomcat/

1.2、创建nginx管理目录

mkdir nginx
cd nginx

1.3、将nginx源码包下载到本地

  • Nginx-1.12.1
  • 下载地址:https://pan.baidu.com/s/1IAdODW63jbpwbQX992coYg
  • 密码:p89j

1.4、创建Dockerfile文件

vim Dockerfile

# 指定镜像
FROM centos:6
# 指定管理员
MAINTAINER xiangsikai
# 执行命令安装编译库文件
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
# 添加解压nginx包到/tmp目录下
ADD nginx-1.12.1.tar.gz /tmp
# 进入目录进行编译安装
RUN cd /tmp/nginx-1.12.1 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install
# 删除容器内置配置文件
RUN rm -f /usr/local/nginx/conf/nginx.conf
# 复制本地配置文件到容器内
COPY nginx.conf /usr/local/nginx/conf
# 声明暴露端口
EXPOSE 80
# 启动容器Nginx服务,指定全局命令daemon off保证服务在前台运行不会关闭
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

1.5、创建nginx.conf配置文件

vim nginx.conf

user  root;
worker_processes auto; error_log logs/error.log info; pid logs/nginx.pid; events {
use epoll;
} http { include mime.types;
default_type application/octet-stream; log_format main '$upstream_addr $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main;
sendfile on;
keepalive_timeout 65; # 代理三台tomcat服务
upstream www.example.com {
#ip_hash;
server tomcat01:8080;
server tomcat02:8080;
server tomcat03:8080;
} # 动静分离
server {
listen 80;
server_name localhost; # 动态请求转发给tomcat处理
location / {
proxy_pass http://www.example.com;
}
# 静态资源请求交给nginx处理
location ~ \.(html|css|js|jpg|png|gif)$ {
root /opt/webapps/ROOT;
}
}
}

nginx配置文件


二、创建Mysql Compose

2.1、创建Mysql管理目录

mkdir mysql
cd mysql
mkdir conf
cd conf

2.2、创建mysql配置文件

vim my.cnf

[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
pid-file=/var/run/mysqld/mysqld.pid
log_error=/var/log/mysql/error.log
character_set_server = utf8
max_connections=3600

mysql配置文件


三、创建Tomcat Compose

3.1、创建tomcat管理目录与网站目录

mkdir tomcat
mkdir -p webapps/ROOT/
cd tomcat

3.2、下载tomcat、jdk 压缩文件下载到本地

  • apache-tomcat-8.0.46
  • 下载地址:https://pan.baidu.com/s/1MuSGn3S1wILUfKZmemUu8g
  • 密码:xydu
  • jdk-8u181-linux-x64
  • 下载地址:https://pan.baidu.com/s/1eJPPR1cun09u4Uks0800hg
  • 密码:gjvv

3.3 创建Dockerfile文件

vim Dockerfile

# 指定镜像
FROM centos:6
# 指定管理员
MAINTAINER xiangsikai
# 解压jdk包到指定目录
ADD jdk-8u181-linux-x64.tar.gz /usr/local
# 安装jdk包到指定目录
ENV JAVA_HOME /usr/local/jdk1.8.0_181
# 解压tomcat包到指定目录
ADD apache-tomcat-8.0.46.tar.gz /usr/local
# 将本地配置文件复制到镜像内
COPY server.xml /usr/local/apache-tomcat-8.0.46/conf # 指定服务暴露端口
EXPOSE 8080
# 启动tomcat服务
ENTRYPOINT ["/usr/local/apache-tomcat-8.0.46/bin/catalina.sh", "run"]

3.4 创建server.xml配置文件

vim server.xml

<?xml version='1.0' encoding='utf-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<Server port="" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
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" />
</GlobalNamingResources> <!-- A "Service" is a collection of one or more "Connectors" that share
a single "Container" Note: A "Service" is not itself a "Container",
so you may not define subcomponents such as "Valves" at this level.
Documentation at /docs/config/service.html
-->
<Service name="Catalina"> <!--The connectors can use a shared executor, you can define one or more named thread pools-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="" minSpareThreads=""/>
--> <!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="" protocol="HTTP/1.1"
connectionTimeout=""
redirectPort="" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="" protocol="HTTP/1.1"
connectionTimeout=""
redirectPort="" />
-->
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation that requires the JSSE
style configuration. When using the APR/native implementation, the
OpenSSL style configuration is required as described in the APR/native
documentation -->
<!--
<Connector port="" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
--> <!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="" protocol="AJP/1.3" redirectPort="" /> <!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host).
Documentation at /docs/config/engine.html --> <!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
--> <!-- Use the LockOutRealm to prevent attempts to guess user passwords
via a brute-force attack -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm> <Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
--> <!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host>
</Engine>
</Service>
</Server>

tomcat配置文件


四、创建docker-compose.yml

4.1、在compose_nginx_tomcat目录下创建docker-compose.yml

vim docker-compose.yml

# 指定服务版本号
version: ''
# 服务
services:
# 服务名称
nginx:
# 指定服务容器名字
hostname: nginx
# 构建
build:
# 指定目录上下文构建镜像
context: ./nginx
# 指定dockerfile文件名称
dockerfile: Dockerfile
# 映射数组级的端口
ports:
- 80:80
# 映射服务别名
links:
- tomcat01:tomcat01
- tomcat02:tomcat02
- tomcat03:tomcat03
# 映射服务数据卷路径
volumes:
- ./webapps:/opt/webapps
# 启动依赖,按顺序启动服务
depends_on:
- mysql
- tomcat01
- tomcat02
- tomcat03 # 服务名称
tomcat01:
# 指定服务容器名字
hostname: tomcat01
# 指定目录上下文构建镜像
build: ./tomcat
# 映射服务别名
links:
- mysql:mysql-db
# 映射服务数据卷路径
volumes:
- ./webapps:/usr/local/apache-tomcat-8.0.46/webapps # 服务名称
tomcat02:
# 指定服务容器名字
hostname: tomcat02
# 指定目录上下文构建镜像
build: ./tomcat
# 映射服务别名
links:
- mysql:mysql-db
# 映射服务数据卷路径
volumes:
- ./webapps:/usr/local/apache-tomcat-8.0.46/webapps # 服务名称
tomcat03:
# 指定服务容器名字
hostname: tomcat03
# 指定目录上下文构建镜像
build: ./tomcat
# 映射服务别名
links:
- mysql:mysql-db
# 映射服务数据卷路径
volumes:
- ./webapps:/usr/local/apache-tomcat-8.0.46/webapps # 服务名称
mysql:
# 指定服务容器名字
hostname: mysql
# 指定服务容器名字
image: mysql:5.6
# 映射数组级的端口
ports:
- 3306:3306
# 映射服务数据卷路径
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
# 指定数据库变量
environment:
# 设置数据库密码
MYSQL_ROOT_PASSWORD: 123456
# 添加user用户
MYSQL_USER: user
# 设置user用户密码
MYSQL_PASSWORD: user123

4.2、编写测试页面

vim webapps/ROOT/index.jsp

java ...........

4.3、执行dockerCompose 一键部署Nginx代理Tomcat集群

# 管理目录下compose_nginx_tomcat 执行该命令 -d 后台运行
docker-compose up -d

五、测试容器服务

5.1、查看启动状态终端输出

Creating compose_nginx_tomcat_mysql_1 ... done
Creating compose_nginx_tomcat_tomcat03_1 ... done
Creating compose_nginx_tomcat_tomcat02_1 ... done
Creating compose_nginx_tomcat_tomcat01_1 ... done
Creating compose_nginx_tomcat_nginx_1 ... done

5.2、查看后台运行容器

docker-compose ps
        Name                 Command         State          Ports
------------------------------------------------------------------------
compose_nginx_tomcat docker- Up 0.0.0.0:3306->3306/
_mysql_1 entrypoint.sh tcp
mysqld
compose_nginx_tomcat /usr/local/nginx/sb Up 0.0.0.0:80->80/tcp
_nginx_1 in/ngin ...
compose_nginx_tomcat /usr/local/apache- Up 8080/tcp
_tomcat01_1 tomcat-8 ...
compose_nginx_tomcat /usr/local/apache- Up 8080/tcp
_tomcat02_1 tomcat-8 ...
compose_nginx_tomcat /usr/local/apache- Up 8080/tcp
_tomcat03_1 tomcat-8 ...

5.3、测试数据库

# 1、进入数据库容器
docker container exec -it c764f337ffad /bin/bash # 2、进入数据库
mysql -h192.168.1.77 -uroot -p123456 # 3、查看创建用户user
mysql> select user,host from mysql.user; +------+-----------+
| user | host |
+------+-----------+
| root | % |
| user | % |
| root | localhost |
+------+-----------+
3 rows in set (0.00 sec)

5.4、浏览器测试nginx代理tomcat

Docker Compose 一键部署Nginx代理Tomcat集群

# 1、进入nginx管理界面
docker container exec -it c764f337ffad /bin/bash # 2、查看输出日志测试轮询代理
[root@nginx /]# tail /usr/local/nginx/logs/access.log -f
172.20.0.4:8080 192.168.1.2 - - [25/Oct/2018:07:34:07 +0000] "GET / HTTP/1.1" 200 10 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0" "-"
172.20.0.3:8080 192.168.1.2 - - [25/Oct/2018:07:34:07 +0000] "GET /favicon.ico HTTP/1.1" 404 1016 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0" "-"
172.20.0.5:8080 192.168.1.2 - - [25/Oct/2018:07:34:31 +0000] "GET / HTTP/1.1" 200 10 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0" "-"
172.20.0.4:8080 192.168.1.2 - - [25/Oct/2018:07:34:35 +0000] "GET / HTTP/1.1" 200 10 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0" "-"
172.20.0.3:8080 192.168.1.2 - - [25/Oct/2018:07:34:40 +0000] "GET / HTTP/1.1" 200 10 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0" "-"
172.20.0.5:8080 192.168.1.2 - - [25/Oct/2018:07:34:41 +0000] "GET / HTTP/1.1" 200 10 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0" "-"

Docker Compose 一键部署Nginx代理Tomcat集群的更多相关文章

  1. Docker Compose部署 nginx代理Tomcat集群

    一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...

  2. &lbrack;Docker&rsqb;compose一键部署nginx

    Docker-compose部署nginx 创建配置文件 mkdir -p /usr/local/docker/nginx cat > /usr/local/docker/nginx/docke ...

  3. Docker Compose一键部署Nginx反向代理Tomcat集群

    目录结构如下 mysql/conf/my.cnf [mysqld] user=mysql port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/ ...

  4. Docker Compose 一键部署LNMP

    Docker Compose 一键部署LNMP 目录结构 [root@localhost ~]# tree compose_lnmp/ compose_lnmp/ ├── docker-compose ...

  5. Docker Compose 一键部署多节点爬虫程序

    Docker Compose 一键部署多节点爬虫程序 目录结构 [root@localhost ~]# tree compose_crawler/ compose_crawler/ ├── cento ...

  6. nginx整合tomcat集群并做session共享----测试案例

    最近出于好奇心,研究了一下tomcat集群配置,并整合nginx,实现负载均衡,session共享,写篇记录,防止遗忘.---------菜鸡的自我修炼. 说明:博主采用一个web项目同时部署到两台t ...

  7. Nginx代理MysqlCluster集群(二)

    Nginx代理MySql集群本次实验采用nginx 版本1.12以上 集合了tcp代理功能只需在编译时明文开启指定的功能 --with-stream--prefix=/usr/local/ngin - ...

  8. Nginx&plus;Memcached&plus;Tomcat集群配置&lpar;MSM--win7 64bit&rpar;

    本次主要是在win7 64 上演示操作. web应用构建 Memcached安装配置启动 Tomcat配置 所需jar包 memcached-session-manager 序列化 contextxm ...

  9. Ubuntu下基于Nginx实现Tomcat集群负载均衡

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Nginx是一款HTTP和反向代理服务器,有关它的介绍可以到网上搜一下,很多很多,不再累述.这里,我们记录一下Nginx ...

随机推荐

  1. 如何防止Android应用代码被窃

    上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...

  2. springFramework 源码学习之源码下载与编译

    1.源码下载 Spring已经将源码从svn迁移到了git.对于习惯了svn的人来说依然可以svn checkout,最好checkout到英文路径下,本人中文路径编译不过,具体原因不明,路径: ht ...

  3. Goldeneye&period;py网站压力测试工具2&period;1版源码

    Goldeneye压力测试工具的源代码,粗略看了下,代码写的蛮规范和易读的,打算边读边加上了中文注释,但是想来也没太大必要,代码600多行,值得学习的地方还是蛮多的,喜欢Python的同学可以一读 这 ...

  4. Chrome 开发者工具的使用

    Console 那里是可以调节上下文的,不同的文档上下文互相隔离,默认是top,也就是当前打开的页面.这个功能在页面包含 iframe 或者开发插件的时候才用得到. 早期版本的 Resource 已经 ...

  5. ubuntu14&period;04 解决屏幕亮度无法调节的问题

    sudo gedit /etc/default/grub 在打开文件中找到 GRUB_CMDLINE_LINUX="" 改成 GRUB_CMDLINE_LINUX="ac ...

  6. Docker 快速验证 HTML 导出 PDF 高效方案

    需求分析 项目中用到了 Echarts,想要把图文混排,当然包括 echarts 生成的 Canvas 图也导出 PDF. 设计和实现时,分析了 POI.iText.freemaker.world 的 ...

  7. 使用Jacob操作Wrod文档的工具类代码

    一.需要有jacob的jar包支持 import java.util.Iterator; import java.util.List; import java.util.HashMap; import ...

  8. 专访阿里资深研发工程师窦贤明:PG与商业数据库差距并不明显

    窦贤明认为, 支持类型.功能和语法丰富,性能优良   9月24日,窦贤明将参加在北京举办的线下活动,并做主题为<Greenplum分片案例分析>的分享.值此,他分享了PG.工作上的一些经历 ...

  9. App 图标设计 - 圆角透明效果(0 基础使用 PS)

    App 图标设计 - 圆角透明效果(0 基础使用 PS) 方法: 如果你有些基础,就不必看图文教程了: 1.使用圆角矩形工具选中,设置圆角尺寸[例如:1024*1024 px(圆角:160 px)] ...

  10. 在Linux服务器上部署node项目(git部署,forever持续运行,配置SSL证书)

    一.环境部署 1.下载安装包: wget https://nodejs.org/dist/v9.9.0/node-v9.9.0-linux-x64.tar.xz 2.解压并进入目录: xz -d no ...