• docker学习笔记-3.docker镜像制作


     

     

    制作jdk1.8的基础镜像

    DockerFile文件

    设置 java的环境变量

     1 #JDK 7 base centos7.5 1804
     2 FROM centos-base:v1
     3 MAINTAINER hexintong 137841632@qq.com
     4 ADD jdk-8u131-linux-x64.tar.gz  /usr/local/src/
     5 RUN ln -sv /usr/local/src/jdk1.8.0_131          /usr/local/jdk
     6 ADD profile /etc/profile
     7 ENV JAVA_HOME /usr/local/jdk
     8 ENV JRE_HOME $JAVA_HOME/jre
     9 ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
    10 ENV PATH $PATH:$JAVA_HOME/bin
    11 RUN ln -snf  /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" >/etc/timezone

    查看 profile 文件

     1 # Path manipulation
     2 if [ "$EUID" = "0" ]; then
     3     pathmunge /usr/sbin
     4     pathmunge /usr/local/sbin
     5 else
     6     pathmunge /usr/local/sbin after
     7     pathmunge /usr/sbin after
     8 fi
     9 
    10 HOSTNAME=`/usr/bin/hostname 2>/dev/null`
    11 HISTSIZE=1000
    12 if [ "$HISTCONTROL" = "ignorespace" ] ; then
    13     export HISTCONTROL=ignoreboth
    14 else
    15     export HISTCONTROL=ignoredups
    16 fi
    17 
    18 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
    19 
    20 # By default, we want umask to get set. This sets it for login shell
    21 # Current threshold for system reserved uid/gids is 200
    22 # You could check uidgid reservation validity in
    23 # /usr/share/doc/setup-*/uidgid file
    24 if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    25     umask 002
    26 else
    27     umask 022
    28 fi
    29 
    30 for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    31     if [ -r "$i" ]; then
    32         if [ "${-#*i}" != "$-" ]; then
    33             . "$i"
    34         else
    35             . "$i" >/dev/null
    36         fi
    37     fi
    38 done
    39 
    40 unset i
    41 unset -f pathmunge
    42 export JAVA_HOME=/usr/local/jdk
    43 export JRE_HOME=$JAVA_HOME/jre
    44 export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
    45 export PATH=$PATH:$JAVA_HOME/bin
    profile

    [root@localhost jdk1.8]# cat build-commad.sh

    1 #!/bin/bash
    2 docker build -t jdk1.8:v1 .

     制作tomcate 基础镜像

    查看Dockerfile 文件

    1 #tomcate 8.0.49
    2 FROM jdk1.8:v1
    3 MAINTAINER hexintong 137841632@qq.com
    4 ADD  apache-tomcat-8.0.49.tar.gz /apps/
    5 RUN ln -sv /apps/apache-tomcat-8.0.49 /apps/tomcat
    6 RUN useradd www -u 2000

    制作tomcat业务镜像

    查看 Dockerfile 文件

     1 #tomcate 8.0.49
     2 FROM tomcat-base:v1
     3 MAINTAINER hexintong 137841632@qq.com
     4 #ADD index.html /apps/tomcat/webapp/
     5 ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
     6 ADD catalina.sh  /apps/tomcat/bin/catalina.sh
     7 ADD server.xml  /apps/tomcat/conf/server.xml
     8 RUN mkdir -p /data/webapps/myapp/
     9 ADD myapp/* /data/webapps/myapp/
    10 RUN echo "tomcat appo2" >/data/webapps/index.html
    11 RUN chown www.www /apps/  /data/ -R
    12 CMD ["/apps/tomcat/bin/run_tomcat.sh"]
    13 EXPOSE 8080 8009
    Dockerfile

    查看run_tomcat.sh文件

    1 #!/bin/bash
    2 su - www -c "/apps/tomcat/bin/catalina.sh start"
    3 su - www  -c "tail -f /etc/hosts"
    run_tomcat.sh

    查看catalina.sh文件

      1 #!/bin/sh
      2 
      3 # Licensed to the Apache Software Foundation (ASF) under one or more
      4 # contributor license agreements.  See the NOTICE file distributed with
      5 # this work for additional information regarding copyright ownership.
      6 # The ASF licenses this file to You under the Apache License, Version 2.0
      7 # (the "License"); you may not use this file except in compliance with
      8 # the License.  You may obtain a copy of the License at
      9 #
     10 #     http://www.apache.org/licenses/LICENSE-2.0
     11 #
     12 # Unless required by applicable law or agreed to in writing, software
     13 # distributed under the License is distributed on an "AS IS" BASIS,
     14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15 # See the License for the specific language governing permissions and
     16 # limitations under the License.
     17 
     18 # -----------------------------------------------------------------------------
     19 # Control Script for the CATALINA Server
     20 #
     21 # Environment Variable Prerequisites
     22 #
     23 #   Do not set the variables in this script. Instead put them into a script
     24 #   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.
     25 #
     26 #   CATALINA_HOME   May point at your Catalina "build" directory.
     27 #
     28 #   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
     29 #                   of a Catalina installation.  If not present, resolves to
     30 #                   the same directory that CATALINA_HOME points to.
     31 #
     32 #   CATALINA_OUT    (Optional) Full path to a file where stdout and stderr
     33 #                   will be redirected.
     34 #                   Default is $CATALINA_BASE/logs/catalina.out
     35 #
     36 #   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
     37 #                   "run" or "debug" command is executed.
     38 #                   Include here and not in JAVA_OPTS all options, that should
     39 #                   only be used by Tomcat itself, not by the stop process,
     40 #                   the version command etc.
     41 #                   Examples are heap size, GC logging, JMX ports etc.
     42 #
     43 #   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
     44 #                   the JVM should use (java.io.tmpdir).  Defaults to
     45 #                   $CATALINA_BASE/temp.
     46 #
     47 #   JAVA_HOME       Must point at your Java Development Kit installation.
     48 #                   Required to run the with the "debug" argument.
     49 #
     50 #   JRE_HOME        Must point at your Java Runtime installation.
     51 #                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
     52 #                   are both set, JRE_HOME is used.
     53 #
     54 #   JAVA_OPTS       (Optional) Java runtime options used when any command
     55 #                   is executed.
     56 #                   Include here and not in CATALINA_OPTS all options, that
     57 #                   should be used by Tomcat and also by the stop process,
     58 #                   the version command etc.
     59 #                   Most options should go into CATALINA_OPTS.
     60 #
     61 #   JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories
     62 #                   containing some jars in order to allow replacement of APIs
     63 #                   created outside of the JCP (i.e. DOM and SAX from W3C).
     64 #                   It can also be used to update the XML parser implementation.
     65 #                   Note that Java 9 no longer supports this feature.
     66 #                   Defaults to $CATALINA_HOME/endorsed.
     67 #
     68 #   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
     69 #                   command is executed. The default is "dt_socket".
     70 #
     71 #   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
     72 #                   command is executed. The default is localhost:8000.
     73 #
     74 #   JPDA_SUSPEND    (Optional) Java runtime options used when the "jpda start"
     75 #                   command is executed. Specifies whether JVM should suspend
     76 #                   execution immediately after startup. Default is "n".
     77 #
     78 #   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
     79 #                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
     80 #                   and JPDA_SUSPEND are ignored. Thus, all required jpda
     81 #                   options MUST be specified. The default is:
     82 #
     83 #                   -agentlib:jdwp=transport=$JPDA_TRANSPORT,
     84 #                       address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
     85 #
     86 #   JSSE_OPTS       (Optional) Java runtime options used to control the TLS
     87 #                   implementation when JSSE is used. Default is:
     88 #                   "-Djdk.tls.ephemeralDHKeySize=2048"
     89 #
     90 #   CATALINA_PID    (Optional) Path of the file which should contains the pid
     91 #                   of the catalina startup java process, when start (fork) is
     92 #                   used
     93 #
     94 #   LOGGING_CONFIG  (Optional) Override Tomcat's logging config file
     95 #                   Example (all one line)
     96 #                   LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
     97 #
     98 #   LOGGING_MANAGER (Optional) Override Tomcat's logging manager
     99 #                   Example (all one line)
    100 #                   LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
    101 #
    102 #   USE_NOHUP       (Optional) If set to the string true the start command will
    103 #                   use nohup so that the Tomcat process will ignore any hangup
    104 #                   signals. Default is "false" unless running on HP-UX in which
    105 #                   case the default is "true"
    106 # -----------------------------------------------------------------------------
    107 JAVA_OPTS="-server -Xms4g -Xmx4g -Xss512k -Xmn1g -XX:CMSInitiatingOccupancyFraction=65  -XX:+UseFastAccessorMethods -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 -XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2 -XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods"
    108 
    109 # OS specific support.  $var _must_ be set to either true or false.
    110 cygwin=false
    111 darwin=false
    112 os400=false
    113 hpux=false
    114 case "`uname`" in
    115 CYGWIN*) cygwin=true;;
    116 Darwin*) darwin=true;;
    117 OS400*) os400=true;;
    118 HP-UX*) hpux=true;;
    119 esac
    120 
    121 # resolve links - $0 may be a softlink
    122 PRG="$0"
    123 
    124 while [ -h "$PRG" ]; do
    125   ls=`ls -ld "$PRG"`
    126   link=`expr "$ls" : '.*-> (.*)$'`
    127   if expr "$link" : '/.*' > /dev/null; then
    128     PRG="$link"
    129   else
    130     PRG=`dirname "$PRG"`/"$link"
    131   fi
    132 done
    133 
    134 # Get standard environment variables
    135 PRGDIR=`dirname "$PRG"`
    136 
    137 # Only set CATALINA_HOME if not already set
    138 [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
    139 
    140 # Copy CATALINA_BASE from CATALINA_HOME if not already set
    141 [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
    142 
    143 # Ensure that any user defined CLASSPATH variables are not used on startup,
    144 # but allow them to be specified in setenv.sh, in rare case when it is needed.
    145 CLASSPATH=
    146 
    147 if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
    148   . "$CATALINA_BASE/bin/setenv.sh"
    149 elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
    150   . "$CATALINA_HOME/bin/setenv.sh"
    151 fi
    152 
    153 # For Cygwin, ensure paths are in UNIX format before anything is touched
    154 if $cygwin; then
    155   [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
    156   [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`
    157   [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`
    158   [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`
    159   [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
    160 fi
    161 
    162 # Ensure that neither CATALINA_HOME nor CATALINA_BASE contains a colon
    163 # as this is used as the separator in the classpath and Java provides no
    164 # mechanism for escaping if the same character appears in the path.
    165 case $CATALINA_HOME in
    166   *:*) echo "Using CATALINA_HOME:   $CATALINA_HOME";
    167        echo "Unable to start as CATALINA_HOME contains a colon (:) character";
    168        exit 1;
    169 esac
    170 case $CATALINA_BASE in
    171   *:*) echo "Using CATALINA_BASE:   $CATALINA_BASE";
    172        echo "Unable to start as CATALINA_BASE contains a colon (:) character";
    173        exit 1;
    174 esac
    175 
    176 # For OS400
    177 if $os400; then
    178   # Set job priority to standard for interactive (interactive - 6) by using
    179   # the interactive priority - 6, the helper threads that respond to requests
    180   # will be running at the same priority as interactive jobs.
    181   COMMAND='chgjob job('$JOBNAME') runpty(6)'
    182   system $COMMAND
    183 
    184   # Enable multi threading
    185   export QIBM_MULTI_THREADED=Y
    186 fi
    187 
    188 # Get standard Java environment variables
    189 if $os400; then
    190   # -r will Only work on the os400 if the files are:
    191   # 1. owned by the user
    192   # 2. owned by the PRIMARY group of the user
    193   # this will not work if the user belongs in secondary groups
    194   . "$CATALINA_HOME"/bin/setclasspath.sh
    195 else
    196   if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
    197     . "$CATALINA_HOME"/bin/setclasspath.sh
    198   else
    199     echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"
    200     echo "This file is needed to run this program"
    201     exit 1
    202   fi
    203 fi
    204 
    205 # Add on extra jar files to CLASSPATH
    206 if [ ! -z "$CLASSPATH" ] ; then
    207   CLASSPATH="$CLASSPATH":
    208 fi
    209 CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar
    210 
    211 if [ -z "$CATALINA_OUT" ] ; then
    212   CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
    213 fi
    214 
    215 if [ -z "$CATALINA_TMPDIR" ] ; then
    216   # Define the java.io.tmpdir to use for Catalina
    217   CATALINA_TMPDIR="$CATALINA_BASE"/temp
    218 fi
    219 
    220 # Add tomcat-juli.jar to classpath
    221 # tomcat-juli.jar can be over-ridden per instance
    222 if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
    223   CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar
    224 else
    225   CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar
    226 fi
    227 
    228 # Bugzilla 37848: When no TTY is available, don't output to console
    229 have_tty=0
    230 if [ "`tty`" != "not a tty" ]; then
    231     have_tty=1
    232 fi
    233 
    234 # For Cygwin, switch paths to Windows format before running java
    235 if $cygwin; then
    236   JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
    237   JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
    238   CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
    239   CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
    240   CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
    241   CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
    242   JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
    243 fi
    244 
    245 if [ -z "$JSSE_OPTS" ] ; then
    246   JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
    247 fi
    248 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
    249 
    250 # Register custom URL handlers
    251 # Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
    252 JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
    253 
    254 # Set juli LogManager config file if it is present and an override has not been issued
    255 if [ -z "$LOGGING_CONFIG" ]; then
    256   if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then
    257     LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
    258   else
    259     # Bugzilla 45585
    260     LOGGING_CONFIG="-Dnop"
    261   fi
    262 fi
    263 
    264 if [ -z "$LOGGING_MANAGER" ]; then
    265   LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
    266 fi
    267 
    268 # Java 9 no longer supports the java.endorsed.dirs
    269 # system property. Only try to use it if
    270 # JAVA_ENDORSED_DIRS was explicitly set
    271 # or CATALINA_HOME/endorsed exists.
    272 ENDORSED_PROP=ignore.endorsed.dirs
    273 if [ -n "$JAVA_ENDORSED_DIRS" ]; then
    274     ENDORSED_PROP=java.endorsed.dirs
    275 fi
    276 if [ -d "$CATALINA_HOME/endorsed" ]; then
    277     ENDORSED_PROP=java.endorsed.dirs
    278 fi
    279 
    280 # Uncomment the following line to make the umask available when using the
    281 # org.apache.catalina.security.SecurityListener
    282 #JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
    283 
    284 if [ -z "$USE_NOHUP" ]; then
    285     if $hpux; then
    286         USE_NOHUP="true"
    287     else
    288         USE_NOHUP="false"
    289     fi
    290 fi
    291 unset _NOHUP
    292 if [ "$USE_NOHUP" = "true" ]; then
    293     _NOHUP=nohup
    294 fi
    295 
    296 # Add the JAVA 9 specific start-up parameters required by Tomcat
    297 JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.lang=ALL-UNNAMED"
    298 JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED"
    299 export JDK_JAVA_OPTIONS
    300 
    301 # ----- Execute The Requested Command -----------------------------------------
    302 
    303 # Bugzilla 37848: only output this if we have a TTY
    304 if [ $have_tty -eq 1 ]; then
    305   echo "Using CATALINA_BASE:   $CATALINA_BASE"
    306   echo "Using CATALINA_HOME:   $CATALINA_HOME"
    307   echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
    308   if [ "$1" = "debug" ] ; then
    309     echo "Using JAVA_HOME:       $JAVA_HOME"
    310   else
    311     echo "Using JRE_HOME:        $JRE_HOME"
    312   fi
    313   echo "Using CLASSPATH:       $CLASSPATH"
    314   if [ ! -z "$CATALINA_PID" ]; then
    315     echo "Using CATALINA_PID:    $CATALINA_PID"
    316   fi
    317 fi
    318 
    319 if [ "$1" = "jpda" ] ; then
    320   if [ -z "$JPDA_TRANSPORT" ]; then
    321     JPDA_TRANSPORT="dt_socket"
    322   fi
    323   if [ -z "$JPDA_ADDRESS" ]; then
    324     JPDA_ADDRESS="localhost:8000"
    325   fi
    326   if [ -z "$JPDA_SUSPEND" ]; then
    327     JPDA_SUSPEND="n"
    328   fi
    329   if [ -z "$JPDA_OPTS" ]; then
    330     JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
    331   fi
    332   CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
    333   shift
    334 fi
    335 
    336 if [ "$1" = "debug" ] ; then
    337   if $os400; then
    338     echo "Debug command not available on OS400"
    339     exit 1
    340   else
    341     shift
    342     if [ "$1" = "-security" ] ; then
    343       if [ $have_tty -eq 1 ]; then
    344         echo "Using Security Manager"
    345       fi
    346       shift
    347       exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS 
    348         -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" 
    349         -classpath "$CLASSPATH" 
    350         -sourcepath "$CATALINA_HOME"/../../java 
    351         -Djava.security.manager 
    352         -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy 
    353         -Dcatalina.base="$CATALINA_BASE" 
    354         -Dcatalina.home="$CATALINA_HOME" 
    355         -Djava.io.tmpdir="$CATALINA_TMPDIR" 
    356         org.apache.catalina.startup.Bootstrap "$@" start
    357     else
    358       exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS 
    359         -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" 
    360         -classpath "$CLASSPATH" 
    361         -sourcepath "$CATALINA_HOME"/../../java 
    362         -Dcatalina.base="$CATALINA_BASE" 
    363         -Dcatalina.home="$CATALINA_HOME" 
    364         -Djava.io.tmpdir="$CATALINA_TMPDIR" 
    365         org.apache.catalina.startup.Bootstrap "$@" start
    366     fi
    367   fi
    368 
    369 elif [ "$1" = "run" ]; then
    370 
    371   shift
    372   if [ "$1" = "-security" ] ; then
    373     if [ $have_tty -eq 1 ]; then
    374       echo "Using Security Manager"
    375     fi
    376     shift
    377     eval exec ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS 
    378       -D$ENDORSED_PROP=""$JAVA_ENDORSED_DIRS"" 
    379       -classpath ""$CLASSPATH"" 
    380       -Djava.security.manager 
    381       -Djava.security.policy==""$CATALINA_BASE/conf/catalina.policy"" 
    382       -Dcatalina.base=""$CATALINA_BASE"" 
    383       -Dcatalina.home=""$CATALINA_HOME"" 
    384       -Djava.io.tmpdir=""$CATALINA_TMPDIR"" 
    385       org.apache.catalina.startup.Bootstrap "$@" start
    386   else
    387     eval exec ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS 
    388       -D$ENDORSED_PROP=""$JAVA_ENDORSED_DIRS"" 
    389       -classpath ""$CLASSPATH"" 
    390       -Dcatalina.base=""$CATALINA_BASE"" 
    391       -Dcatalina.home=""$CATALINA_HOME"" 
    392       -Djava.io.tmpdir=""$CATALINA_TMPDIR"" 
    393       org.apache.catalina.startup.Bootstrap "$@" start
    394   fi
    395 
    396 elif [ "$1" = "start" ] ; then
    397 
    398   if [ ! -z "$CATALINA_PID" ]; then
    399     if [ -f "$CATALINA_PID" ]; then
    400       if [ -s "$CATALINA_PID" ]; then
    401         echo "Existing PID file found during start."
    402         if [ -r "$CATALINA_PID" ]; then
    403           PID=`cat "$CATALINA_PID"`
    404           ps -p $PID >/dev/null 2>&1
    405           if [ $? -eq 0 ] ; then
    406             echo "Tomcat appears to still be running with PID $PID. Start aborted."
    407             echo "If the following process is not a Tomcat process, remove the PID file and try again:"
    408             ps -f -p $PID
    409             exit 1
    410           else
    411             echo "Removing/clearing stale PID file."
    412             rm -f "$CATALINA_PID" >/dev/null 2>&1
    413             if [ $? != 0 ]; then
    414               if [ -w "$CATALINA_PID" ]; then
    415                 cat /dev/null > "$CATALINA_PID"
    416               else
    417                 echo "Unable to remove or clear stale PID file. Start aborted."
    418                 exit 1
    419               fi
    420             fi
    421           fi
    422         else
    423           echo "Unable to read PID file. Start aborted."
    424           exit 1
    425         fi
    426       else
    427         rm -f "$CATALINA_PID" >/dev/null 2>&1
    428         if [ $? != 0 ]; then
    429           if [ ! -w "$CATALINA_PID" ]; then
    430             echo "Unable to remove or write to empty PID file. Start aborted."
    431             exit 1
    432           fi
    433         fi
    434       fi
    435     fi
    436   fi
    437 
    438   shift
    439   touch "$CATALINA_OUT"
    440   if [ "$1" = "-security" ] ; then
    441     if [ $have_tty -eq 1 ]; then
    442       echo "Using Security Manager"
    443     fi
    444     shift
    445     eval $_NOHUP ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS 
    446       -D$ENDORSED_PROP=""$JAVA_ENDORSED_DIRS"" 
    447       -classpath ""$CLASSPATH"" 
    448       -Djava.security.manager 
    449       -Djava.security.policy==""$CATALINA_BASE/conf/catalina.policy"" 
    450       -Dcatalina.base=""$CATALINA_BASE"" 
    451       -Dcatalina.home=""$CATALINA_HOME"" 
    452       -Djava.io.tmpdir=""$CATALINA_TMPDIR"" 
    453       org.apache.catalina.startup.Bootstrap "$@" start 
    454       >> "$CATALINA_OUT" 2>&1 "&"
    455 
    456   else
    457     eval $_NOHUP ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS 
    458       -D$ENDORSED_PROP=""$JAVA_ENDORSED_DIRS"" 
    459       -classpath ""$CLASSPATH"" 
    460       -Dcatalina.base=""$CATALINA_BASE"" 
    461       -Dcatalina.home=""$CATALINA_HOME"" 
    462       -Djava.io.tmpdir=""$CATALINA_TMPDIR"" 
    463       org.apache.catalina.startup.Bootstrap "$@" start 
    464       >> "$CATALINA_OUT" 2>&1 "&"
    465 
    466   fi
    467 
    468   if [ ! -z "$CATALINA_PID" ]; then
    469     echo $! > "$CATALINA_PID"
    470   fi
    471 
    472   echo "Tomcat started."
    473 
    474 elif [ "$1" = "stop" ] ; then
    475 
    476   shift
    477 
    478   SLEEP=5
    479   if [ ! -z "$1" ]; then
    480     echo $1 | grep "[^0-9]" >/dev/null 2>&1
    481     if [ $? -gt 0 ]; then
    482       SLEEP=$1
    483       shift
    484     fi
    485   fi
    486 
    487   FORCE=0
    488   if [ "$1" = "-force" ]; then
    489     shift
    490     FORCE=1
    491   fi
    492 
    493   if [ ! -z "$CATALINA_PID" ]; then
    494     if [ -f "$CATALINA_PID" ]; then
    495       if [ -s "$CATALINA_PID" ]; then
    496         kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
    497         if [ $? -gt 0 ]; then
    498           echo "PID file found but no matching process was found. Stop aborted."
    499           exit 1
    500         fi
    501       else
    502         echo "PID file is empty and has been ignored."
    503       fi
    504     else
    505       echo "$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted."
    506       exit 1
    507     fi
    508   fi
    509 
    510   eval ""$_RUNJAVA"" $LOGGING_MANAGER $JAVA_OPTS 
    511     -D$ENDORSED_PROP=""$JAVA_ENDORSED_DIRS"" 
    512     -classpath ""$CLASSPATH"" 
    513     -Dcatalina.base=""$CATALINA_BASE"" 
    514     -Dcatalina.home=""$CATALINA_HOME"" 
    515     -Djava.io.tmpdir=""$CATALINA_TMPDIR"" 
    516     org.apache.catalina.startup.Bootstrap "$@" stop
    517 
    518   # stop failed. Shutdown port disabled? Try a normal kill.
    519   if [ $? != 0 ]; then
    520     if [ ! -z "$CATALINA_PID" ]; then
    521       echo "The stop command failed. Attempting to signal the process to stop through OS signal."
    522       kill -15 `cat "$CATALINA_PID"` >/dev/null 2>&1
    523     fi
    524   fi
    525 
    526   if [ ! -z "$CATALINA_PID" ]; then
    527     if [ -f "$CATALINA_PID" ]; then
    528       while [ $SLEEP -ge 0 ]; do
    529         kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
    530         if [ $? -gt 0 ]; then
    531           rm -f "$CATALINA_PID" >/dev/null 2>&1
    532           if [ $? != 0 ]; then
    533             if [ -w "$CATALINA_PID" ]; then
    534               cat /dev/null > "$CATALINA_PID"
    535               # If Tomcat has stopped don't try and force a stop with an empty PID file
    536               FORCE=0
    537             else
    538               echo "The PID file could not be removed or cleared."
    539             fi
    540           fi
    541           echo "Tomcat stopped."
    542           break
    543         fi
    544         if [ $SLEEP -gt 0 ]; then
    545           sleep 1
    546         fi
    547         if [ $SLEEP -eq 0 ]; then
    548           echo "Tomcat did not stop in time."
    549           if [ $FORCE -eq 0 ]; then
    550             echo "PID file was not removed."
    551           fi
    552           echo "To aid diagnostics a thread dump has been written to standard out."
    553           kill -3 `cat "$CATALINA_PID"`
    554         fi
    555         SLEEP=`expr $SLEEP - 1 `
    556       done
    557     fi
    558   fi
    559 
    560   KILL_SLEEP_INTERVAL=5
    561   if [ $FORCE -eq 1 ]; then
    562     if [ -z "$CATALINA_PID" ]; then
    563       echo "Kill failed: $CATALINA_PID not set"
    564     else
    565       if [ -f "$CATALINA_PID" ]; then
    566         PID=`cat "$CATALINA_PID"`
    567         echo "Killing Tomcat with the PID: $PID"
    568         kill -9 $PID
    569         while [ $KILL_SLEEP_INTERVAL -ge 0 ]; do
    570             kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
    571             if [ $? -gt 0 ]; then
    572                 rm -f "$CATALINA_PID" >/dev/null 2>&1
    573                 if [ $? != 0 ]; then
    574                     if [ -w "$CATALINA_PID" ]; then
    575                         cat /dev/null > "$CATALINA_PID"
    576                     else
    577                         echo "The PID file could not be removed."
    578                     fi
    579                 fi
    580                 echo "The Tomcat process has been killed."
    581                 break
    582             fi
    583             if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then
    584                 sleep 1
    585             fi
    586             KILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1 `
    587         done
    588         if [ $KILL_SLEEP_INTERVAL -lt 0 ]; then
    589             echo "Tomcat has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE."
    590         fi
    591       fi
    592     fi
    593   fi
    594 
    595 elif [ "$1" = "configtest" ] ; then
    596 
    597     eval ""$_RUNJAVA"" $LOGGING_MANAGER $JAVA_OPTS 
    598       -D$ENDORSED_PROP=""$JAVA_ENDORSED_DIRS"" 
    599       -classpath ""$CLASSPATH"" 
    600       -Dcatalina.base=""$CATALINA_BASE"" 
    601       -Dcatalina.home=""$CATALINA_HOME"" 
    602       -Djava.io.tmpdir=""$CATALINA_TMPDIR"" 
    603       org.apache.catalina.startup.Bootstrap configtest
    604     result=$?
    605     if [ $result -ne 0 ]; then
    606         echo "Configuration error detected!"
    607     fi
    608     exit $result
    609 
    610 elif [ "$1" = "version" ] ; then
    611 
    612     "$_RUNJAVA"   
    613       -classpath "$CATALINA_HOME/lib/catalina.jar" 
    614       org.apache.catalina.util.ServerInfo
    615 
    616 else
    617 
    618   echo "Usage: catalina.sh ( commands ... )"
    619   echo "commands:"
    620   if $os400; then
    621     echo "  debug             Start Catalina in a debugger (not available on OS400)"
    622     echo "  debug -security   Debug Catalina with a security manager (not available on OS400)"
    623   else
    624     echo "  debug             Start Catalina in a debugger"
    625     echo "  debug -security   Debug Catalina with a security manager"
    626   fi
    627   echo "  jpda start        Start Catalina under JPDA debugger"
    628   echo "  run               Start Catalina in the current window"
    629   echo "  run -security     Start in the current window with security manager"
    630   echo "  start             Start Catalina in a separate window"
    631   echo "  start -security   Start in a separate window with security manager"
    632   echo "  stop              Stop Catalina, waiting up to 5 seconds for the process to end"
    633   echo "  stop n            Stop Catalina, waiting up to n seconds for the process to end"
    634   echo "  stop -force       Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"
    635   echo "  stop n -force     Stop Catalina, wait up to n seconds and then use kill -KILL if still running"
    636   echo "  configtest        Run a basic syntax check on server.xml - check exit code for result"
    637   echo "  version           What version of tomcat are you running?"
    638   echo "Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined"
    639   exit 1
    640 
    641 fi
    catalina.sh

    查看server.xml文件

      1 <?xml version='1.0' encoding='utf-8'?>
      2 <!--
      3   Licensed to the Apache Software Foundation (ASF) under one or more
      4   contributor license agreements.  See the NOTICE file distributed with
      5   this work for additional information regarding copyright ownership.
      6   The ASF licenses this file to You under the Apache License, Version 2.0
      7   (the "License"); you may not use this file except in compliance with
      8   the License.  You may obtain a copy of the License at
      9 
     10       http://www.apache.org/licenses/LICENSE-2.0
     11 
     12   Unless required by applicable law or agreed to in writing, software
     13   distributed under the License is distributed on an "AS IS" BASIS,
     14   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15   See the License for the specific language governing permissions and
     16   limitations under the License.
     17 -->
     18 <!-- Note:  A "Server" is not itself a "Container", so you may not
     19      define subcomponents such as "Valves" at this level.
     20      Documentation at /docs/config/server.html
     21  -->
     22 <Server port="8005" shutdown="SHUTDOWN">
     23   <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
     24   <!-- Security listener. Documentation at /docs/config/listeners.html
     25   <Listener className="org.apache.catalina.security.SecurityListener" />
     26   -->
     27   <!--APR library loader. Documentation at /docs/apr.html -->
     28   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
     29   <!-- Prevent memory leaks due to use of particular java/javax APIs-->
     30   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
     31   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
     32   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
     33 
     34   <!-- Global JNDI resources
     35        Documentation at /docs/jndi-resources-howto.html
     36   -->
     37   <GlobalNamingResources>
     38     <!-- Editable user database that can also be used by
     39          UserDatabaseRealm to authenticate users
     40     -->
     41     <Resource name="UserDatabase" auth="Container"
     42               type="org.apache.catalina.UserDatabase"
     43               description="User database that can be updated and saved"
     44               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
     45               pathname="conf/tomcat-users.xml" />
     46   </GlobalNamingResources>
     47 
     48   <!-- A "Service" is a collection of one or more "Connectors" that share
     49        a single "Container" Note:  A "Service" is not itself a "Container",
     50        so you may not define subcomponents such as "Valves" at this level.
     51        Documentation at /docs/config/service.html
     52    -->
     53   <Service name="Catalina">
     54 
     55     <!--The connectors can use a shared executor, you can define one or more named thread pools-->
     56     <!--
     57     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
     58         maxThreads="150" minSpareThreads="4"/>
     59     -->
     60 
     61 
     62     <!-- A "Connector" represents an endpoint by which requests are received
     63          and responses are returned. Documentation at :
     64          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     65          Java AJP  Connector: /docs/config/ajp.html
     66          APR (HTTP/AJP) Connector: /docs/apr.html
     67          Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
     68     -->
     69     <Connector port="8080" protocol="HTTP/1.1"
     70                connectionTimeout="20000"
     71                redirectPort="8443" />
     72     <!-- A "Connector" using the shared thread pool-->
     73     <!--
     74     <Connector executor="tomcatThreadPool"
     75                port="8080" protocol="HTTP/1.1"
     76                connectionTimeout="20000"
     77                redirectPort="8443" />
     78     -->
     79     <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
     80          This connector uses the NIO implementation that requires the JSSE
     81          style configuration. When using the APR/native implementation, the
     82          OpenSSL style configuration is required as described in the APR/native
     83          documentation -->
     84     <!--
     85     <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
     86                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
     87                clientAuth="false" sslProtocol="TLS" />
     88     -->
     89 
     90     <!-- Define an AJP 1.3 Connector on port 8009 -->
     91     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
     92 
     93 
     94     <!-- An Engine represents the entry point (within Catalina) that processes
     95          every request.  The Engine implementation for Tomcat stand alone
     96          analyzes the HTTP headers included with the request, and passes them
     97          on to the appropriate Host (virtual host).
     98          Documentation at /docs/config/engine.html -->
     99 
    100     <!-- You should set jvmRoute to support load-balancing via AJP ie :
    101     <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    102     -->
    103     <Engine name="Catalina" defaultHost="localhost">
    104 
    105       <!--For clustering, please take a look at documentation at:
    106           /docs/cluster-howto.html  (simple how to)
    107           /docs/config/cluster.html (reference documentation) -->
    108       <!--
    109       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    110       -->
    111 
    112       <!-- Use the LockOutRealm to prevent attempts to guess user passwords
    113            via a brute-force attack -->
    114       <Realm className="org.apache.catalina.realm.LockOutRealm">
    115         <!-- This Realm uses the UserDatabase configured in the global JNDI
    116              resources under the key "UserDatabase".  Any edits
    117              that are performed against this UserDatabase are immediately
    118              available for use by the Realm.  -->
    119         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    120                resourceName="UserDatabase"/>
    121       </Realm>
    122 
    123       <Host name="localhost"  appBase="/data/webapps" unpackWARs="true" autoDeploy="true">
    124 
    125         <!-- SingleSignOn valve, share authentication between web applications
    126              Documentation at: /docs/config/valve.html -->
    127         <!--
    128         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    129         -->
    130 
    131         <!-- Access log processes all example.
    132              Documentation at: /docs/config/valve.html
    133              Note: The pattern used is equivalent to using pattern="common" -->
    134         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    135                prefix="localhost_access_log" suffix=".txt"
    136                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    137 
    138       </Host>
    139     </Engine>
    140   </Service>
    141 </Server>
    server.xml

     制作haproxy镜像

    准备haproxy的安装包

    查看 Dockerfile

     1 [root@192 haproxy]# cat Dockerfile
     2 #haproxy
     3 From centos-base:v1
     4 MAINTAINER hexintong "137841632@qq.com"
     5 RUN  yum install  glibc glibc-devel  systemd-devel net-tools  iotop bc  screen lsof tcpdump wget ntpdate -y
     6 ADD haproxy-1.8.12.tar.gz /usr/local/src/
     7 RUN cd /usr/local/src/haproxy-1.8.12 &&  make  ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1  USE_CPU_AFFINITY=1  PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy && cp haproxy  /usr/sbin/ && mkdir /usr/local/haproxy/run
     8 ADD haproxy.cfg /etc/haproxy/
     9 ADD run_haproxy.sh /usr/bin/
    10 EXPOSE 80 9999
    11 CMD ["/usr/bin/run_haproxy.sh"]
    Dockerfile

    查看 haproxy.cfg

     1 global
     2 chroot /usr/local/haproxy
     3 #stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
     4 uid 99
     5 gid 99
     6 daemon
     7 nbproc 1
     8 pidfile /usr/local/haproxy/run/haproxy.pid
     9 log 127.0.0.1 local3 info
    10 
    11 defaults
    12 option http-keep-alive
    13 option  forwardfor
    14 mode http
    15 timeout connect 300000ms
    16 timeout client  300000ms
    17 timeout server  300000ms
    18 
    19 listen stats
    20  mode http
    21  bind 0.0.0.0:9999
    22  stats enable
    23  log global
    24  stats uri     /haproxy-status
    25  stats auth    haadmin:q1w2e3r4ys
    26 
    27 listen  web_port
    28  bind 0.0.0.0:80
    29  mode http
    30  log global
    31  balance roundrobin
    32  server web1   nginx-web1:80  check inter 3000 fall 2 rise 5
    33  server web2   nginx-web2:80  check inter 3000 fall 2 rise 5
    haproxy.cfg

    查看run_haproxy.sh

    1 [root@192 haproxy]# cat run_haproxy.sh
    2 #!/bin/bash
    3 haproxy -f /etc/haproxy/haproxy.cfg
    4 tail -f /etc/hosts
    run_haproxy.sh

    查看 build-commad.sh

    1 [root@192 haproxy]# cat build-commad.sh
    2 #!/bin/bash
    3 docker build -t haproxy:v1 .
    build-commad.sh

    查看产生的haproxy:v1 镜像

    查看启动的haproxy容器

    查看 haprxy的状态

    查看haproxy的切换状态

    查看haproxy的切换状态

    troubleshootings

    解决docker 容器内访问宿主机“No route to host”的问题

    解决 haproxy 503 service unavailable no server is avaible to handle this request

    是因为防火墙的问题,把 haproxy托管的接口在防火墙上放行

    [root@192 haproxy]# systemctl  status   firewalld

    [root@192 haproxy]# firewall-cmd --zone=public --list-ports
    [root@192 haproxy]# firewall-cmd --zone=public --add-port=8812/tcp

    [root@192 haproxy]# firewall-cmd --zone=public --add-port=8811/tcp

  • 相关阅读:
    python网络编程之最简单的单工通信
    ruby : Exception Notification
    python学习之操作mysql
    python学习之最简单的获取本机ip信息的小程序
    python学习之最简单的用户注册及登录验证小程序
    mongo数据库的导入导出
    mac安装django1.5.4
    mac安装软件管家homebrew
    关于mac安装rails报错clang: error: unknown argument
    在mac上安装nodejs
  • 原文地址:https://www.cnblogs.com/hexintong/p/9289361.html
Copyright © 2020-2023  润新知