├── 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 |
--------------------------------------------------------------------------------