docker镜像优化

docker镜像体积分析

        image

         源镜像本来体积为2.5G大小,通过docker save之后镜像体积变得超级大

        image

       原因分析

        image

         image

优化示例步骤

FROM 192.168.30.113/library/jdk-ctyun:1.8.0
#设置java运行参数
ENV JAVA_OPTS="-server -Xms4g -Xmx20g -XX:PermSize=4g -XX:MaxPermSize=20g"
#设置要运行的jar包名称
ENV JAR_FILE="tlog"
#设置程序服务名称
ENV SERVER_NAME="tlog"
#设置程序服务端口
ENV SERVER_PORT="8089"
#设置存储目录参数
ENV BASE_DIR="/"
ENV TEMP_DIR="/opt"
ENV TZ=Asia/Shanghai

#设置云眼参数
ENV PINPOINT_PACK="pinpoint-agent-2.3.3.zip"
ENV PINPOINT_FILE="pinpoint-bootstrap-2.3.3.jar"
ENV PINPOINT_DIR="pinpoint-agent-2.3.3"
ENV AGENTLOCAL="/pinpoint-agent-2.3.3/pinpoint-bootstrap-2.3.3.jar"
ENV APPLICATIONNAME="tlog"
ENV LICENCE=8431190006

#把包添加到临时目录
ADD ca.crt /ca.crt
ADD tlog /opt/tlog
ADD pinpoint-agent-2.3.3.zip /opt/pinpoint-agent-2.3.3.zip

RUN mkdir $BASE_DIR/$SERVER_NAME && mv $TEMP_DIR/$JAR_FILE $BASE_DIR && mv $TEMP_DIR/$PINPOINT_PACK $BASE_DIR && unzip $BASE_DIR/$PINPOINT_PACK -d $BASE_DIR && rm -fr $TEMP_DIR/* && echo '#!/bin/bash' >> /startup.sh && echo 'AGENTID=`ip addr | grep -o -e "inet [0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}" | grep -v "127.0.0" | grep -o -e "[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}"`' >> /startup.sh && echo 'java $JAVA_OPTS -javaagent:$AGENTLOCAL -Dpinpoint.agentId=$AGENTID-$SERVER_PORT -Dpinpoint.applicationName=$APPLICATIONNAME -Dpinpoint.licence=$LICENCE -jar /$JAR_FILE/lib/TLog.jar' >> /startup.sh && chmod 755 startup.sh

WORKDIR /tlog
ENV TZ=Asia/Shanghai
ENTRYPOINT ["sh","/startup.sh"]
体积大版本Dockerfile

优化Dockerfile 可以减少元数据和中间层镜像

      image

FROM 192.168.30.113/library/jdk-ctyun:1.8.0 

# 设置环境变量
ENV JAVA_OPTS="-server -Xms4g -Xmx20g -XX:PermSize=4g -XX:MaxPermSize=20g" \
    JAR_FILE="tlog" \
    SERVER_NAME="tlog" \
    SERVER_PORT="8089" \
    BASE_DIR="/" \
    TEMP_DIR="/opt" \
    TZ="Asia/Shanghai" \
    PINPOINT_PACK="pinpoint-agent-2.3.3.zip" \
    PINPOINT_FILE="pinpoint-bootstrap-2.3.3.jar" \
    PINPOINT_DIR="pinpoint-agent-2.3.3" \
    AGENTLOCAL="/pinpoint-agent-2.3.3/pinpoint-bootstrap-2.3.3.jar" \
    APPLICATIONNAME="tlog" \
    LICENCE=8431190006

# 复制证书和应用程序文件
COPY ca.crt /etc/ssl/certs/
COPY tlog /opt/tlog/
COPY pinpoint-agent-2.3.3.zip /opt/

# 使用单个RUN命令进行设置,减少镜像层数
RUN set -eux; \
    mkdir -p "$BASE_DIR/$SERVER_NAME"; \
    mv "/opt/$JAR_FILE" "$BASE_DIR"; \ 
    mv "/opt/$PINPOINT_PACK" "$BASE_DIR"; \  
    unzip "$BASE_DIR/$PINPOINT_PACK" -d "$BASE_DIR"; \
    rm -fr /opt/*; \
    AGENTID=$(ip addr | grep -o -e "inet [0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}" | grep -v "127.0.0" | grep -o -e "[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}"); \
    echo '#!/bin/bash\
    java $JAVA_OPTS -javaagent:$AGENTLOCAL -Dpinpoint.agentId=$AGENTID-$SERVER_PORT -Dpinpoint.applicationName=$APPLICATIONNAME -Dpinpoint.licence=$LICENCE -jar /$JAR_FILE/lib/TLog.jar' > /startup.sh; \
    chmod 755 /startup.sh

# 设置工作目录和入口点
WORKDIR /tlog
ENTRYPOINT ["sh", "/startup.sh"]
优化后Dockerfile

效果对比

           image

         image

          image

   导出本地镜像

        docker image prune -af

       image

        image

       镜像被正常压缩

docker镜像导出问题

             image

            image

             image

            image

             docker save 镜像名称  不等于  docker save 镜像名称:latest

             最好在镜像后面添加标签防止发生一些莫名的错误

posted @ 2026-09-21 12:12  不懂123  阅读(10)  评论(0)    收藏  举报