<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Docker-compose_%E9%83%A8%E7%BD%B2Nginx%E4%BB%A3%E7%90%86Tomcat%E9%9B%86%E7%BE%A4</id>
	<title>Docker-compose 部署Nginx代理Tomcat集群 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Docker-compose_%E9%83%A8%E7%BD%B2Nginx%E4%BB%A3%E7%90%86Tomcat%E9%9B%86%E7%BE%A4"/>
	<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Docker-compose_%E9%83%A8%E7%BD%B2Nginx%E4%BB%A3%E7%90%86Tomcat%E9%9B%86%E7%BE%A4&amp;action=history"/>
	<updated>2026-04-20T11:19:40Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.linuxsa.org/index.php?title=Docker-compose_%E9%83%A8%E7%BD%B2Nginx%E4%BB%A3%E7%90%86Tomcat%E9%9B%86%E7%BE%A4&amp;diff=303&amp;oldid=prev</id>
		<title>Evan：​导入1个版本</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Docker-compose_%E9%83%A8%E7%BD%B2Nginx%E4%BB%A3%E7%90%86Tomcat%E9%9B%86%E7%BE%A4&amp;diff=303&amp;oldid=prev"/>
		<updated>2019-10-14T13:48:48Z</updated>

		<summary type="html">&lt;p&gt;导入1个版本&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=[http://wiki.linuxchina.net/index.php?title=Docker-compose%E6%95%99%E7%A8%8B#install compose install]=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=目录结构=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tree compose_nginx_tomcat/&lt;br /&gt;
compose_nginx_tomcat/&lt;br /&gt;
|-- docker-compose.yml&lt;br /&gt;
|-- mysql&lt;br /&gt;
|   |-- conf&lt;br /&gt;
|   |   `-- my.cnf&lt;br /&gt;
|   `-- data&lt;br /&gt;
|-- nginx&lt;br /&gt;
|   |-- Dockerfile&lt;br /&gt;
|   |-- nginx-1.12.2.tar.gz&lt;br /&gt;
|   `-- nginx.conf&lt;br /&gt;
|-- tomcat&lt;br /&gt;
|   |-- apache-tomcat-8.5.42.tar.gz&lt;br /&gt;
|   |-- Dockerfile&lt;br /&gt;
|   |-- jdk-8u211-linux-x64.tar.gz&lt;br /&gt;
|   `-- server.xml&lt;br /&gt;
`-- webapps&lt;br /&gt;
    `-- ROOT&lt;br /&gt;
        `-- index.jsp&lt;br /&gt;
&lt;br /&gt;
7 directories, 10 files&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Nginx Compose=&lt;br /&gt;
==创建DockerCompose项目目录==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir compose_nginx_tomcat&lt;br /&gt;
cd compose_nginx_tomcat/&lt;br /&gt;
&lt;br /&gt;
mkdir nginx&lt;br /&gt;
cd nginx&lt;br /&gt;
&lt;br /&gt;
wget -c https://nginx.org/download/nginx-1.12.2.tar.gz&lt;br /&gt;
&lt;br /&gt;
vi Dockerfile&lt;br /&gt;
&lt;br /&gt;
## 指定镜像&lt;br /&gt;
FROM debian:stretch-slim&lt;br /&gt;
#FROM centos:6&lt;br /&gt;
# 指定管理员&lt;br /&gt;
MAINTAINER  linuxsa.org&lt;br /&gt;
# 执行命令安装编译库文件&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y gcc gcc g++ make openssl libssl-dev  libpcre3 libpcre3-dev &lt;br /&gt;
#RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel&lt;br /&gt;
&lt;br /&gt;
# RUN apt-get update &amp;amp;&amp;amp; apt-get install -y --no-install-recommends g++ gcc libc6-dev make &amp;amp;&amp;amp; rm -rf /var/lib/apt/lists*&lt;br /&gt;
# 添加解压nginx包到/tmp目录下&lt;br /&gt;
RUN mkdir -p /tmp&lt;br /&gt;
ADD nginx-1.12.2.tar.gz /tmp&lt;br /&gt;
# 不用什么tar 解压 ,进入目录进行编译安装&lt;br /&gt;
RUN cd /tmp/nginx-1.12.2 &amp;amp;&amp;amp; ./configure --prefix=/usr/local/nginx --without-http_gzip_module  &amp;amp;&amp;amp; make -j 2 &amp;amp;&amp;amp; make install&lt;br /&gt;
&lt;br /&gt;
# 删除容器内置配置文件&lt;br /&gt;
RUN rm -f /usr/local/nginx/conf/nginx.conf &lt;br /&gt;
# 复制本地配置文件到容器内&lt;br /&gt;
COPY nginx.conf /usr/local/nginx/conf&lt;br /&gt;
# 声明暴露端口&lt;br /&gt;
EXPOSE 80&lt;br /&gt;
# 启动容器Nginx服务，指定全局命令daemon off保证服务在前台运行不会关闭&lt;br /&gt;
CMD [&amp;quot;/usr/local/nginx/sbin/nginx&amp;quot;, &amp;quot;-g&amp;quot;, &amp;quot;daemon off;&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vi nginx.conf #这个要优化一下&lt;br /&gt;
user  root; &lt;br /&gt;
worker_processes  auto; &lt;br /&gt;
&lt;br /&gt;
error_log  logs/error.log  info;&lt;br /&gt;
&lt;br /&gt;
pid        logs/nginx.pid; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
events {&lt;br /&gt;
    use epoll; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
http {&lt;br /&gt;
&lt;br /&gt;
    include       mime.types;&lt;br /&gt;
    default_type  application/octet-stream;&lt;br /&gt;
&lt;br /&gt;
    log_format  main &amp;#039;$upstream_addr $remote_addr - $remote_user [$time_local] &amp;quot;$request&amp;quot; &amp;#039;&lt;br /&gt;
                      &amp;#039;$status $body_bytes_sent &amp;quot;$http_referer&amp;quot; &amp;#039;&lt;br /&gt;
                      &amp;#039;&amp;quot;$http_user_agent&amp;quot; &amp;quot;$http_x_forwarded_for&amp;quot;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    access_log logs/access.log main;&lt;br /&gt;
    sendfile        on;&lt;br /&gt;
    keepalive_timeout  65;&lt;br /&gt;
    &lt;br /&gt;
# 代理三台tomcat服务&lt;br /&gt;
    upstream www.example.com {&lt;br /&gt;
        #ip_hash;&lt;br /&gt;
        server tomcat01:8080;&lt;br /&gt;
    server tomcat02:8080;&lt;br /&gt;
    server tomcat03:8080;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
# 动静分离&lt;br /&gt;
    server {&lt;br /&gt;
        listen 80;&lt;br /&gt;
        server_name localhost;&lt;br /&gt;
&lt;br /&gt;
# 动态请求转发给tomcat处理&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_pass http://www.example.com;&lt;br /&gt;
    }&lt;br /&gt;
# 静态资源请求交给nginx处理&lt;br /&gt;
        location ~ \.(html|css|js|jpg|png|gif)$ {&lt;br /&gt;
            root /opt/webapps/ROOT;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=创建Mysql Compose=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2.1、创建Mysql管理目录&lt;br /&gt;
&lt;br /&gt;
mkdir mysql&lt;br /&gt;
mkdir  mysql/data&lt;br /&gt;
cd mysql&lt;br /&gt;
mkdir conf&lt;br /&gt;
cd conf&lt;br /&gt;
&lt;br /&gt;
2.2、创建mysql配置文件&lt;br /&gt;
&lt;br /&gt;
vi my.cnf #要优化 &lt;br /&gt;
[mysqld]&lt;br /&gt;
user=mysql&lt;br /&gt;
port=3306&lt;br /&gt;
datadir=/var/lib/mysql&lt;br /&gt;
socket=/var/run/mysqld/mysqld.sock&lt;br /&gt;
pid-file=/var/run/mysqld/mysqld.pid&lt;br /&gt;
log_error=/var/log/mysql/error.log&lt;br /&gt;
character_set_server = utf8&lt;br /&gt;
max_connections=3600&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=创建Tomcat Compose=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.1、创建tomcat管理目录与网站目录&lt;br /&gt;
&lt;br /&gt;
mkdir tomcat&lt;br /&gt;
mkdir -p webapps/ROOT/&lt;br /&gt;
cd tomcat&lt;br /&gt;
&lt;br /&gt;
3.2、下载tomcat、jdk 压缩文件下载到本地&lt;br /&gt;
[root@work2 tomcat]# pwd&lt;br /&gt;
/root/compose_nginx_tomcat/tomcat&lt;br /&gt;
[root@work2 tomcat]# ls &lt;br /&gt;
apache-tomcat-8.5.42.tar.gz  Dockerfile  jdk-8u211-linux-x64.tar.gz  server.xml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.3 创建Dockerfile文件&lt;br /&gt;
&lt;br /&gt;
vi Dockerfile&lt;br /&gt;
FROM debian:stretch-slim&lt;br /&gt;
# 指定管理员&lt;br /&gt;
MAINTAINER  linuxsa.org&lt;br /&gt;
# 解压jdk包到指定目录&lt;br /&gt;
ADD jdk-8u211-linux-x64.tar.gz /usr/local&lt;br /&gt;
# 安装jdk包到指定目录&lt;br /&gt;
ENV JAVA_HOME /usr/local/jdk1.8.0_211&lt;br /&gt;
# 解压tomcat包到指定目录&lt;br /&gt;
ADD apache-tomcat-8.5.42.tar.gz /usr/local&lt;br /&gt;
# 将本地配置文件复制到镜像内&lt;br /&gt;
COPY server.xml /usr/local/apache-tomcat-8.5.42/conf&lt;br /&gt;
&lt;br /&gt;
# 指定服务暴露端口&lt;br /&gt;
EXPOSE 8080&lt;br /&gt;
# 启动tomcat服务&lt;br /&gt;
ENTRYPOINT [&amp;quot;/usr/local/apache-tomcat-8.5.42/bin/catalina.sh&amp;quot;, &amp;quot;run&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==3.4 创建server.xml配置文件==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vi server.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;utf-8&amp;#039;?&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
  Licensed to the Apache Software Foundation (ASF) under one or more&lt;br /&gt;
  contributor license agreements.  See the NOTICE file distributed with&lt;br /&gt;
  this work for additional information regarding copyright ownership.&lt;br /&gt;
  The ASF licenses this file to You under the Apache License, Version 2.0&lt;br /&gt;
  (the &amp;quot;License&amp;quot;); you may not use this file except in compliance with&lt;br /&gt;
  the License.  You may obtain a copy of the License at&lt;br /&gt;
&lt;br /&gt;
      http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
&lt;br /&gt;
  Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
  distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
  See the License for the specific language governing permissions and&lt;br /&gt;
  limitations under the License.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- Note:  A &amp;quot;Server&amp;quot; is not itself a &amp;quot;Container&amp;quot;, so you may not&lt;br /&gt;
     define subcomponents such as &amp;quot;Valves&amp;quot; at this level.&lt;br /&gt;
     Documentation at /docs/config/server.html&lt;br /&gt;
 --&amp;gt;&lt;br /&gt;
&amp;lt;Server port=&amp;quot;8005&amp;quot; shutdown=&amp;quot;SHUTDOWN&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.startup.VersionLoggerListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;!-- Security listener. Documentation at /docs/config/listeners.html&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.security.SecurityListener&amp;quot; /&amp;gt;&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
  &amp;lt;!--APR library loader. Documentation at /docs/apr.html --&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.AprLifecycleListener&amp;quot; SSLEngine=&amp;quot;on&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;!-- Prevent memory leaks due to use of particular java/javax APIs--&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.JreMemoryLeakPreventionListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.mbeans.GlobalResourcesLifecycleListener&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;Listener className=&amp;quot;org.apache.catalina.core.ThreadLocalLeakPreventionListener&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- Global JNDI resources&lt;br /&gt;
       Documentation at /docs/jndi-resources-howto.html&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
  &amp;lt;GlobalNamingResources&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Editable user database that can also be used by&lt;br /&gt;
         UserDatabaseRealm to authenticate users&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
    &amp;lt;Resource name=&amp;quot;UserDatabase&amp;quot; auth=&amp;quot;Container&amp;quot;&lt;br /&gt;
              type=&amp;quot;org.apache.catalina.UserDatabase&amp;quot;&lt;br /&gt;
              description=&amp;quot;User database that can be updated and saved&amp;quot;&lt;br /&gt;
              factory=&amp;quot;org.apache.catalina.users.MemoryUserDatabaseFactory&amp;quot;&lt;br /&gt;
              pathname=&amp;quot;conf/tomcat-users.xml&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/GlobalNamingResources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- A &amp;quot;Service&amp;quot; is a collection of one or more &amp;quot;Connectors&amp;quot; that share&lt;br /&gt;
       a single &amp;quot;Container&amp;quot; Note:  A &amp;quot;Service&amp;quot; is not itself a &amp;quot;Container&amp;quot;,&lt;br /&gt;
       so you may not define subcomponents such as &amp;quot;Valves&amp;quot; at this level.&lt;br /&gt;
       Documentation at /docs/config/service.html&lt;br /&gt;
   --&amp;gt;&lt;br /&gt;
  &amp;lt;Service name=&amp;quot;Catalina&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!--The connectors can use a shared executor, you can define one or more named thread pools--&amp;gt;&lt;br /&gt;
    &amp;lt;!--&lt;br /&gt;
    &amp;lt;Executor name=&amp;quot;tomcatThreadPool&amp;quot; namePrefix=&amp;quot;catalina-exec-&amp;quot;&lt;br /&gt;
        maxThreads=&amp;quot;150&amp;quot; minSpareThreads=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- A &amp;quot;Connector&amp;quot; represents an endpoint by which requests are received&lt;br /&gt;
         and responses are returned. Documentation at :&lt;br /&gt;
         Java HTTP Connector: /docs/config/http.html (blocking &amp;amp; non-blocking)&lt;br /&gt;
         Java AJP  Connector: /docs/config/ajp.html&lt;br /&gt;
         APR (HTTP/AJP) Connector: /docs/apr.html&lt;br /&gt;
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
    &amp;lt;Connector port=&amp;quot;8080&amp;quot; protocol=&amp;quot;HTTP/1.1&amp;quot;&lt;br /&gt;
               connectionTimeout=&amp;quot;20000&amp;quot;&lt;br /&gt;
               redirectPort=&amp;quot;8443&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- A &amp;quot;Connector&amp;quot; using the shared thread pool--&amp;gt;&lt;br /&gt;
    &amp;lt;!--&lt;br /&gt;
    &amp;lt;Connector executor=&amp;quot;tomcatThreadPool&amp;quot;&lt;br /&gt;
               port=&amp;quot;8080&amp;quot; protocol=&amp;quot;HTTP/1.1&amp;quot;&lt;br /&gt;
               connectionTimeout=&amp;quot;20000&amp;quot;&lt;br /&gt;
               redirectPort=&amp;quot;8443&amp;quot; /&amp;gt;&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443&lt;br /&gt;
         This connector uses the NIO implementation that requires the JSSE&lt;br /&gt;
         style configuration. When using the APR/native implementation, the&lt;br /&gt;
         OpenSSL style configuration is required as described in the APR/native&lt;br /&gt;
         documentation --&amp;gt;&lt;br /&gt;
    &amp;lt;!--&lt;br /&gt;
    &amp;lt;Connector port=&amp;quot;8443&amp;quot; protocol=&amp;quot;org.apache.coyote.http11.Http11NioProtocol&amp;quot;&lt;br /&gt;
               maxThreads=&amp;quot;150&amp;quot; SSLEnabled=&amp;quot;true&amp;quot; scheme=&amp;quot;https&amp;quot; secure=&amp;quot;true&amp;quot;&lt;br /&gt;
               clientAuth=&amp;quot;false&amp;quot; sslProtocol=&amp;quot;TLS&amp;quot; /&amp;gt;&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Define an AJP 1.3 Connector on port 8009 --&amp;gt;&lt;br /&gt;
    &amp;lt;Connector port=&amp;quot;8009&amp;quot; protocol=&amp;quot;AJP/1.3&amp;quot; redirectPort=&amp;quot;8443&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- An Engine represents the entry point (within Catalina) that processes&lt;br /&gt;
         every request.  The Engine implementation for Tomcat stand alone&lt;br /&gt;
         analyzes the HTTP headers included with the request, and passes them&lt;br /&gt;
         on to the appropriate Host (virtual host).&lt;br /&gt;
         Documentation at /docs/config/engine.html --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- You should set jvmRoute to support load-balancing via AJP ie :&lt;br /&gt;
    &amp;lt;Engine name=&amp;quot;Catalina&amp;quot; defaultHost=&amp;quot;localhost&amp;quot; jvmRoute=&amp;quot;jvm1&amp;quot;&amp;gt;&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
    &amp;lt;Engine name=&amp;quot;Catalina&amp;quot; defaultHost=&amp;quot;localhost&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!--For clustering, please take a look at documentation at:&lt;br /&gt;
          /docs/cluster-howto.html  (simple how to)&lt;br /&gt;
          /docs/config/cluster.html (reference documentation) --&amp;gt;&lt;br /&gt;
      &amp;lt;!--&lt;br /&gt;
      &amp;lt;Cluster className=&amp;quot;org.apache.catalina.ha.tcp.SimpleTcpCluster&amp;quot;/&amp;gt;&lt;br /&gt;
      --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;!-- Use the LockOutRealm to prevent attempts to guess user passwords&lt;br /&gt;
           via a brute-force attack --&amp;gt;&lt;br /&gt;
      &amp;lt;Realm className=&amp;quot;org.apache.catalina.realm.LockOutRealm&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;!-- This Realm uses the UserDatabase configured in the global JNDI&lt;br /&gt;
             resources under the key &amp;quot;UserDatabase&amp;quot;.  Any edits&lt;br /&gt;
             that are performed against this UserDatabase are immediately&lt;br /&gt;
             available for use by the Realm.  --&amp;gt;&lt;br /&gt;
        &amp;lt;Realm className=&amp;quot;org.apache.catalina.realm.UserDatabaseRealm&amp;quot;&lt;br /&gt;
               resourceName=&amp;quot;UserDatabase&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/Realm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;Host name=&amp;quot;localhost&amp;quot;  appBase=&amp;quot;webapps&amp;quot;&lt;br /&gt;
            unpackWARs=&amp;quot;true&amp;quot; autoDeploy=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- SingleSignOn valve, share authentication between web applications&lt;br /&gt;
             Documentation at: /docs/config/valve.html --&amp;gt;&lt;br /&gt;
        &amp;lt;!--&lt;br /&gt;
        &amp;lt;Valve className=&amp;quot;org.apache.catalina.authenticator.SingleSignOn&amp;quot; /&amp;gt;&lt;br /&gt;
        --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- Access log processes all example.&lt;br /&gt;
             Documentation at: /docs/config/valve.html&lt;br /&gt;
             Note: The pattern used is equivalent to using pattern=&amp;quot;common&amp;quot; --&amp;gt;&lt;br /&gt;
        &amp;lt;Valve className=&amp;quot;org.apache.catalina.valves.AccessLogValve&amp;quot; directory=&amp;quot;logs&amp;quot;&lt;br /&gt;
               prefix=&amp;quot;localhost_access_log&amp;quot; suffix=&amp;quot;.txt&amp;quot;&lt;br /&gt;
               pattern=&amp;quot;%h %l %u %t &amp;amp;quot;%r&amp;amp;quot; %s %b&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;/Host&amp;gt;&lt;br /&gt;
    &amp;lt;/Engine&amp;gt;&lt;br /&gt;
  &amp;lt;/Service&amp;gt;&lt;br /&gt;
&amp;lt;/Server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=创建docker-compose.yml=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
4.1、在compose_nginx_tomcat目录下创建docker-compose.yml&lt;br /&gt;
&lt;br /&gt;
vi docker-compose.yml&lt;br /&gt;
&lt;br /&gt;
# 指定服务版本号&lt;br /&gt;
version: &amp;#039;3&amp;#039;&lt;br /&gt;
# 服务&lt;br /&gt;
services:&lt;br /&gt;
# 服务名称&lt;br /&gt;
  nginx:&lt;br /&gt;
# 指定服务容器名字&lt;br /&gt;
    hostname: nginx&lt;br /&gt;
# 构建&lt;br /&gt;
    build:&lt;br /&gt;
# 指定目录上下文构建镜像&lt;br /&gt;
      context: ./nginx&lt;br /&gt;
# 指定dockerfile文件名称&lt;br /&gt;
      dockerfile: Dockerfile&lt;br /&gt;
# 映射数组级的端口&lt;br /&gt;
    ports:&lt;br /&gt;
      - 80:80&lt;br /&gt;
# 映射服务别名&lt;br /&gt;
    links:&lt;br /&gt;
      - tomcat01:tomcat01&lt;br /&gt;
      - tomcat02:tomcat02&lt;br /&gt;
      - tomcat03:tomcat03&lt;br /&gt;
# 映射服务数据卷路径&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./webapps:/opt/webapps&lt;br /&gt;
# 启动依赖，按顺序启动服务&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - mysql&lt;br /&gt;
      - tomcat01&lt;br /&gt;
      - tomcat02&lt;br /&gt;
      - tomcat03&lt;br /&gt;
&lt;br /&gt;
# 服务名称&lt;br /&gt;
  tomcat01:&lt;br /&gt;
# 指定服务容器名字&lt;br /&gt;
    hostname: tomcat01&lt;br /&gt;
# 指定目录上下文构建镜像&lt;br /&gt;
    build: ./tomcat&lt;br /&gt;
# 映射服务别名&lt;br /&gt;
    links:&lt;br /&gt;
      - mysql:mysql-db&lt;br /&gt;
# 映射服务数据卷路径  可见 有mount 后 只改变母机的不用rebuild 了 方便程序哥作自己的开发环境喽&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./webapps:/usr/local/apache-tomcat-8.5.42/webapps&lt;br /&gt;
&lt;br /&gt;
# 服务名称&lt;br /&gt;
  tomcat02:&lt;br /&gt;
# 指定服务容器名字&lt;br /&gt;
    hostname: tomcat02&lt;br /&gt;
# 指定目录上下文构建镜像&lt;br /&gt;
    build: ./tomcat&lt;br /&gt;
# 映射服务别名&lt;br /&gt;
    links:&lt;br /&gt;
      - mysql:mysql-db&lt;br /&gt;
# 映射服务数据卷路径&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./webapps:/usr/local/apache-tomcat-8.5.42/webapps&lt;br /&gt;
&lt;br /&gt;
# 服务名称&lt;br /&gt;
  tomcat03:&lt;br /&gt;
# 指定服务容器名字&lt;br /&gt;
    hostname: tomcat03&lt;br /&gt;
# 指定目录上下文构建镜像&lt;br /&gt;
    build: ./tomcat&lt;br /&gt;
# 映射服务别名&lt;br /&gt;
    links:&lt;br /&gt;
      - mysql:mysql-db&lt;br /&gt;
# 映射服务数据卷路径&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./webapps:/usr/local/apache-tomcat-8.5.42/webapps&lt;br /&gt;
&lt;br /&gt;
# 服务名称&lt;br /&gt;
  mysql:&lt;br /&gt;
# 指定服务容器名字&lt;br /&gt;
    hostname: mysql&lt;br /&gt;
# 指定服务容器名字&lt;br /&gt;
    image: mysql:5.6&lt;br /&gt;
# 映射数组级的端口&lt;br /&gt;
    ports:&lt;br /&gt;
      - 3306:3306&lt;br /&gt;
# 映射服务数据卷路径&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./mysql/conf:/etc/mysql/conf.d&lt;br /&gt;
      - ./mysql/data:/var/lib/mysql&lt;br /&gt;
# 指定数据库变量&lt;br /&gt;
    environment:&lt;br /&gt;
# 设置数据库密码&lt;br /&gt;
      MYSQL_ROOT_PASSWORD: 123456&lt;br /&gt;
# 添加user用户&lt;br /&gt;
      MYSQL_USER: user&lt;br /&gt;
# 设置user用户密码&lt;br /&gt;
      MYSQL_PASSWORD: user123&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==web home 编写测试页面==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[root@work2 compose_nginx_tomcat]# pwd&lt;br /&gt;
/root/compose_nginx_tomcat&lt;br /&gt;
tomcat]# mkdir -p webapps/ROOT/&lt;br /&gt;
[root@work2 compose_nginx_tomcat]# vi webapps/ROOT/index.jsp&lt;br /&gt;
&lt;br /&gt;
java *********&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==run  执行dockerCompose 一键部署Nginx代理Tomcat集群==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# pwd&lt;br /&gt;
/root/compose_nginx_tomcat&lt;br /&gt;
&lt;br /&gt;
# 管理目录下compose_nginx_tomcat 执行该命令 -d 后台运行&lt;br /&gt;
docker-compose up -d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=测试容器服务=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
5.1、查看启动状态终端输出&lt;br /&gt;
&lt;br /&gt;
Creating compose_nginx_tomcat_mysql_1 ... done&lt;br /&gt;
Creating compose_nginx_tomcat_tomcat03_1 ... done&lt;br /&gt;
Creating compose_nginx_tomcat_tomcat02_1 ... done&lt;br /&gt;
Creating compose_nginx_tomcat_tomcat01_1 ... done&lt;br /&gt;
Creating compose_nginx_tomcat_nginx_1 ... done&lt;br /&gt;
&lt;br /&gt;
#5.2、查看后台运行容器&lt;br /&gt;
 docker-compose ps&lt;br /&gt;
             Name                            Command               State           Ports         &lt;br /&gt;
-------------------------------------------------------------------------------------------------&lt;br /&gt;
compose_nginx_tomcat_mysql_1      docker-entrypoint.sh mysqld      Up      0.0.0.0:3306-&amp;gt;3306/tcp&lt;br /&gt;
compose_nginx_tomcat_nginx_1      /usr/local/nginx/sbin/ngin ...   Up      0.0.0.0:80-&amp;gt;80/tcp    &lt;br /&gt;
compose_nginx_tomcat_tomcat01_1   /usr/local/apache-tomcat-8 ...   Up      8080/tcp              &lt;br /&gt;
compose_nginx_tomcat_tomcat02_1   /usr/local/apache-tomcat-8 ...   Up      8080/tcp              &lt;br /&gt;
compose_nginx_tomcat_tomcat03_1   /usr/local/apache-tomcat-8 ...   Up      8080/tcp    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==测试数据库==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker ps &lt;br /&gt;
a00837c4cc53        mysql:5.6                       &amp;quot;docker-entrypoint.s…&amp;quot;   About a minute ago   Up About a minute   0.0.0.0:3306-&amp;gt;3306/tcp   compose_nginx_tomcat_mysql_1&lt;br /&gt;
&lt;br /&gt;
1.&lt;br /&gt;
docker container exec -it a00837c4cc53 /bin/bash&lt;br /&gt;
&lt;br /&gt;
mysql  -uroot -p&amp;#039;123456&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# 2、直接进入数据库,母机安装mysql client 但是不要安装mysql service &lt;br /&gt;
mysql -h192.168.88.22 -uroot -p123456&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==浏览器测试nginx代理tomcat==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
打开浏览器 &lt;br /&gt;
evan@latop:~/docker$ curl   192.168.88.22&lt;br /&gt;
java **&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# 1、进入nginx管理界面&lt;br /&gt;
docker container exec -it e7c9152c93ac /bin/bash&lt;br /&gt;
&lt;br /&gt;
# 2、查看输出日志测试轮询代理&lt;br /&gt;
root@nginx:/# tail /usr/local/nginx/logs/access.log -f&lt;br /&gt;
172.19.0.4:8080 192.168.88.4 - - [08/Jul/2019:12:35:24 +0000] &amp;quot;GET / HTTP/1.1&amp;quot; 200 17 &amp;quot;-&amp;quot; &amp;quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36&amp;quot; &amp;quot;-&amp;quot;&lt;br /&gt;
172.19.0.3:8080 192.168.88.4 - - [08/Jul/2019:12:35:25 +0000] &amp;quot;GET /favicon.ico HTTP/1.1&amp;quot; 404 1085 &amp;quot;http://192.168.88.22/&amp;quot; &amp;quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36&amp;quot; &amp;quot;-&amp;quot;&lt;br /&gt;
172.19.0.5:8080 192.168.88.4 - - [08/Jul/2019:12:35:52 +0000] &amp;quot;GET / HTTP/1.0&amp;quot; 200 17 &amp;quot;-&amp;quot; &amp;quot;w3m/0.5.3+git20190105&amp;quot; &amp;quot;-&amp;quot;&lt;br /&gt;
172.19.0.4:8080 192.168.88.4 - - [08/Jul/2019:12:35:58 +0000] &amp;quot;GET / HTTP/1.1&amp;quot; 200 17 &amp;quot;-&amp;quot; &amp;quot;curl/7.64.0&amp;quot; &amp;quot;-&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=trouble shooting =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1.&lt;br /&gt;
ERROR: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/3e/3ed1080b793fc4a10cab741a04ce090caf1ad2932cbcc679b6587624af9f6157/data?verify=1562587126-TbaoEmAw%2B4kI5NP1AXHRChO0mBM%3D: read tcp 192.168.88.22:54860-&amp;gt;104.18.121.25:443: read: connection reset by peer&lt;br /&gt;
&lt;br /&gt;
nameserver 8.8.4.4&lt;br /&gt;
&lt;br /&gt;
修改Docker配置文件/etc/default/docker如下：&lt;br /&gt;
&lt;br /&gt;
DOCKER_OPTS=&amp;quot;--registry-mirror=http://aad0405c.m.daocloud.io&amp;quot;&lt;br /&gt;
使用service docker restart重启Docker服务即可。&lt;br /&gt;
&lt;br /&gt;
现在使用docker pull拉取镜像真是特别爽，速度很快，再次感谢DaoCloud公司&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. nginx &lt;br /&gt;
E: Unable to locate package gcc&lt;br /&gt;
E: Unable to locate package gcc&lt;br /&gt;
E: Unable to locate package make&lt;br /&gt;
E: Unable to locate package openssl&lt;br /&gt;
E: Unable to locate package libssl-dev&lt;br /&gt;
E: Package &amp;#039;libpcre3-dev&amp;#039; has no installation candidate&lt;br /&gt;
ERROR: Service &amp;#039;nginx&amp;#039; failed to build: The command &amp;#039;/bin/sh -c apt install -y gcc gcc g++ make openssl libssl-dev  libpcre3 libpcre3-dev&amp;#039; returned a non-zero code: 100&lt;br /&gt;
&lt;br /&gt;
要加apt update  &lt;br /&gt;
&lt;br /&gt;
apt 可以改源的呢&lt;br /&gt;
&lt;br /&gt;
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
#注意&lt;br /&gt;
# 添加解压nginx包到/tmp目录下 自带了解压功能了哦 老是一时忘记&lt;br /&gt;
ADD nginx-1.12.1.tar.gz /tmp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
debian nginx &lt;br /&gt;
https://github.com/nginxinc/docker-nginx/tree/9a052e07b2c283df9960375ee40be50c5c462a7e/stable/stretch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=see also=&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/xiangsikai/p/9850425.html Docker Compose 一键部署Nginx代理Tomcat集群]&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/mushou/p/9537846.html docker-compose入门示例：一键部署 Nginx+Tomcat+Mysql]&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/weixin_38589021/article/details/80198390 Docker Compose 运行 Tomcat 和Mysql]&lt;br /&gt;
&lt;br /&gt;
[https://gitee.com/wuweixiang/javaweb-compose/blob/master/docker-compose.yml 使用docker-compose定制Javaweb环境:tomcat、jre、mysql、activemq、redis]&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/dandandeshangni/article/details/79771538 Docker Compose+nginx实现负载均衡 spring]&lt;br /&gt;
&lt;br /&gt;
[[category:Container]] [[category:compose]]&lt;/div&gt;</summary>
		<author><name>Evan</name></author>
	</entry>
</feed>