├── docker ├── httpd │ ├── workers.properties │ ├── run-httpd.sh │ ├── mod_jk.conf │ └── Dockerfile └── tomcat │ ├── Dockerfile │ └── tomcat-users.xml ├── src └── main │ ├── resources │ └── log4j.properties │ ├── webapp │ └── WEB-INF │ │ └── web.xml │ └── java │ └── com │ └── maeharin │ └── HelloServlet.java ├── docker-compose.yml ├── README.md ├── .gitignore └── pom.xml /docker/httpd/workers.properties: -------------------------------------------------------------------------------- 1 | worker.list=tomcat-worker 2 | 3 | worker.tomcat-worker.type=ajp13 4 | worker.tomcat-worker.host=tomcat 5 | worker.tomcat-worker.port=8009 6 | -------------------------------------------------------------------------------- /docker/tomcat/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM tomcat:7-jre8 2 | 3 | ADD tomcat-users.xml /usr/local/tomcat/conf/ 4 | 5 | RUN rm -rf /usr/local/tomcat/webapps/ROOT 6 | 7 | CMD ["catalina.sh", "run"] 8 | -------------------------------------------------------------------------------- /src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | ### direct log messages to stdout ### 2 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3 | log4j.appender.stdout.Target=System.out 4 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern=%d %5p %c{1} - %m%n 6 | 7 | log4j.rootLogger=debug, stdout -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | httpd: 5 | container_name: httpd-container 6 | build: ./docker/httpd 7 | ports: 8 | - "80:80" 9 | tomcat: 10 | container_name: tomcat-container 11 | build: ./docker/tomcat 12 | volumes: 13 | - ./target/ROOT.war:/usr/local/tomcat/webapps/ROOT.war 14 | expose: 15 | - "8009" 16 | -------------------------------------------------------------------------------- /docker/httpd/run-httpd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # https://github.com/CentOS/CentOS-Dockerfiles/blob/master/httpd/centos7/run-httpd.sh 4 | 5 | 6 | # Make sure we're not confused by old, incompletely-shutdown httpd 7 | # context after restarting the container. httpd won't start correctly 8 | # if it thinks it is already running. 9 | rm -rf /run/httpd/* /tmp/httpd* 10 | 11 | exec /usr/sbin/apachectl -DFOREGROUND 12 | -------------------------------------------------------------------------------- /docker/httpd/mod_jk.conf: -------------------------------------------------------------------------------- 1 | # load mod_jk binary 2 | LoadModule jk_module modules/mod_jk.so 3 | 4 | # workers.properties location 5 | JkWorkersFile /etc/httpd/conf.d/workers.properties 6 | 7 | # url to worker mount 8 | JkMount /* tomcat-worker 9 | 10 | # log settings 11 | JkLogFile /var/log/httpd/mod_jk.log 12 | JkLogLevel warn 13 | JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" 14 | JkRequestLogFormat "%w %V %T" 15 | 16 | # JkOptions indicate to send SSL KEY SIZE, 17 | JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories 18 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | Archetype Created Web Application 7 | 8 | HelloServlet 9 | HelloServlet 10 | 11 | com.maeharin.HelloServlet 12 | 13 | 14 | HelloServlet 15 | /* 16 | 17 | 18 | -------------------------------------------------------------------------------- /docker/tomcat/tomcat-users.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # apache-tomcat-docker-sample 2 | 3 | - docker sample 4 | - apache(mod_jk) => tomcat => servlet 5 | 6 | ## dependencies 7 | 8 | - virtualbox 9 | - docker 10 | - docker-machine 11 | - docker-compose >= 1.6.0 12 | 13 | must use docker-compose >= 1.6.0. because we use version 2 of the Compose file format. 14 | 15 | see: https://blog.docker.com/2016/02/compose-1-6/ 16 | 17 | ## how to use 18 | 19 | ``` 20 | $ docker-machine create --driver virtualbox apache-tomcat-docker-sample 21 | ``` 22 | 23 | ``` 24 | $ eval "$(docker-machine env apache-tomcat-docker-sample)" 25 | $ docker-compose up 26 | ``` 27 | 28 | ``` 29 | $ mvn clean package 30 | ``` 31 | 32 | then, access browser 33 | 34 | - http://{ip}/ 35 | 36 | ip is 37 | 38 | ``` 39 | $ docker-machine ip apache-tomcat-docker-sample 40 | ``` 41 | 42 | ## tips 43 | 44 | ``` 45 | $ docker exec -it httpd-container /bin/bash 46 | $ docker exec -it tomcat-container /bin/bash 47 | ``` 48 | -------------------------------------------------------------------------------- /docker/httpd/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | 3 | RUN yum -y update && yum clean all 4 | RUN yum -y install httpd httpd-devel gcc* make && yum clean all 5 | 6 | # Install mod_jk 7 | RUN curl -SL http://mirror.sdunix.com/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz -o tomcat-connectors-1.2.40-src.tar.gz \ 8 | && mkdir -p src/tomcat-connectors \ 9 | && tar xzf tomcat-connectors-1.2.40-src.tar.gz -C src/tomcat-connectors --strip-components=1 \ 10 | && cd src/tomcat-connectors/native/ \ 11 | && ./configure --with-apxs=/usr/bin/apxs \ 12 | && make \ 13 | && cp apache-2.0/mod_jk.so /usr/lib64/httpd/modules/ \ 14 | && ./libtool --finish /usr/lib64/httpd/modules/ \ 15 | && cd / \ 16 | && rm -rf src/ \ 17 | && rm -f tomcat-connectors-1.2.40-src.tar.gz 18 | 19 | 20 | # mod_jk conf files 21 | ADD mod_jk.conf /etc/httpd/conf.d/ 22 | ADD workers.properties /etc/httpd/conf.d/ 23 | 24 | EXPOSE 80 25 | 26 | # Simple startup script to avoid some issues observed with container restart 27 | ADD run-httpd.sh /run-httpd.sh 28 | RUN chmod -v +x /run-httpd.sh 29 | 30 | CMD ["/run-httpd.sh"] 31 | -------------------------------------------------------------------------------- /src/main/java/com/maeharin/HelloServlet.java: -------------------------------------------------------------------------------- 1 | package com.maeharin; 2 | 3 | import java.io.IOException; 4 | import java.util.HashMap; 5 | import java.util.regex.Matcher; 6 | import java.util.regex.Pattern; 7 | 8 | import javax.servlet.ServletException; 9 | import javax.servlet.http.HttpServlet; 10 | import javax.servlet.http.HttpServletRequest; 11 | import javax.servlet.http.HttpServletResponse; 12 | 13 | import org.slf4j.Logger; 14 | import org.slf4j.LoggerFactory; 15 | 16 | import java.io.IOException; 17 | import java.io.PrintWriter; 18 | 19 | public class HelloServlet extends HttpServlet { 20 | private static final long serialVersionUID = 1L; 21 | private static Logger log = LoggerFactory.getLogger(HelloServlet.class); 22 | 23 | public HelloServlet() { 24 | } 25 | 26 | @Override 27 | public void init() { 28 | log.debug("servlet init..."); 29 | } 30 | 31 | @Override 32 | protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 33 | log.debug("servlet service..."); 34 | PrintWriter out = response.getWriter(); 35 | out.println("hello"); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ----------------------------------------------- 2 | # java 3 | # https://github.com/github/gitignore/blob/master/Java.gitignore 4 | # ----------------------------------------------- 5 | 6 | *.class 7 | 8 | # Mobile Tools for Java (J2ME) 9 | .mtj.tmp/ 10 | 11 | # Package Files # 12 | *.jar 13 | *.war 14 | *.ear 15 | 16 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 17 | hs_err_pid* 18 | 19 | # ----------------------------------------------- 20 | # eclipse 21 | # https://github.com/github/gitignore/blob/master/Global/Eclipse.gitignore 22 | # ----------------------------------------------- 23 | 24 | *.pydevproject 25 | .metadata 26 | .gradle 27 | bin/ 28 | tmp/ 29 | *.tmp 30 | *.bak 31 | *.swp 32 | *~.nib 33 | local.properties 34 | .settings/ 35 | .loadpath 36 | 37 | # Eclipse Core 38 | .project 39 | 40 | # External tool builders 41 | .externalToolBuilders/ 42 | 43 | # Locally stored "Eclipse launch configurations" 44 | *.launch 45 | 46 | # CDT-specific 47 | .cproject 48 | 49 | # JDT-specific (Eclipse Java Development Tools) 50 | .classpath 51 | 52 | # PDT-specific 53 | .buildpath 54 | 55 | # sbteclipse plugin 56 | .target 57 | 58 | # TeXlipse plugin 59 | .texlipse 60 | 61 | # ----------------------------------------------- 62 | # maven 63 | # https://github.com/github/gitignore/blob/master/Maven.gitignore 64 | # ----------------------------------------------- 65 | target/ 66 | pom.xml.tag 67 | pom.xml.releaseBackup 68 | pom.xml.versionsBackup 69 | pom.xml.next 70 | release.properties 71 | dependency-reduced-pom.xml 72 | buildNumber.properties 73 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | com.maeharin 5 | apache-tomcat-docker-sample 6 | war 7 | 0.0.1 8 | apache-tomcat-docker-sample 9 | http://maven.apache.org 10 | 11 | 12 | junit 13 | junit 14 | 4.4 15 | test 16 | 17 | 18 | javax.servlet 19 | javax.servlet-api 20 | 3.1.0 21 | provided 22 | 23 | 24 | org.slf4j 25 | slf4j-api 26 | 1.7.6 27 | jar 28 | 29 | 30 | org.slf4j 31 | slf4j-simple 32 | 1.7.7 33 | test 34 | 35 | 36 | org.slf4j 37 | slf4j-log4j12 38 | 1.7.12 39 | 40 | 41 | 42 | ROOT 43 | 44 | 45 | org.apache.maven.plugins 46 | maven-compiler-plugin 47 | 3.1 48 | 49 | UTF-8 50 | 1.8 51 | 1.8 52 | 53 | 54 | 55 | 56 | 57 | --------------------------------------------------------------------------------