Skip to content

基础镜像重构之Java21Maven编译镜像

构建工具选型(来自章节d008)

kenaito-maven3:jdk21

镜像大小:762MB 构建耗时:22.1s(不包括下载环境包的时间)

shell
# 下载环境
if [ ! -f "Alibaba_Dragonwell_Standard_21.0.7.0.7.6_x64_linux.tar.gz" ];then
  curl -O https://dragonwell.oss-cn-shanghai.aliyuncs.com/21.0.7.0.7%2B6/Alibaba_Dragonwell_Standard_21.0.7.0.7.6_x64_linux.tar.gz
fi
if [ $? -ne 0 ]; then
  echo "下载 Alibaba_Dragonwell_Standard_21.0.7.0.7.6_x64_linux.tar.gz 文件失败"
  exit 1
fi

if [ ! -f "apache-maven-3.9.11-bin.tar.gz" ];then
  curl -O https://dlcdn.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz
fi
if [ $? -ne 0 ]; then
  echo "下载 apache-maven-3.9.11-bin.tar.gz 文件失败"
  exit 1
fi

# 释放文件,优化大小
rm -rf build
mkdir build
tar -xvf Alibaba_Dragonwell_Standard_21.0.7.0.7.6_x64_linux.tar.gz
if [ $? -ne 0 ]; then
  echo "初始化失败"
  exit 1
fi
tar -xvf apache-maven-3.9.11-bin.tar.gz
if [ $? -ne 0 ]; then
  echo "初始化失败"
  exit 1
fi
rm -f dragonwell-21.0.7.0.7+6-GA/lib/src.zip
mv dragonwell-21.0.7.0.7+6-GA build/jdk
mv apache-maven-3.9.11 build/maven
cd build && pwd

# maven配置(使用单引号 'EOF' 可以防止变量被提前解释)
cat > maven/conf/settings.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<settings
        xmlns="http://maven.apache.org/SETTINGS/1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository>/home/admin/repository</localRepository>
    <profiles>
        <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>central</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>snapshots</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
                <pluginRepository>
                    <id>snapshots</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <mirrors>
        <!-- 阿里云仓库 -->
        <mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        </mirror>
        <!-- 中央仓库1 -->
        <mirror>
            <id>repo1</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo1.maven.org/maven2/</url>
        </mirror>
        <!-- 中央仓库2 -->
        <mirror>
            <id>repo2</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo2.maven.org/maven2/</url>
        </mirror>
        <mirror>
            <id>mirror</id>
            <mirrorOf>!rdc-releases,!rdc-snapshots</mirrorOf>
            <name>mirror</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </mirror>
    </mirrors>
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>
</settings>
EOF

# 压缩成品
tar -czvf jdk.tgz jdk
tar -czvf maven.tgz maven
rm -rf jdk
rm -rf maven

## Maven环境配置
#cat > maven.sh << 'EOF'
#export MAVEN_HOME=/home/admin/maven
#export PATH=${MAVEN_HOME}/bin:$PATH
#EOF
#
## Jdk环境配置
#cat > jdk.sh << 'EOF'
#export JAVA_HOME=/home/admin/jdk
#export PATH=${JAVA_HOME}/bin:$PATH
#EOF

# Dockerfile
## CMD用于定义默认命令
cat > Dockerfile << 'EOF'
FROM alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest
LABEL MAINTAINER="tianjun@odboy.cn"
ENV TimeZone="Asia/Shanghai"
ENV JAVA_HOME="/home/admin/jdk"
ENV MAVEN_HOME="/home/admin/maven"
ENV PATH="$PATH:${JAVA_HOME}/bin:${MAVEN_HOME}/bin"
WORKDIR /home/admin
ADD jdk.tgz .
ADD maven.tgz .
RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone; \
sed -i 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/' /etc/yum.repos.d/*.repo; \
mkdir /home/admin/repository; \
chmod +x /home/admin/jdk/bin/*; \
chmod +x /home/admin/maven/bin/*;
VOLUME /home/admin/repository
CMD ["sleep","365d"]
EOF

# 构建镜像(docker可换成buildah)
docker build --no-cache -f Dockerfile -t kenaito-maven3:jdk21 .
if [ $? -ne 0 ]; then
  echo "构建镜像失败"
  exit 1
fi

# 运行测试
docker run kenaito-maven3:jdk21