首页 > 其他分享 >Docker 打包Maven项目Jar包缓存方案

Docker 打包Maven项目Jar包缓存方案

时间:2022-10-18 17:33:43浏览次数:45  
标签:maven RUN repository Jar Maven Dmaven Docker COPY

背景:

  Docker每次build都会重新生成一个镜像,导致每次执行maven构建会重复下载jar包,一般一个spring boot 单体应用光是Jar包都有50M起步,假设网络延迟比较大一个镜像打包起码要5分钟起步,于是经过实验总结出2套方案,可以很好的避免每次构建镜像重复下载Jar包问题

 

方案一

 1.先新建一份DockerFile_Base 基础镜像

# 拉取编译环境
FROM maven:3.8.1 as builder
# 将源码拷贝到固定目录
COPY . /repository
# 切换到源码目录
WORKDIR /repository
COPY settings.xml /root/.m2/settings.xml
# 使用maven进行编译
RUN mvn clean package -DskipTests
RUN rm -rf /repository

2.在服务器上执行build,让jar包提前下载到maven仓库

docker build -t='maven-base:latest.

3.依赖的Maven服务模块DockerFile脚本依赖Base镜像

# 拉取编译环境
FROM maven-base:latest as builder
# 将源码拷贝到固定目录
COPY . /repository
# 切换到源码目录
WORKDIR /repository
COPY settings.xml /root/.m2/settings.xml
# 使用maven进行编译
ARG EVN_NAME=dev
RUN mvn clean package -pl consumer -am -amd -DskipTests -P ${EVN_NAME}

# 拉取运行环境镜像
FROM openjdk:11.0.16
VOLUME /tmp
COPY --from=builder /repository/consumer/target/app /app
WORKDIR /app/bin
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8090
RUN rm -rf /repository
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","-Xms4g", "-Xmx4g", "-XX:+UseG1GC","xxx.jar"]

 

方案二

  不依赖于方案一的Docker Base,通过-Dmaven.repo.local 指定Jar包路径

#缓存maven仓库
RUN  mvn install -Dmaven.test.skip=true -Dmaven.repo.local=./.m2
# debug
RUN ls -l

# 构建打包
RUN mvn -Dmaven.repo.local=./.m2 install -Dmaven.test.skip=true -P prod

 

标签:maven,RUN,repository,Jar,Maven,Dmaven,Docker,COPY
From: https://www.cnblogs.com/zdd-java/p/16801015.html

相关文章

  • 【错误记录】jcenter 移除问题 ( Please remove usages of `jcenter()` Maven reposit
    报错信息:Pleaseremoveusagesof`jcenter()`MavenrepositoryfromyourbuildscriptsandmigrateyourbuildtootherMavenrepositories.Thisrepositoryisde......
  • 基于kubernetes+docker+jenkins的DevOps实践
    基于kubernetes+docker+jenkins的DevOps实践之前自己的项目开发就搭了个cicd的环境,那时候是在本就小的可怜的服务器上搭了一套jenkins+dockerregistry+docker总......
  • 云原生架构:容器和Docker
    何为云?技术的变革,一定是思想先行,云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,Cloud+Native。Cloud表示应用程序位于云中......
  • 云原生实战-基于K8s+Docker+DevOps+Jenkins
    云原生实战-基于K8s+Docker+DevOps+Jenkins之前自己的项目开发就搭了个cicd的环境,那时候是在本就小的可怜的服务器上搭了一套jenkins+dockerregistry+docker见......
  • Docker 容器连接
    学习docker最好还是整个服务器,买太贵了,建议租一个,我用的是3A服务器!!!前面我们实现了通过网络端口来访问运行在docker容器内的服务。容器中可以运行一些网络应用,要让......
  • Docker 容器连接
    学习docker最好还是整个服务器,买太贵了,建议租一个,我用的是3A服务器!!!前面我们实现了通过网络端口来访问运行在docker容器内的服务。容器中可以运行一些网络应用,要让外部......
  • 【Bug解决】centos安装docker显示 No package docker-ce available
    问题:我在如下安装docker的命令到yum-yinstalldocker-ce报错Nopackagedocker-ceavailable#1.下载关于docker的依赖环境yum-yinstallyum-utilsdevice-mapper-per......
  • 使用docker制作自启
    Dockfile#!/bin/bashFROMamd64/ubuntu:18.04RUNln-snf/usr/share/zoneinfo/Asia/Shanghai/etc/localtime&&echoAsia/Shanghai>/etc/timezoneENVLANGC.UTF-......
  • Linux (Debain11) 安装 docker-desktop 时出现依赖问题
    安装Docker-Desktop出现依赖问题添加docker-ce-cli的安装源$echo\"deb[arch=$(dpkg--print-architecture)signed-by=/usr/share/keyrings/docker-archive-keyr......
  • docker 安装mysql主从模式
    1.创建主数据库容器dockerrun-p3306:3306--namemysql-master-v/zgbo/mysql_m/log:/var/log/mysql-v/zgbo/mysql_m/data:/var/lib/mysql-v/zgbo/mysql_m/conf:......