news 2026/3/19 22:20:44

Docker:基于自制openjdk8镜像 or 官方openjdk8镜像,制作tomcat镜像

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker:基于自制openjdk8镜像 or 官方openjdk8镜像,制作tomcat镜像

一、制作openjdk8基础镜像【基于自定义alpine-3.18.0:v1 】

docker pull maven:3.5.0-jdk-8-alpine
78.56 MB
https://hub.docker.com/_/maven/tagspage=8&name=alpine

openjdk二进制下载地址
https://blog.csdn.net/fenglllle/article/details/124786948
https://adoptopenjdk.net/releases.html


Dockerfile中,source /etc/profile不能加载的原因
为什么还需要选择使用他的原因:三 中,tomcat普通用户交互式启动tomcat

#在 Docker 容器中,/etc/profile 文件不会在容器启动时自动执行,这是因为 Docker 容器通常不会启动交互式登录 shell,而是直接运行指定的命令。/etc/profile 和用户的 shell 配置文件(如 .bash_profile[root]、.bashrc[普通用户] 等)是在交互式登录 shell 中被加载的。如果容器启动命令不涉及启动一个交互式 shell,这些文件就不会被执行。 解决方法 如果你需要在 Docker 容器中自动加载 /etc/profile 或其他环境配置,你可以采取以下几种方法之一: 1. 修改容器的启动命令 确保容器启动时使用交互式 shell。例如,你可以在 Dockerfile 中设置 CMD 或 ENTRYPOINT 指令来启动一个 Bash shell: 这样,当你以交互式方式运行容器时(使用 docker run -it <image>),它将启动 Bash,该 Bash 会加载 /etc/profile。 2. 在 Dockerfile 中使用环境变量 对于一些简单的环境设置,你也可以直接在 Dockerfile 中使用 ENV 指令来设置环境变量,这样就不需要依赖 /etc/profile

root@ubuntu:~/system/openjdk# cat profile

export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" export PAGER=less umask 022 # use nicer PS1 for bash and busybox ash if [ -n "$BASH_VERSION" -o "$BB_ASH_VERSION" ]; then PS1='h:w$ ' # use nicer PS1 for zsh elif [ -n "$ZSH_VERSION" ]; then PS1='%m:%~%# ' # set up fallback default PS1 else : "${HOSTNAME:=$(hostname)}" PS1='${HOSTNAME%%.*}:$PWD' [ "$(id -u)" -eq 0 ] && PS1="${PS1}# " || PS1="${PS1}$ " fi if [ -n "$BASH_VERSION" ] && [ "$BASH" != "/bin/sh" ]; then # if we're bash (and not /bin/sh bash), also source the bashrc # by default, bash sources the bashrc for non-login, # and only /etc/profile on login (-l). so, make it do both on login. # this ensures that login-shell bash (e.g. -bash or bash -l) still sources the # system bashrc, which e.g. loads bash-completion . /etc/bash/bashrc fi for script in /etc/profile.d/*.sh ; do if [ -r "$script" ] ; then . "$script" fi done unset script export JAVA_HOME=/usr/local/jdk export JRE_HOME=$JAVA_HOME/jre export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib:$JAVA_HOME/lib/tools.jar root@ubuntu:~/system/openjdk# tree ./ ./ └── OpenJDK8U-jdk_x64_alpine-linux_hotspot_8u432b06.tar.gz └── profile

root@ubuntu:~/system/openjdk# cat Dockerfile

#JDK Base Image #基于alpine-3.18.0:v1【官方镜像+自定义环境】 FROM registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0:v1 LABEL Image="Openjdk base" ADD OpenJDK8U-jdk_x64_alpine-linux_hotspot_8u432b06.tar.gz /usr/local/src/ RUN ln -s /usr/local/src/jdk8u432-b06 /usr/local/jdk ADD profile /etc/profile ENV JAVA_HOME /usr/local/jdk ENV JRE_HOME $JAVA_HOME/jre ENV PATH $JAVA_HOME/bin:$JRE_HOME/bin:$PATH ENV CLASSPATH .$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib:$JAVA_HOME/lib/tools.jar docker build -t registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06:v1 . docker push registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06:v1 docker run -ti --rm registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06:v1 sh / # java -version openjdk version "1.8.0_432" OpenJDK Runtime Environment (Temurin)(build 1.8.0_432-b06) OpenJDK 64-Bit Server VM (Temurin)(build 25.432-b06, mixed mode) / # env HOSTNAME=ba44d1f0c9fe SHLVL=1 HOME=/root JRE_HOME=/usr/local/jdk/jre TERM=xterm PATH=/usr/local/jdk/bin:/usr/local/jdk/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin CLASSPATH=.:/usr/local/jdk/lib:/usr/local/jdk/jre/lib:/usr/local/jdk/lib/tools.jar JAVA_HOME=/usr/local/jdk PWD=/ / # id www uid=2024(www) gid=2024(www) groups=2024(www),2024(www)

二、制作tomcat 9 Base镜像【基于自制openjdk8基础镜像 】

2.1 基于自定义的 JDK 基础镜像,构建出通用的自定义 Tomcat 基础镜像,此镜像后期会被多个业务的多个服务共同引用
2.2 JDK 版本和Tomcat 版本对应关系,如下:

https://tomcat.apache.org/whichversion.html

2.3 tomcat 8版本,官网已经没有维护了,使用tomcat 9版本

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.97/bin/apache-tomcat-9.0.97.tar.gz

cat Dockerfile

#Tomcat Base Image #Tomcat Base Image FROM registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06:v1 #env ENV TZ "Asia/Shanghai" ENV LANG en_US.UTF-8 ENV TERM xterm ENV TOMCAT_MAJOR_VERSION 9 ENV TOMCAT_MINOR_VERSION 9.0.97 ENV CATALINA_HOME /apps/tomcat ENV APP_DIR ${CATALINA_HOME}/webapps #tomcat RUN mkdir /apps #添加系统账户 RUN addgroup -g 2025 -S tomcat && adduser -u 2025 -G tomcat -D -S -s /bin/sh tomcat ADD apache-tomcat-9.0.97.tar.gz /apps RUN ln -s /apps/apache-tomcat-9.0.97 /apps/tomcat docker build -t registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06-v1-tomcat-9.0.97:v1 . docker run -it --rm -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06-v1-tomcat-9.0.97:v1 sh / # /apps/tomcat/bin/catalina.sh start Using CATALINA_BASE: /apps/tomcat Using CATALINA_HOME: /apps/tomcat Using CATALINA_TMPDIR: /apps/tomcat/temp Using JRE_HOME: /usr/local/jdk/jre Using CLASSPATH: /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started. / # netstat -ntulp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:8005 0.0.0.0:* LISTEN 14/java tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 14/java / # env HOSTNAME=3e8f4f50d5b6 TOMCAT_MINOR_VERSION=9.0.97 SHLVL=1 HOME=/root JRE_HOME=/usr/local/jdk/jre CATALINA_HOME=/apps/tomcat TERM=xterm PATH=/usr/local/jdk/bin:/usr/local/jdk/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin APP_DIR=/apps/tomcat/webapps LANG=en_US.UTF-8 CLASSPATH=.:/usr/local/jdk/lib:/usr/local/jdk/jre/lib:/usr/local/jdk/lib/tools.jar TOMCAT_MAJOR_VERSION=9 JAVA_HOME=/usr/local/jdk PWD=/ TZ=Asia/Shanghai docker push registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06-v1-tomcat-9.0.97:v1

三、构建业务镜像1【基于tomcat 9 Base镜像】

root@ubuntu:~/web# mkdir tomcat/tomcat-app{1,2}. root@ubuntu:~/web# tree tomcat tomcat ├── apache-tomcat-9.0.97.tar.gz ├── Dockerfile ├── tomcat-app1 └── tomcat-app2 root@ubuntu:~/web/tomcat# tar xzvf apache-tomcat-9.0.97.tar.gz root@ubuntu:~/web/tomcat# cp apache-tomcat-9.0.97/conf/server.xml tomcat-app1/ root@ubuntu:~/web/tomcat# vim tomcat-app1/server.xml ...... <Host name="localhost" appBase="/data/tomcat/webapps" unpackWARs="true" autoDeploy="true"> ...... root@ubuntu:~/web/tomcat# cd tomcat-app1 root@ubuntu:~/web/tomcat/tomcat-app1# mkdir app root@ubuntu:~/web/tomcat/tomcat-app1# echo "Tomcat Page in app1" > app/index.jsp root@ubuntu:~/web/tomcat/tomcat-app1# tar zcf app.tar.gz app root@ubuntu:~/web/tomcat/tomcat-app1# ls app app.tar.gz server.xml root@ubuntu:~/web/tomcat/tomcat-app1# cat run_tomcat.sh #!/bin/bash echo "nameserver 192.168.31.1" > /etc/resolv.conf su - tomcat -c "/apps/tomcat/bin/catalina.sh start" su - tomcat -c "tail -f /etc/hosts" root@ubuntu:~/web/tomcat/tomcat-app1# chmod a+x run_tomcat.sh

root@ubuntu:~/web/tomcat/tomcat-app1# cat Dockerfile

#Tomcat Web Image FROM registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06-v1-tomcat-9.0.97:v1 ADD server.xml /apps/tomcat/conf/server.xml ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh ADD app.tar.gz /data/tomcat/webapps/ RUN chown -R tomcat.tomcat /apps/ /data/tomcat/ EXPOSE 8080 CMD ["/apps/tomcat/bin/run_tomcat.sh"] root@ubuntu:~/web/tomcat/tomcat-app1# docker build -t registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06-v1-tomcat-9.0.97-v1-app1:v1 . root@ubuntu:~/web/tomcat/tomcat-app1# docker push registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06-v1-tomcat-9.0.97-v1-app1:v1 docker run -ti --rm -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/qiushi/alpine-3.18.0-openjdk-8u432b06-v1-tomcat-9.0.97-v1-app1:v1 Using CATALINA_BASE: /apps/tomcat Using CATALINA_HOME: /apps/tomcat Using CATALINA_TMPDIR: /apps/tomcat/temp Using JRE_HOME: /usr/local/jdk/jre Using CLASSPATH: /apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started. 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.100.2 79a46dbde53f


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/16 17:07:21

Go基础之环境搭建

文章目录 1 Go 1.1 简介 1.1.1 定义1.1.2 特点用途 1.2 环境配置 1.2.1 下载安装1.2.2 环境配置 1.2.2.1 添加环境变量1.2.2.2 各个环境变量理解 1.2.3 验证环境变量 1.3 包管理工具 Go Modules 1.3.1 开启使用1.3.2 添加依赖包1.3.3 配置国内包源 1.3.3.1 通过 go env 配置1.…

作者头像 李华
网站建设 2026/3/15 23:02:44

clickhouse-介绍、安装、数据类型、sql

1、介绍 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用SQL查询实时生成分析数据报告。 OLAP&#xff08;On-Line Ana…

作者头像 李华
网站建设 2026/3/15 5:06:23

GO 快速升级Go版本

由于底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go老版本已经不足满足需求了&#xff0c;必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version [rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …

作者头像 李华
网站建设 2026/3/15 16:02:37

GaussDB数据库中SQL诊断解析之配置SQL限流

配置SQL限流 GaussDB提供SQL限流功能&#xff0c;当存在异常SQL&#xff08;如存在不优索引&#xff09;、SQL并发量上升时&#xff0c;通过SQL限流功能控制异常SQL的访问量或者并发量&#xff0c;保障服务的可用性。 前提条件 登录账号需要具备授权项“gaussdb:instance:listF…

作者头像 李华
网站建设 2026/3/15 15:55:29

交通仿真软件:Aimsun_(5).交通流量模拟

交通流量模拟 1. 交通流量的基本概念 交通流量是指在一定时间内通过某一道路断面的车辆数量。在交通仿真软件中&#xff0c;交通流量的模拟是核心功能之一&#xff0c;它可以帮助交通工程师和规划人员评估道路网络的性能&#xff0c;优化交通管理策略&#xff0c;预测交通拥堵等…

作者头像 李华
网站建设 2026/3/17 10:31:00

Flask:后端框架使用

文章目录 1、介绍2、demo演示3、Flask请求和响应 3.1 演示demo3.2 request获取请求体数据3.3 requests发送请求3.4 响应返回和接收 4、特殊路由 4.1 路由重定向4.2 路由拦截器 1、介绍 Flask是由python语言编写的轻量级Web应用框架&#xff0c;主要应用于后端框架&#xff…

作者头像 李华