一、背景
微服务采用镜像部署,因此早期我们使用openjdk:8-jre作为基础镜像,但由于新需求需要在服务器中使用ping命令,而原先的镜像不能满足现有的需求。因此,需要基于原来镜像构建一个满足ping命令的镜像。
二、操作实现
1、基于原镜像构建一个新基础镜像,新增ping命令
dockerfile命令如下
FROM openjdk:8-jre
ENV TZ=PRC
COPY practice-demo.jar /app/app.jar
ENV SPRING_PROFILES_ACTIVE=prod
ENV SERVER_PORT=8080
ENV APP=app
# 新增ping命令
RUN apt-get update
RUN apt-get install -y iputils-ping
WORKDIR /app
EXPOSE 8080
VOLUME [ "/app/config", "/app/logs" ]
CMD ["/bin/bash", "-c", \
"java -Xbootclasspath/a:/app/web \
-XX:+UnlockExperimentalVMOptions \
-XX:+UseCGroupMemoryLimitForHeap \
-Dspring.appliation.name=${APP/modules-/} \
-jar /app/${APP}.jar"]
执行dockerfile脚本,并命名为:openjdk:8-jre-ping
docker build -t openjdk:8-jre-ping .
2、使用新镜像替代老镜像
FROM openjdk:8-jre-ping
ENV TZ=PRC
COPY practice-demo.jar /app/app.jar
ENV SPRING_PROFILES_ACTIVE=prod
ENV SERVER_PORT=8080
ENV APP=app
# 新增ping命令
#RUN apt-get update
#RUN apt-get install -y iputils-ping
WORKDIR /app
EXPOSE 8080
VOLUME [ "/app/config", "/app/logs" ]
CMD ["/bin/bash", "-c", \
"java -Xbootclasspath/a:/app/web \
-XX:+UnlockExperimentalVMOptions \
-XX:+UseCGroupMemoryLimitForHeap \
-Dspring.appliation.name=${APP/modules-/} \
-jar /app/${APP}.jar"]
执行dockerfile脚本
docker build -t app.latest .
上述镜像满足现有ping功能。
三、总结
1、背景
2、构建新基础镜像,并替换老基础镜像
3、类似的问题,此方案可以复用