Docker tomcat

来自linux中国网wiki
跳到导航 跳到搜索

docker tomcat

on debian

目录


tomcat]# tree .
.
|-- apache-tomcat-8.5.42.tar.gz
|-- Dockerfile
|-- index.jsp
|-- jdk-8u211-linux-x64.tar.gz
|-- server.xml
|-- webapps
|   `-- ROOT
|       `-- index.jsp
`-- web.xml


cat index.jsp 
version: 1


docker build -t evan886/debian_tomcat:v1  .

docker push evan886/debian_tomcat:v1 

docker.io/evan886/debian_tomcat


单个运行

docker images 
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
evan886/debian_tomcat   v1                  51e36d5593e1        2 minutes ago       521MB

docker run -p 8081:8080 evan886/debian_tomcat:v1




dockerfile

cat >>  Dockerfile  <<EOF

FROM debian:stretch
#FROM debian:stretch-slim
# 指定管理员
MAINTAINER  linuxsa.org
# 解压jdk包到指定目录
ADD jdk-8u211-linux-x64.tar.gz /usr/local
# 安装jdk包到指定目录
ENV JAVA_HOME /usr/local/jdk1.8.0_211

# http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
# 解压tomcat包到指定目录
ADD apache-tomcat-8.5.42.tar.gz /usr/local

#RUN rm -f /usr/local/*.tar.gz            #删除安装包 容器轻量化
RUN rm -rf /usr/local/apache-tomcat-8.5.42/webapps/ROOT/*
RUN rm -rf /usr/local/apache-tomcat-8.5.42/webapps/ROOT/index.jsp
# 将本地配置文件复制到镜像内
#
#COPY server.xml /usr/local/apache-tomcat-8.5.42/conf
#COPY webapps /usr/local/apache-tomcat-8.5.42/
ADD  index.jsp  /usr/local/apache-tomcat-8.5.42/webapps/ROOT/
COPY  index.jsp  /usr/local/apache-tomcat-8.5.42/webapps/ROOT/
#/usr/local/apache-tomcat-8.5.42/webapps/ROOT
#RUN rm -rf /usr/local/apache-tomcat-8.5.42/webapps/ROOT/*
# 指定服务暴露端口
EXPOSE 8080
# 启动tomcat服务
ENTRYPOINT ["/usr/local/apache-tomcat-8.5.42/bin/catalina.sh", "run"]
EOF

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="8005" 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="150" minSpareThreads="4"/>
    -->


    <!-- 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="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- 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="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


    <!-- 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 "%r" %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>





很值得参考 更新也有意思docker&k8s部署tomcat记录

docker hub

docker pull  tomcat:8.5

docker exec -it tomcat1 /bin/bash

三、部署应用

部署应用有两种方式:
1、挂载宿主主机上的应用目录

假如我们的应用在目录:/Users/apple/webapp目录下

docker run --privileged=true -v /data/web1:/usr/local/tomcat/webapps/demo -d -p 8080:8080 --name tomcat1 tomcat:8.5

    其中:–privileged=true是授予docker挂载的权限
    /data/web1 宿主主机目录
    /usr/local/tomcat/webapps/demo docker容器tomcat目录
    -p 端口映射
    –name 容器名称


old Docker使用Dockerfile创建Centos(tomcat+jdk)镜像


[root@localhost apps]# ls 
 Dockerfile  jdk  jdk-12.0.1_linux-x64_bin.tar.gz   tomcat 


 cat  Dockerfile 
#指定操作的镜像
FROM centos
# 维护者信息
MAINTAINER [email protected]
 
#执行命令:创建目录
RUN mkdir -p /data/apps/
#将jdk1.8.0_171添加到镜像centos的/usr/local/soft/目录下,并命名为jdk
ADD jdk /data/apps/
#将apache-tomcat-8.5.31添加到镜像centos的/usr/local/soft/目录下,并命名为tomcat
ADD tomcat  /data/apps/
 
#添加环境变量
ENV JAVA_HOME /data/apps/jdk
#ENV CATALINA_HOME /data/apps/tomcat
#ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

#tomcat evan
ENV CATALINA_HOME /data/apps/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
#ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
# let "Tomcat Native" live somewhere isolated
# ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
# ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR
 
#暴露8080端口
EXPOSE 8080
 
#启动时运行tomcat
#CMD ["/data/apps/tomcat/bin/catalina.sh","run"]
CMD ["/data/apps/tomcat/catalina.sh","run"]

docker build -t evan886/centos_tomcat:v1  .

docker run -d -p 8080:8080 --name  centos_tomcat evan886/centos_tomcat:v1

ot@k8s-node1:/data/apps# docker run -d -p 8080:8080 --name  centos_tomcat evan886/centos_tomcat:v1
6156c685fb3369d5d93ab391a75212b14b476959a38eef746871f4890021a53b
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/data/apps/tomcat/bin/catalina.sh\": stat /data/apps/tomcat/bin/catalina.sh: no such file or directory": unknown.



Docker使用Dockerfile创建Centos(tomcat+jdk)镜像

Dockerfile 构建


#创建目录tomcat,用于存放后面的相关东西。
mkdir -p ~/tomcat/webapps ~/tomcat/logs ~/tomcat/conf

webapps目录将映射为tomcat容器配置的应用程序目录
logs目录将映射为tomcat容器的日志目录
conf目录里的配置文件将映射为tomcat容器的配置文件

进入创建的tomcat目录,创建Dockerfile

FROM openjdk:8-jre

ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME

# let "Tomcat Native" live somewhere isolated
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR

# runtime dependencies for Tomcat Native Libraries
# Tomcat Native 1.2+ requires a newer version of OpenSSL than debian:jessie has available
# > checking OpenSSL library version >= 1.0.2...
# > configure: error: Your version of OpenSSL is not compatible with this version of tcnative
# see http://tomcat.10.x6.nabble.com/VOTE-Release-Apache-Tomcat-8-0-32-tp5046007p5046024.html (and following discussion)
# and https://github.com/docker-library/tomcat/pull/31
ENV OPENSSL_VERSION 1.1.0f-3+deb9u2
RUN set -ex; \
    currentVersion="$(dpkg-query --show --showformat '${Version}\n' openssl)"; \
    if dpkg --compare-versions "$currentVersion" '<<' "$OPENSSL_VERSION"; then \
        if ! grep -q stretch /etc/apt/sources.list; then \
# only add stretch if we're not already building from within stretch
            { \
                echo 'deb http://deb.debian.org/debian stretch main'; \
                echo 'deb http://security.debian.org stretch/updates main'; \
                echo 'deb http://deb.debian.org/debian stretch-updates main'; \
            } > /etc/apt/sources.list.d/stretch.list; \
            { \
# add a negative "Pin-Priority" so that we never ever get packages from stretch unless we explicitly request them
                echo 'Package: *'; \
                echo 'Pin: release n=stretch*'; \
                echo 'Pin-Priority:

更新

war包更新到容器

docker cp tomcataDemo.war 3cb492a27475 :/usr/local/tomcat/webapps #id

docker cp tomcatDemo.war tomcat1:/usr/local/tomcat/webapps  #name

#启动tomcat 或者重启 docker restart 【容器id】


docker restart    tomcat1

docker run -p 8081:8080 docker.io/tomcat


#cp 到母机
docker cp tomcat1:/usr/local/tomcat/webapps/examples/index.html .


tomcat 欢迎页面在  webapps/ROOT

第二种 写在dockerfile 然后重build 

from docker.io/tomcat:latest #你的 tomcat的镜像
 MAINTAINER [email protected] #作者 
COPY NginxDemo.war /usr/local/tomcat/webapps #放置到tomcat的webapps目录下


volume

see also

很值得参考docker&k8s部署tomcat记录

Docker部署Tomcat及Web应用

https://docs.docker.com/samples/library/tomcat/

Docker 安装 Tomcat

Docker部署(三):Apache Tomcat

官方8.5dockerfile

docker容器下运行tomcat、部署应用


Docker部署Tomcat及Web应用


使用Docker运行Java Web应用