1、JDK - 基础镜像

  1. vi .dockerignore
  2. *
  3. !jdk-8u281-linux-x64.tar.gz
  4. vi Dockerfile
  5. FROM centos:7
  6. MAINTAINER "Geray <1690014753@qq.com>"
  7. # 建议需要安装telnet
  8. RUN yum -y install wget unzip zip openssh-clients iproute net-tools kde-l10n-Chinese reinstall glibc-common && \
  9. # 安装jdk
  10. # yum -y install java-1.8.0-openjdk && \
  11. # yum -y install java-1.8.0-openjdk-devel.x86_64 && \
  12. yum clean all && \
  13. rm -rf /var/cache/yum/* && \
  14. localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 && \
  15. cat /dev/null > /etc/locale.conf && echo "LC_ALL=\"zh_CN.UTF-8\"" > /etc/locale.conf
  16. #env
  17. ENV TZ "Asia/Shanghai"
  18. #ENV LANG en_US.UTF-8
  19. ENV LANG zh_CN.UTF-8
  20. ADD jdk-8u281-linux-x64.tar.gz /usr/local
  21. #JDK环境变量
  22. #ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64
  23. ENV JAVA_HOME /usr/local/jdk1.8.0_281
  24. ENV JRE_HOME ${JAVA_HOME}/jre
  25. ENV CLASS_PATH .:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${JRE_HOME}/lib
  26. ENV PATH $PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin
  1. docker build -t geray/hs_jdk:v1.8.0_281-b09 .
  2. docker save geray/hs_jdk:v1.8.0_281-b09 | gzip > HSjdk-1.8.0_281.tar.gz

2、Tomcat - 基础镜像

需要用到的agent和证书文件:

agent.zip

UCA-RSA-Non-Public-CA-G1.cer

  1. vi .dockerignore
  2. *
  3. !agent.zip
  4. !UCA-RSA-Non-Public-CA-G1.cer
  5. # 使用run.sh一遍输出日志到catalina.out,或者可以使用下面的方式替换catalina.sh文件
  6. vi run.sh
  7. #!/bin/bash
  8. bash /usr/local/tomcat/bin/startup.sh
  9. tail -f /usr/local/tomcat/logs/catalina.out
  10. vi Dockerfile
  11. FROM geray/hs_jdk:v1.8.0_281-b09
  12. MAINTAINER "Geray <1690014753@qq.com>"
  13. #声明CATALINA_HOME环境变量
  14. ENV CATALINA_HOME /usr/local/tomcat
  15. #将Tomcat下的bin路径加入到PATH环境变量中。
  16. ENV PATH $CATALINA_HOME/bin:$PATH
  17. #Tomcat相关文件的版本。
  18. ENV TOMCAT_MAJOR 9
  19. ENV TOMCAT_VERSION 9.0.52
  20. #Tomcat相关文件下载地址
  21. ENV TOMCAT_TGZ_URL "https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz"
  22. #下载验证文件
  23. #ENV TOMCAT_ASC_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc
  24. #添加agent和证书文件
  25. COPY agent.zip /usr/local
  26. COPY UCA-RSA-Non-Public-CA-G1.cer $JRE_HOME/lib/security
  27. #执行命令
  28. RUN set -x && \
  29. mkdir -p $CATALINA_HOME && \
  30. wget -O tomcat.tar.gz $TOMCAT_TGZ_URL && \
  31. #wget -O tomcat.tar.gz.asc "$TOMCAT_ASC_URL" && \
  32. tar -xvf tomcat.tar.gz --strip-components=1 -C $CATALINA_HOME && \
  33. # 禁用jdk随机数
  34. #sed -i '1a JAVA_OPTS="${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom"' $CATALINA_HOME/bin/catalina.sh && \
  35. echo 'JAVA_OPTS="${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom"' > $CATALINA_HOME/bin/setenv.sh && \
  36. rm -rf $CATALINA_HOME/bin/*.bat && \
  37. rm -rf $CATALINA_HOME/webapps/* && \
  38. # 共有5个{docs,examples,host-manager,manager,ROOT}
  39. # rm -rf $CATALINA_HOME/webapps/{docs,examples} && \
  40. rm -rf tomcat.tar.gz* && \
  41. mkdir -p $CATALINA_HOME/webapps/ROOT && \
  42. echo "ok" > $CATALINA_HOME/webapps/ROOT/index.html && \
  43. #解压agent
  44. unzip /usr/local/agent.zip -d /usr/local/ && \
  45. rm -rf /usr/local/agent.zip && \
  46. #添加jdk证书
  47. cd $JRE_HOME/lib/security && \
  48. echo y | keytool -import -trustcacerts -alias UCA-RSA-Non-Public-CA-G1.cer -file UCA-RSA-Non-Public-CA-G1.cer -keystore cacerts -storepass changeit
  49. COPY run.sh /usr/local/tomcat
  50. RUN chmod +x /usr/local/tomcat/run.sh
  51. #指定RUN、CMD、ENTRYPOINT命令的当前工作路径
  52. WORKDIR $CATALINA_HOME
  53. #暴露8080端口
  54. EXPOSE 8080
  55. #容器启动时执行的命令。
  56. #CMD ["catalina.sh", "start"]
  57. CMD ["/usr/local/tomcat/run.sh"]
  58. #ENTRYPOINT ["run.sh"]
  1. docker build -t geray/tomcat:v9.0.52-hsjdk1.8.0_281-b09 .
  2. docker save geray/tomcat:v9.0.52-hsjdk1.8.0_281-b09 | gzip > tomcat-9.tar.gz

怎么输出catalina.out日志?

第一种方式就是使用上面的run.sh

第二种,替换catalina.sh配置文件

tomcat-生产镜像构建 - 图1

建议:使用第一种方法,容器的logs也会看到先关启动日志信息

2021-12-7 - 栋哥所需镜像

根据tomcat发布的漏洞,需要升级tomcat版本,9版本最新版本为9.0.55,使用上述Docker存在以下问题:

1. .dockerignore配置文件中需要添加run.sh

2. tomcat版本为9.0.55构建存在证书错误

tomcat-生产镜像构建 - 图2

  1. + wget -O tomcat.tar.gz 'https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.55/bin/apache-tomcat-9.0.55.tar.gz'
  2. --2021-12-07 15:33:11-- https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-9/v9.0.55/bin/apache-tomcat-9.0.55.tar.gz
  3. Resolving www.apache.org (www.apache.org)... 151.101.2.132, 2a04:4e42::644
  4. Connecting to www.apache.org (www.apache.org)|151.101.2.132|:443... connected.
  5. ERROR: cannot verify www.apache.org's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
  6. Issued certificate has expired.
  7. To connect to www.apache.org insecurely, use `--no-check-certificate'.

通过错误描述信息可以看到是由于执行wget -O tomcat.tar.gz $TOMCAT_TGZ_URL命令下载tomcat时出现证书认证问题(该问题和TOMCAT_ASC_URL验证文件无关吗,已验证),根据提示最简单的处理方法就是添加--no-check-certificate参数跳过验证

tomcat-生产镜像构建 - 图3

  1. wget -O tomcat.tar.gz $TOMCAT_TGZ_URL --no-check-certificate

3. 构建

  1. docker build -t geray/tomcat:v9.0.55-hsjdk1.8.0_281-b09 .
  2. docker save geray/tomcat:v9.0.55-hsjdk1.8.0_281-b09 | gzip > tomcat-9.0.55.tar.gz

3、良好的构建习惯 - 构建前测试

  1. docker run -it --rm --name jdk geray/hs_jdk:v1.8.0_281-b09 bash
  2. export CATALINA_HOME=/usr/local/tomcat
  3. export PATH=$CATALINA_HOME/bin:$PATH
  4. export TOMCAT_MAJOR=9
  5. export TOMCAT_VERSION=9.0.55
  6. export TOMCAT_TGZ_URL="https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz"
  7. mkdir -p $CATALINA_HOME
  8. wget -O tomcat.tar.gz $TOMCAT_TGZ_URL --no-check-certificate
  9. tar -xvf tomcat.tar.gz --strip-components=1 -C $CATALINA_HOME
  10. cd $CATALINA_HOME

2021-12-8栋哥tomcat9.0.55版本镜像提供

.dockerignore

  1. *
  2. !agent.zip
  3. !UCA-RSA-Non-Public-CA-G1.cer
  4. !run.sh
  5. !404.html
  6. !500.html
  7. !web.xml

run.sh

  1. #!/bin/bash
  2. bash /usr/local/tomcat/bin/startup.sh
  3. tail -f /usr/local/tomcat/logs/catalina.out

404.html和500.html一样

  1. 太长了略

web.xml

  1. <!-- 添加错误页面 -->
  2. <welcome-file-list>
  3. <welcome-file>index.html</welcome-file>
  4. <welcome-file>index.htm</welcome-file>
  5. <welcome-file>index.jsp</welcome-file>
  6. </welcome-file-list>
  7. <error-page>
  8. <error-code>500</error-code>
  9. <location>/500.html</location>
  10. </error-page>
  11. <error-page>
  12. <error-code>404</error-code>
  13. <location>/404.html</location>
  14. </error-page>
  15. </web-app>

Docker

  1. FROM geray/hs_jdk:v1.8.0_281-b09
  2. MAINTAINER "Geray <1690014753@qq.com>"
  3. #声明CATALINA_HOME环境变量
  4. ENV CATALINA_HOME /usr/local/tomcat
  5. #将Tomcat下的bin路径加入到PATH环境变量中。
  6. ENV PATH $CATALINA_HOME/bin:$PATH
  7. #Tomcat相关文件的版本。
  8. ENV TOMCAT_MAJOR 9
  9. ENV TOMCAT_VERSION 9.0.55
  10. #Tomcat相关文件下载地址
  11. ENV TOMCAT_TGZ_URL "https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz"
  12. #下载验证文件
  13. #ENV TOMCAT_ASC_URL https://www.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz.asc
  14. #添加agent和证书文件
  15. COPY agent.zip /usr/local
  16. COPY UCA-RSA-Non-Public-CA-G1.cer $JRE_HOME/lib/security
  17. #执行命令
  18. RUN set -x && \
  19. mkdir -p $CATALINA_HOME && \
  20. wget -O tomcat.tar.gz $TOMCAT_TGZ_URL --no-check-certificate && \
  21. # wget -O tomcat.tar.gz.asc "$TOMCAT_ASC_URL" && \
  22. tar -xvf tomcat.tar.gz --strip-components=1 -C $CATALINA_HOME && \
  23. # 禁用jdk随机数
  24. #sed -i '1a JAVA_OPTS="${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom"' $CATALINA_HOME/bin/catalina.sh && \
  25. echo 'JAVA_OPTS="${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom"' > $CATALINA_HOME/bin/setenv.sh && \
  26. rm -rf $CATALINA_HOME/bin/*.bat && \
  27. # rm -rf $CATALINA_HOME/webapps/* && \
  28. rm -rf $CATALINA_HOME/webapps/{docs,examples} && \
  29. rm -rf tomcat.tar.gz* && \
  30. mkdir -p $CATALINA_HOME/webapps/ROOT && \
  31. # echo "ok" > $CATALINA_HOME/webapps/ROOT/index.html && \
  32. #解压agent
  33. unzip /usr/local/agent.zip -d /usr/local/ && \
  34. rm -rf /usr/local/agent.zip && \
  35. #添加jdk证书
  36. cd $JRE_HOME/lib/security && \
  37. # useradd tomcat && \
  38. echo y | keytool -import -trustcacerts -alias UCA-RSA-Non-Public-CA-G1.cer -file UCA-RSA-Non-Public-CA-G1.cer -keystore cacerts -storepass changeit
  39. # 添加错误页面
  40. COPY 404.html /
  41. COPY 500.html /
  42. # 替换conf/web.xml配置文件
  43. COPY web.xml /usr/local/tomcat/conf
  44. COPY run.sh /usr/local/tomcat
  45. RUN chmod +x /usr/local/tomcat/run.sh
  46. #指定RUN、CMD、ENTRYPOINT命令的当前工作路径
  47. WORKDIR $CATALINA_HOME
  48. #暴露8080端口
  49. EXPOSE 8080
  50. #容器启动时执行的命令。
  51. CMD ["/usr/local/tomcat/run.sh"]