基于RockyLinux官方base镜像、分层构建自定义Nginx及常见版本Java基础镜像

1 基于RockyLinux官方base镜像、分层构建自定义Nginx及常见版本Java基础镜像

1.1 Nginx

1.1.1 镜像制作规划

imagePlanning

1.1.1.1 RockyLinux基础镜像制作

1.1.1.1.1 镜像文件列表
root@master01:/opt/k8s-data/dockerfile/system/rockylinux# tree
.
├── Dockerfile
├── build-command.sh
└── filebeat-8.19.10-x86_64.rpm

1 directory, 3 files
1.1.1.1.2 Dockerfile文件内容

安装基础命令并设置中国时区
安装基础命令并设置中国时区

root@master01:/opt/k8s-data/dockerfile/system/rockylinux# cat Dockerfile 
#自定义Centos 基础镜像
FROM registry.cn-hangzhou.aliyuncs.com/myhubregistry/rockylinux:9.3.20231119 
LABEL maintainer="YourName <your E-mail>" \
      version="1.0" \
      description="This is a myserver project image"
ADD filebeat-8.19.10-x86_64.rpm /tmp
#RUN cd /etc/yum.repos.d/ && rm -rf ./*
#ADD Centos-7.repo /etc/yum.repos.d/Centos-7.repo
RUN yum makecache && yum install -y /tmp/filebeat-8.19.10-x86_64.rpm  procps-ng vim wget tree  iputils telnet gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop && echo "alias ll='ls -l'" >> ~/.bashrc && rm -rf /etc/localtime /tmp/filebeat-8.19.10-x86_64.rpm && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  && useradd nginx -u 2088
1.1.1.1.3 build-command脚本

基于脚本实现镜像自动build及上传到harbor功能

#!/bin/bash
nerdctl build -t harbor.zhou-kai.com/baseimages/myserver-rockylinux-base:9.3.20260214 .
nerdctl push harbor.zhou-kai.com/baseimages/myserver-rockylinux-base:9.3.20260214
1.1.1.1.4 执行脚本构建Rocky Linux基础镜像

构建完成后自动上传至本地harbor服务器

root@master01:/opt/k8s-data/dockerfile/system/rockylinux# bash build-command.sh 
[+] Building 480.7s (8/8)                                         
 => [internal] load build definition from Dockerfile         0.1s
 => => transferring dockerfile: 859B                         0.0s
[+] Building 481.3s (8/8) FINISHED                                
 => [internal] load build definition from Dockerfile         0.1s
 => => transferring dockerfile: 859B                         0.0s
 => [internal] load metadata for registry.cn-hangzhou.aliy  36.6s
 => [internal] load .dockerignore                            0.0s
 => => transferring context: 2B                              0.0s
 => [internal] load build context                            5.0s
 => => transferring context: 67.59MB                         5.0s
 => [1/3] FROM registry.cn-hangzhou.aliyuncs.com/myhubregi  20.3s
 => => resolve registry.cn-hangzhou.aliyuncs.com/myhubregis  0.0s
 => => sha256:446f83f14b236772583d069e6f 64.31MB / 64.31MB  12.7s
 => => extracting sha256:446f83f14b236772583d069e6f46a75e7e  7.2s 
 => [2/3] ADD filebeat-8.19.10-x86_64.rpm /tmp               0.6s 
 => [3/3] RUN yum makecache && yum install -y /tmp/filebe  275.5s 
 => exporting to docker image format                       147.0s 
 => => exporting layers                                     49.5s 
 => => exporting manifest sha256:fd986a5ddd0d0884504f905a8c  0.0s: => => exporting config sha256:5b0dcbb40b77b1738004abf456b5  0.0s0 => => sending tarball                                      97.4s
Loaded image: harbor.zhou-kai.com/baseimages/myserver-rockylinux-base:9.3.20260214
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:fd986a5ddd0d0884504f905a8c9232302a1a0b7b10ef0b594198542a7804c7f8) 
manifest-sha256:fd986a5ddd0d0884504f905a8c9232302a1a0b7b10ef0b594198542a7804c7f8: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:d14c567a6cfd0bcbcfa81e5b13d6751bd2e3743f8b0c646ef4ba0d14342a27c3:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:5b0dcbb40b77b1738004abf456b5eaa388b0a1d703216a7b52d55338ac729a9d:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:446f83f14b236772583d069e6f46a75e7e5456add656d1415a452618189fb825:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:724ea8ef63daeea414fcf2fe05d63005f861b7589b84d9997adbd2920c71ecf9:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 21.4s                                                                    total:  350.4  (16.4 MiB/s) 

1.1.1.2 Nginx基础镜像制作

制作一个通用的Nginx镜像

1.1.1.2.1 镜像文件列表
root@master01:/opt/k8s-data/dockerfile/web/pub-images/nginx-base# 
tree
.
├── Dockerfile
├── build-command.sh
└── nginx-1.28.1.tar.gz

1 directory, 3 files

1.1.1.2.2 Dockerfile文件内容
#Nginx Base Image
FROM harbor.zhou-kai.com/baseimages/myserver-rockylinux-base:9.3.20260214
LABEL maintainer="YourName <Your E-mail>" \
      version="1.0" \
      description="This is a myserver project image"

ARG NGINX_VERSION=1.28.1

RUN yum install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-${NGINX_VERSION}.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-${NGINX_VERSION} && ./configure  && make && make install && ln -sv  /usr/local/nginx/sbin/nginx /usr/sbin/nginx  &&rm -rf /usr/local/src/nginx-${NGINX_VERSION}.tar.gz 
1.1.1.2.3 build-command脚本

基于脚本实现镜像自动build及上传到harbor功能

#!/bin/bash
nerdctl build -t  harbor.zhou-kai.com/pub-images/nginx-base:v1.28.1  .

nerdctl push harbor.zhou-kai.com/pub-images/nginx-base:v1.28.1
root@master01:/opt/k8s-data/dockerfile/web/pub-images/nginx-base
1.1.1.2.4 执行脚本构建Nginx基础镜像
root@master01:/opt/k8s-data/dockerfile/web/pub-images/nginx-base# bash build-command.sh 
[+] Building 109.7s (9/9)                                                                                                             
 => [internal] load build definition from Dockerfile                                                                             0.0s
[+] Building 109.9s (9/9)                                                                                                             
[+] Building 110.1s (9/9) FINISHED                                                                                                    
 => [internal] load build definition from Dockerfile                                                                             0.0s
 => => transferring dockerfile: 737B                                                                                             0.0s
 => [internal] load metadata for harbor.zhou-kai.com/baseimages/myserver-rockylinux-base:9.3.20260214                           10.1s
 => [internal] load .dockerignore                                                                                                0.0s
 => => transferring context: 2B                                                                                                  0.0s
 => [1/4] FROM harbor.zhou-kai.com/baseimages/myserver-rockylinux-base:9.3.20260214@sha256:fd986a5ddd0d0884504f905a8c9232302a1a  0.1s
 => => resolve harbor.zhou-kai.com/baseimages/myserver-rockylinux-base:9.3.20260214@sha256:fd986a5ddd0d0884504f905a8c9232302a1a  0.1s
 => [internal] load build context                                                                                                0.0s
 => => transferring context: 42B                                                                                                 0.0s
 => CACHED [2/4] RUN yum install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-d  0.0s
 => CACHED [3/4] ADD nginx-1.28.1.tar.gz /usr/local/src/                                                                         0.0s
 => CACHED [4/4] RUN cd /usr/local/src/nginx-1.28.1 && ./configure  && make && make install && ln -sv  /usr/local/nginx/sbin/ng  0.0s
 => exporting to docker image format                                                                                            99.3s
 => => exporting layers                                                                                                          0.0s
 => => exporting manifest sha256:8ed416a4c314522352b5df792d5c2bbbbbe5edfd73bc3229b39a7c9c727187d1                                0.0s. => => exporting config sha256:0130a9057f3eba9d7fab52c58c4d6176c11350f89149e22c3d1386868c55d10a                                  0.0s
 => => sending tarball                                                                                                          99.3s
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:8ed416a4c314522352b5df792d5c2bbbbbe5edfd73bc3229b39a7c9c727187d1) 
manifest-sha256:8ed416a4c314522352b5df792d5c2bbbbbe5edfd73bc3229b39a7c9c727187d1: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:c5d27a9fa3f2a757d3f6a9624d191779f17b483c5f9ee38664711f319e1ef44c:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:0130a9057f3eba9d7fab52c58c4d6176c11350f89149e22c3d1386868c55d10a:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:446f83f14b236772583d069e6f46a75e7e5456add656d1415a452618189fb825:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:724ea8ef63daeea414fcf2fe05d63005f861b7589b84d9997adbd2920c71ecf9:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:d14c567a6cfd0bcbcfa81e5b13d6751bd2e3743f8b0c646ef4ba0d14342a27c3:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:fed8c78e509c0878123025222d8c10354a99cfe853e81a08313918565942123a:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:65affb770ac39aac28d316f2a5e3516d51d7e0b190b9e3e420d8ac673f7d4d7e:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 22.8s                                                                    total:  362.1  (15.9 MiB/s)     

1.1.1.3 Nginx业务镜像制作

基于Nginx基础镜像,制作不同服务的Nginx业务镜像

1.1.1.3.1 镜像文件列表
# tree
.
├── Dockerfile
├── build-command.sh
├── index.html
├── nginx.conf
├── webapp
│   └── index.html
└── webapp.tar.gz

2 directories, 6 files

1.1.1.3.2 Dockerfile文件内容
#Nginx 1.28.1
FROM harbor.zhou-kai.com/pub-images/nginx-base:v1.28.1 

ADD nginx.conf /usr/local/nginx/conf/nginx.conf
#可选添加静态文件
ADD webapp.tar.gz  /usr/local/nginx/html/webapp/
ADD index.html  /usr/local/nginx/html/index.html

RUN ln -sf /dev/stdout /usr/local/nginx/logs/access.log && ln -sf /dev/stderr /usr/local/nginx/logs/error.log

#可选静态资源挂载路径、目录会自动初始化
#RUN mkdir -p /usr/local/nginx/html/webapp/static /usr/local/nginx/html/webapp/images 

EXPOSE 80 443

CMD ["nginx"] 
1.1.1.3.3 buid-command脚本
#!/bin/bash
TAG=$1
nerdctl build -t harbor.zhou-kai.com/myserver/frontend-web:${TAG} .
echo "镜像构建完成,即将上传到harbor"
nerdctl push harbor.zhou-kai.com/myserver/frontend-web:${TAG}
#echo "镜像上传到harbor完成"
1.1.1.3.4 执行脚本构建Nginx业务镜像
# bash build-command.sh v1

1.2 Tomcat

基于基础的RockyLinux镜像,制作公司内部基础镜像-->JDK镜像-->Tomcat基础镜像-->Tomcat业务镜像.

1.2.1 OracleJDK基础镜像制作

1.2.1.1 JDK基础镜像文件列表

root@master01:/opt/k8s-data/dockerfile/web/pub-images/oraclejdk-1.8.212# ls
Dockerfile        jdk-8u212-linux-x64.tar.gz  profile
build-command.sh  jdk1.8.0_212

1.2.1.2 Dockerfile文件内容

#JDK Base Image
FROM harbor.zhou-kai.com/baseimages/myserver-rockylinux-base:9.3.20260214

LABEL maintainer="YourName <Your Email>" \
      version="1.0" \
      description="This is a myserver project image"

ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/local/jdk
ADD profile /etc/profile


ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH=$PATH:$JAVA_HOME/bin

1.2.1.3 build-command脚本

#!/bin/bash
nerdctl build -t  harbor.zhou-kai.com/pub-images/oraclejdk-base:v1.8.212  .
nerdctl push  harbor.zhou-kai.com/pub-images/oraclejdk-base:v1.8.212

1.2.1.4 执行脚本构建JDK基础镜像

# bash build-command.sh 
[+] Building 172.3s (9/9)                                      
 => [internal] load build definition from Dockerfile      0.0s
 => => transferring dockerfile: 514B                      0.0s
[+] Building 173.4s (9/9) FINISHED                             
 => [internal] load build definition from Dockerfile      0.0s
 => => transferring dockerfile: 514B                      0.0s
 => [internal] load metadata for harbor.zhou-kai.com/ba  10.1s
 => [internal] load .dockerignore                         0.0s
 => => transferring context: 2B                           0.0s
 => CACHED [1/4] FROM harbor.zhou-kai.com/baseimages/mys  0.2s
 => => resolve harbor.zhou-kai.com/baseimages/myserver-r  0.2s
 => [internal] load build context                        11.4s
 => => transferring context: 195.05MB                    11.4s 
 => [2/4] ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/  6.2s
 => [3/4] RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/lo  0.7s
 => [4/4] ADD profile /etc/profile                        0.1s
 => exporting to docker image format                    143.3s
 => => exporting layers                                  21.5s
 => => exporting manifest sha256:c041ebc3ff6d2adda2fab32  0.0s1 => => exporting config sha256:77a5a771880af970a46f3ab1d  0.0sf => => sending tarball                                  121.7s
Loaded image: harbor.zhou-kai.com/pub-images/oraclejdk-base:v1.8.212
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:c041ebc3ff6d2adda2fab32ab262211391495e3e906ce6826492f25c4fee9bc6) 
manifest-sha256:c041ebc3ff6d2adda2fab32ab262211391495e3e906ce6826492f25c4fee9bc6: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:67f29a42b95221c97cd541f5da32df4da1d1c1551090fcdefb251f552aea807d:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:77a5a771880af970a46f3ab1dc86678312667e2c62460b60aa2324adb1ac850e:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:446f83f14b236772583d069e6f46a75e7e5456add656d1415a452618189fb825:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:724ea8ef63daeea414fcf2fe05d63005f861b7589b84d9997adbd2920c71ecf9:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:d14c567a6cfd0bcbcfa81e5b13d6751bd2e3743f8b0c646ef4ba0d14342a27c3:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:ed0d24b613125ba507cefbf686cd621dc6b2f658d46784becb96927122c99d39:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:6c2dc9f27ab43d190889a616e75fa8de31b0e3596522b5de2f3f2157bbd0a1ba:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 24.4s                                                                    total:  537.7  (22.0 MiB/s)

1.2.1.5 验证JDK镜像作为容器启动后的java环境

#nerdctl run -it --rm harbor.zhou-kai.com/pub-images/oraclejdk-base:v1.8.212 bash
[root@dc6638aa3e2e /]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

1.2.2 OpenJDK镜像制作

1.2.2.1 OpenJDK镜像文件列表

.
├── 1.openjdk-21.0.10-base
│   ├── Dockerfile
│   └── build-command.sh
└── 2.openjdk-21.0.10
    ├── Dockerfile
    ├── build-command.sh
    ├── sources.list
    └── ubuntu.sources

3 directories, 6 files
#其中1.openjdk-21.0.10-base为基础镜像,2.openjdk-21.0.10为最终镜像

1.2.2.2 基础镜像Dockerfile文件内容

# https://hub.docker.com/_/openjdk 已废弃,本镜像基于sapmachine:21.0.10-jdk-ubuntu-24.04
FROM sapmachine:21.0.10-jdk-ubuntu-24.04-source 
RUN apt update && apt install -y ca-certificates curl gnupg
1.2.2.3 基础镜像build-command脚本
#!/bin/bash
#
nerdctl build -t harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base .

nerdctl push harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base
1.2.2.4 构建基础镜像
[+] Building 107.8s (6/6)                                                                                                             
 => [internal] load build definition from Dockerfile                                                                             0.1s
[+] Building 108.0s (6/6)                                                                                                             
[+] Building 108.2s (6/6) FINISHED                                                                                                    
 => [internal] load build definition from Dockerfile                                                                             0.1s
 => => transferring dockerfile: 335B                                                                                             0.0s
 => [internal] load metadata for docker.io/library/sapmachine:21.0.10-jdk-ubuntu-24.04                                          26.2s
 => [internal] load .dockerignore                                                                                                0.0s
 => => transferring context: 2B                                                                                                  0.0s
 => [1/2] FROM docker.io/library/sapmachine:21.0.10-jdk-ubuntu-24.04@sha256:de13424fa7c25204975ee23302248362112f29433e487f01587  0.1s
 => => resolve docker.io/library/sapmachine:21.0.10-jdk-ubuntu-24.04@sha256:de13424fa7c25204975ee23302248362112f29433e487f01587  0.1s
 => CACHED [2/2] RUN apt update && apt install -y ca-certificates curl gnupg                                                     0.0s
 => exporting to docker image format                                                                                            81.1s
 => => exporting layers                                                                                                          0.0s
 => => exporting manifest sha256:74a46a2a22897b77677f08de89a7bfe0d81115c25427fd98204064ae0443f4b4                                0.0s7 => => exporting config sha256:57337bbd3918a493a3037228112737b3ea286e5a93cd6934a8272088af97e07e                                  0.0s
 => => sending tarball                                                                                                          81.0s
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:74a46a2a22897b77677f08de89a7bfe0d81115c25427fd98204064ae0443f4b4) 
manifest-sha256:74a46a2a22897b77677f08de89a7bfe0d81115c25427fd98204064ae0443f4b4: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:c61640bd1195b51474d9f4ecf1cc528ec1a76c63f53b823d055072a3bfcae0b3:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:57337bbd3918a493a3037228112737b3ea286e5a93cd6934a8272088af97e07e:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:a3629ac5b9f4680dc2032439ff2354e73b06aecc2e68f0035a2d7c001c8b4114:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:231628878931cb2e916a9a678eb219b283e31fcf07667b01271007b0ac0f8193:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 18.6s                                                                    total:  281.3  (15.1 MiB/s)                                      
1.2.2.5 最终JDK镜像Dockerfile文件
# https://hub.docker.com/_/openjdk 已废弃,本镜像基于sapmachine:21.0.10-jdk-ubuntu-24.04
FROM harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base 
USER root
ADD sources.list /etc/apt/sources.list
ADD ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources
#RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
RUN apt update -y && apt install -y tzdata locales fonts-noto-cjk wget  unzip  telnet net-tools  iputils-ping lsof less vim curl procps locales fonts-noto-cjk wget curl unzip  telnet net-tools  iputils-ping lsof less vim  procps  && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "alias ll='ls -l'" >> ~/.bashrc
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 && dpkg-reconfigure -f noninteractive tzdata
ENV LANG=zh_CN.utf8
1.2.2.6 最终JDK镜像build-command脚本
#!/bin/bash
nerdctl build -t harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04 . 

nerdctl push harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04
1.2.2.7 构建最终JDK镜像
[+] Building 230.3s (12/12)                                                                                                           
 => => transferring dockerfile: 1.04kB                                                                                           0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base                        20.2s
[+] Building 230.4s (12/12)                                                                                                           
 => => transferring dockerfile: 1.04kB                                                                                           0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base                        20.2s
 => [auth] pub-images/sapmachine:pull token for harbor.zhou-kai.com                                                              0.0s
 => [internal] load .dockerignore                                                                                                0.0s
[+] Building 230.6s (12/12)                                                                                                           
 => => transferring dockerfile: 1.04kB                                                                                           0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base                        20.2s
[+] Building 230.7s (12/12)                                                                                                           
 => => transferring dockerfile: 1.04kB                                                                                           0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base                        20.2s
[+] Building 230.9s (12/12)                                                                                                           
 => => transferring dockerfile: 1.04kB                                                                                           0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base                        20.2s
[+] Building 231.0s (12/12)                                                                                                           
 => => transferring dockerfile: 1.04kB                                                                                           0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base                        20.2s
[+] Building 231.2s (12/12)                                                                                                           
 => => transferring dockerfile: 1.04kB                                                                                           0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base                        20.2s
[+] Building 231.3s (12/12)                                                                                                            => => transferring dockerfile: 1.04kB                                                                                           0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base                        20.2s
[+] Building 231.4s (12/12) FINISHED                                                                                                  
 => [internal] load build definition from Dockerfile                                                                             0.0s
 => => transferring dockerfile: 1.04kB                                                                                           0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base                        20.2s
 => [auth] pub-images/sapmachine:pull token for harbor.zhou-kai.com                                                              0.0s
 => [internal] load .dockerignore                                                                                                0.0s
 => => transferring context: 2B                                                                                                  0.0s
 => [1/6] FROM harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base@sha256:74a46a2a22897b77677f08de89a7bfe0d  0.1s
 => => resolve harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04-base@sha256:74a46a2a22897b77677f08de89a7bfe0d  0.0s
 => [internal] load build context                                                                                                0.1s
 => => transferring context: 2.80kB                                                                                              0.1s
 => [2/6] ADD sources.list /etc/apt/sources.list                                                                                 0.1s
 => [3/6] ADD ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources                                                              0.1s
 => [4/6] RUN apt update -y && apt install -y tzdata locales fonts-noto-cjk wget  unzip  telnet net-tools  iputils-ping lsof l  77.0s
 => [5/6] RUN echo "alias ll='ls -l'" >> ~/.bashrc                                                                               0.6s
 => [6/6] RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 && dpkg-reconfigure -f noninteractive tzdata                             3.2s
 => exporting to docker image format                                                                                           128.7s
 => => exporting layers                                                                                                         20.2s
 => => exporting manifest sha256:04b4375c58cdb638300bba122459f9707dbc94ab24ba68571f7b09685a59bd4b                                0.0s
 => => exporting config sha256:c1aae259dc8b81ff6452abf38a54f1adb5f1622b0b87bd8aa93ad8243229cc5d                                  0.0s
 => => sending tarball                                                                                                         108.4s
Loaded image: harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:04b4375c58cdb638300bba122459f9707dbc94ab24ba68571f7b09685a59bd4b) 
manifest-sha256:04b4375c58cdb638300bba122459f9707dbc94ab24ba68571f7b09685a59bd4b: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:31a957acce2ee3aa7ade8e1087e3e74b0b430b71f478fb8b715b3acedf4c5bd8:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:c1aae259dc8b81ff6452abf38a54f1adb5f1622b0b87bd8aa93ad8243229cc5d:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:a3629ac5b9f4680dc2032439ff2354e73b06aecc2e68f0035a2d7c001c8b4114:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:231628878931cb2e916a9a678eb219b283e31fcf07667b01271007b0ac0f8193:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:c61640bd1195b51474d9f4ecf1cc528ec1a76c63f53b823d055072a3bfcae0b3:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:950e179158c76ff0cbfde2044f9d9f9cb66401c9ea4a88885f9f9a6053a6ccbc:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:9076c6215f9e7d1dc8e5d2c3a037b983a98bbc3b7ca6a570408372b75aa4f168:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:ad046dfead5dcf7bfc5c7d0ea3a4a092c32914802acfdb3487562e149fe859a8:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:dfe12aee1cd9fa6bb4b0f1669459b402e6e29bb0e00f264d5fcd5780daa055bf:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 14.4s                                                                    total:  139.1  (9.6 MiB/s)                                       
1.2.2.8 验证JDK镜像作为容器启动后的java环境
#nerdctl run -it --rm harbor.zhou-kai.com/pub-images/sapmachine:21.0.10-jdk-ubuntu-24.04 bash
root@b95839a92937:/# java -version
openjdk version "21.0.10" 2026-01-20 LTS
OpenJDK Runtime Environment SapMachine (build 21.0.10+7-LTS)
OpenJDK 64-Bit Server VM SapMachine (build 21.0.10+7-LTS, mixed mode, sharing)

1.2.3 Tomcat基础镜像制作

1.2.3.1 基础镜像文件列表

.
├── Dockerfile
├── apache-tomcat-8.5.43.tar.gz
└── build-command.sh

1 directory, 3 files

1.2.3.2 Dockerfile文件内容

#Tomcat 8.5.43基础镜像
FROM harbor.zhou-kai.com/pub-images/oraclejdk-base:v1.8.212 

LABEL maintainer="YourName <YourEmail>" \
      version="1.0" \
      description="This is a myserver project image"

RUN mkdir /apps /data/tomcat/webapps /data/tomcat/logs -pv 
ADD apache-tomcat-8.5.43.tar.gz  /apps
RUN useradd tomcat -u 2098 && ln -sv /apps/apache-tomcat-8.5.43 /apps/tomcat && chown -R tomcat.tomcat /apps /data -R
1.2.3.3 build-command脚本
#!/bin/bash
nerdctl  build -t harbor.zhou-kai.com/pub-images/tomcat-base:v8.5.43  .

nerdctl  push harbor.zhou-kai.com/pub-images/tomcat-base:v8.5.43
1.2.3.4 构建镜像
[+] Building 176.9s (11/11)                                                                                                           
 => [internal] load build definition from Dockerfile                                                                             0.0s
[+] Building 177.6s (11/11) FINISHED                                                                                                  
 => [internal] load build definition from Dockerfile                                                                             0.0s
 => => transferring dockerfile: 468B                                                                                             0.0s
 => [internal] load metadata for harbor.zhou-kai.com/pub-images/oraclejdk-base:v1.8.212                                         20.2s
 => [auth] pub-images/oraclejdk-base:pull token for harbor.zhou-kai.com                                                          0.0s
 => [internal] load .dockerignore                                                                                                0.0s
 => => transferring context: 2B                                                                                                  0.0s
 => [1/4] FROM harbor.zhou-kai.com/pub-images/oraclejdk-base:v1.8.212@sha256:c041ebc3ff6d2adda2fab32ab262211391495e3e906ce68264  0.4s
 => => resolve harbor.zhou-kai.com/pub-images/oraclejdk-base:v1.8.212@sha256:c041ebc3ff6d2adda2fab32ab262211391495e3e906ce68264  0.1s
 => [internal] load build context                                                                                                1.1s
 => => transferring context: 9.72MB                                                                                              1.1s
 => [auth] pub-images/oraclejdk-base:pull token for harbor.zhou-kai.com                                                          0.0s 
 => [2/4] RUN mkdir /apps /data/tomcat/webapps /data/tomcat/logs -pv                                                             1.1s 
 => [3/4] ADD apache-tomcat-8.5.43.tar.gz  /apps                                                                                 0.4s 
 => [4/4] RUN useradd tomcat -u 2098 && ln -sv /apps/apache-tomcat-8.5.43 /apps/tomcat && chown -R tomcat.tomcat /apps /data -R  1.7s 
 => exporting to docker image format                                                                                           152.7s 
 => => exporting layers                                                                                                          2.8s
 => => exporting manifest sha256:3713025a55fa3731f9cdd8d942f15df1e8409fd2f9d7ae4cea6e9174391112a0                                0.0s
 => => exporting config sha256:5d682fbb4dca3ba7a6673e071182e8ec9cdfa0f955824d070bd45ca854319a40                                  0.0s) => => sending tarball                                                                                                         149.9s
Loaded image: harbor.zhou-kai.com/pub-images/tomcat-base:v8.5.43
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:3713025a55fa3731f9cdd8d942f15df1e8409fd2f9d7ae4cea6e9174391112a0) 
manifest-sha256:3713025a55fa3731f9cdd8d942f15df1e8409fd2f9d7ae4cea6e9174391112a0: done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:e7663517dfe29b63304813922d6b0cc522494414c40816019e00363630ded28b:    done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:5d682fbb4dca3ba7a6673e071182e8ec9cdfa0f955824d070bd45ca854319a40:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:446f83f14b236772583d069e6f46a75e7e5456add656d1415a452618189fb825:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:724ea8ef63daeea414fcf2fe05d63005f861b7589b84d9997adbd2920c71ecf9:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:d14c567a6cfd0bcbcfa81e5b13d6751bd2e3743f8b0c646ef4ba0d14342a27c3:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:ed0d24b613125ba507cefbf686cd621dc6b2f658d46784becb96927122c99d39:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:6c2dc9f27ab43d190889a616e75fa8de31b0e3596522b5de2f3f2157bbd0a1ba:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:67f29a42b95221c97cd541f5da32df4da1d1c1551090fcdefb251f552aea807d:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:3ac2ac5ea513f19564c33938b5e1b003bfe0d2a7d4f0a77b26baad217db8365b:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:c5a0e6e1bd5c273961a4e745acd7b8964d14e087d15d0c24de4d6fb3906616c7:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 27.2s                                                                    total:  556.3  (20.4 MiB/s)                                      

1.2.3.5 测试Tomcat镜像作为容器启动
#nerdctl run -it --rm -p 8808:8080 harbor.zhou-kai.com/pub-images/tomcat-base:v8.5.43
[root@700ab85552c2 /]# /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
Tomcat started.

tomcatTest

1.2.4 Tomcat业务镜像app1制作

后期可以按此步骤制作app2、appN镜像

1.2.4.1 业务镜像文件列表

.
├── Dockerfile
├── app1.tar.gz
├── build-command.sh
├── catalina.sh
├── filebeat.yml
├── myapp
│   └── index.html
├── run_tomcat.sh
└── server.xml

2 directories, 8 files

1.2.4.2 Dockerfile文件内容

#tomcat web1
FROM harbor.zhou-kai.com/pub-images/tomcat-base:v8.5.43

ADD catalina.sh /apps/tomcat/bin/catalina.sh
ADD server.xml /apps/tomcat/conf/server.xml
#使用指定的方式添加代码
ADD myapp/* /data/tomcat/webapps/myapp1/
ADD app1.tar.gz /data/tomcat/webapps/app1/

ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
#ADD filebeat.yml /etc/filebeat/filebeat.yml 
RUN chown  -R nginx.nginx /data/ /apps/
#ADD filebeat-7.5.1-x86_64.rpm /tmp/
#RUN cd /tmp && yum localinstall -y filebeat-7.5.1-amd64.deb

EXPOSE 8080 8443

CMD ["/apps/tomcat/bin/run_tomcat.sh"]
1.2.4.3 build-command脚本
#!/bin/bash
TAG=$1
#docker build -t  harbor.zhou-kai.com/myserver/tomcat-app1:${TAG} .
#sleep 3
#docker push  harbor.zhou-kai.com/myserver/tomcat-app1:${TAG}

nerdctl build -t  harbor.zhou-kai.com/myserver/tomcat-app1:${TAG} .
nerdctl push  harbor.zhou-kai.com/myserver/tomcat-app1:${TAG}
1.2.4.4 构建镜像
bash build-command.sh 2026-02-15_20_21_00
1.2.4.5 测试Tomcat镜像作为容器启动
#nerdctl  run -it --rm -p 8809:8080 harbor.zhou-kai.com/myserver/tomcat-app1:2026-02-15_20_21_00

1.2.4.6 访问Tomcat镜像Web页面

1.2.5 在k8s环境运行tomcat

1.2.5.1 基于Tomcat业务镜像创建deployment

kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    app: myserver-tomcat-app1-deployment-label
  name: myserver-tomcat-app1-deployment
  namespace: myserver
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myserver-tomcat-app1-selector
  template:
    metadata:
      labels:
        app: myserver-tomcat-app1-selector
    spec:
      containers:
      - name: myserver-tomcat-app1-container
        image: harbor.zhou-kai.com/myserver/tomcat-app1:2026-02-15_20_21_00 
        #imagePullPolicy: IfNotPresent
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          protocol: TCP
          name: http
        env:
        - name: "password"
          value: "123456"
        - name: "age"
          value: "18"
        resources:
          limits:
            cpu: 0.5
            memory: "512Mi"
          requests:
            cpu: 0.5
            memory: "512Mi"
        volumeMounts:
        - name: myserver-images
          mountPath: /data/tomcat/webapps/images
          readOnly: false
        - name: myserver-statics
          mountPath: /data/tomcat/webapps/statics
          readOnly: false
      volumes:
      - name: myserver-images
        nfs:
          server: 172.31.7.109
          path: /data/k8sdata/myserver/images
      - name: myserver-statics
        nfs:
          server: 172.31.7.109
          path: /data/k8sdata/myserver/statics
#      nodeSelector:
#        project: myserver
#        app: tomcat

1.2.5.2 创建service

kind: Service
apiVersion: v1
metadata:
  labels:
    app: myserver-tomcat-app1-service-label
  name: myserver-tomcat-app1-service
  namespace: myserver
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
    nodePort: 30098
  selector:
    app: myserver-tomcat-app1-selector

1.2.5.3 访问测试

tomcat_app1

posted @ 2026-02-24 10:15  Y99017  阅读(26)  评论(0)    收藏  举报