将Spring Boot发布到K8S(一)
将Spring Boot程序打包成Docker镜像利用maven将程序打包成war或者jar打包成jar进入pom.xml文件目录,运行命令mvn clean install -Dmaven.test.skip=true执行打包。打包成war修改pom.xml文件<groupId>com.example</groupId&a
·
将Spring Boot程序打包成Docker镜像
利用maven将程序打包成war或者jar
-
打包成jar
进入pom.xml文件目录,运行命令
mvn clean install -Dmaven.test.skip=true
执行打包。 -
打包成war
-
修改pom.xml文件
<groupId>com.example</groupId> <artifactId>ROOT</artifactId> <packaging>jar</packaging>
jar修改为war
<groupId>com.example</groupId> <artifactId>ROOT</artifactId> <packaging>war</packaging>
加入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
去除包冲突(与Tomcat中自带的日志包会发生冲突)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency>
如果使用第三方的jar包, 需要将第三方的包所在目录作为资源文件目录(不然在打包后,不会自动加入该jar)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <webResources> <resource> <directory>${project.basedir}/libs</directory> <targetPath>WEB-INF/lib/</targetPath> <includes> <include>**/*.jar</include> </includes> </resource> </webResources> </configuration> </plugin>
注意:
- 在除去包冲突时,需要使用
mvn dependency:tree
命令去查看包依赖,去除重复的包
-
修改程序入口class文件
继承SpringBootServletInitializer,同时重写configure方法
@ServletComponentScan @SpringBootApplication(scanBasePackages={"com.example.data_lake_demo","com.liuyis.jsonfilter"}) public class DataLakeDemoApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(DataLakeDemoApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(DataLakeDemoApplication.class); } }
-
运行maven命令
mvn clean install -Dmaven.test.skip=true
执行打包
-
利用DockerFile将jar或者war包打成Docker镜像
-
将jar打成Docker镜像
DockerFile文件:
# 拉取JDK8的系统镜像 From java:8 # 设置时区 ENV TZ=Asia/Shanghai # 时区写入系统文件 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone VOLUME /tmp # 加入打包好的jar文件(xxxxx改为自己文件名) ADD ./target/xxxxxx.jar / ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/xxxxxx.jar"]
运行命令
docker build -t 自定义镜像名称 .
(注意后面有个 . 不要漏掉)如果需要将该镜像加入我本地的harbor仓库(需要自己搭建),则镜像名称需要为:
仓库地址/名称:v版本号
如:192.168.123.45:8000/library/data_lake:v1.0
-
将war打成Docker镜像
DockerFile文件:
# 拉取tomcat镜像 FROM tomcat:latest # 设置时区 ENV TZ=Asia/Shanghai # 时区写入系统文件 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 移除Tomcat目录下的ROOT目录 RUN rm -rf /usr/local/tomcat/webapps/ROOT # 将war包移入Tomcat的webapps目录下 COPY ./target/ROOT.war /usr/local/tomcat/webapps/ # 暴露的端口 EXPOSE 8080
运行命令
docker build -t 自定义镜像名称 .
(注意后面有个 . 不要漏掉)如果需要将该镜像加入我本地的harbor仓库(需要自己搭建),则镜像名称需要为:
仓库地址/名称:v版本号
如:192.168.123.45:8000/librarydata_lake:v1.0
注意:
- 需要写入中国时区,默认的时区是零时区,比北京时间早8小时
- 移除Tomcat的ROOT目录(同时要保证war的名称是ROOT)的目的,是为了保证接口的访问起始是从域名的根目录开始(ROOT下为根目录,如果是其他名称的文件夹,则需要在接口前加上文件夹的名称)
更多推荐
已为社区贡献3条内容
所有评论(0)