maven项目容器化运行之2-maven中使用docker插件调用远程docker构建服务并在1Panel中运行
创始人
2024-12-26 19:34:24
0

一.背景

       公司主机管理小组的同事期望我们开发的maven项目能够在1Panel管理的docker容器部署。上一篇写了先开放1Panel中docker镜像构建能力maven项目容器化运行之1-基于1Panel软件将docker镜像构建能力分享给局域网-CSDN博客。这一篇就是演示maven工程的镜像构建、容器运行、运行验证。

      开发工具用的eclipse。

二.创建简单的maven工程

1.新建maven工程

  

2.添加pom依赖

 	4.0.0 	com.scantt 	hello-docker 	0.0.1-SNAPSHOT   	 		 		2.7.0 		 		1.8 		1.8 	  	 	 		 			 				org.springframework.boot 				spring-boot-dependencies 				${version.springboot} 				pom 				import 			 		 	 	 	 		 			org.springframework.boot 			spring-boot-starter-web 		 	 

3.创建运行入口文件

HelloDockerApplication.java

package com.scantt.docker;  import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;   @SpringBootApplication public class HelloDockerApplication {  	public static void main(String[] args) { 		SpringApplication.run(HelloDockerApplication.class, args); 	} }

4.创建简单的控制层响应文件

HelloController.java

package com.scantt.docker.controller;  import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;  @RestController public class HelloController {  	@GetMapping("/hello") 	public String hello(String name) { 		return "hello!" + name; 	}  } 

5.运行maven工程

HelloDockerApplication.java

在HelloDockerApplication.java中右键点击“Run As”=>“Java Application”。

控制台输出如下:

   .   ____          _            __ _ _  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )   '  |____| .__|_| |_|_| |_\__, | / / / /  =========|_|==============|___/=/_/_/_/  :: Spring Boot ::                (v2.7.0)  2024-07-15 18:45:27.306  INFO 9640 --- [           main] c.scantt.docker.HelloDockerApplication   : Starting HelloDockerApplication using Java 1.8.0_341 on zhaoshiping with PID 9640 (D:\zsp\tools\eclipse_workspaces\base_workspace\hello-docker\target\classes started by Dell in D:\zsp\tools\eclipse_workspaces\base_workspace\hello-docker) 2024-07-15 18:45:27.306  INFO 9640 --- [           main] c.scantt.docker.HelloDockerApplication   : No active profile set, falling back to 1 default profile: "default" 2024-07-15 18:45:27.944  INFO 9640 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http) 2024-07-15 18:45:27.944  INFO 9640 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat] 2024-07-15 18:45:27.944  INFO 9640 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.63] 2024-07-15 18:45:28.037  INFO 9640 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext 2024-07-15 18:45:28.037  INFO 9640 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 693 ms 2024-07-15 18:45:28.238  INFO 9640 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path '' 2024-07-15 18:45:28.246  INFO 9640 --- [           main] c.scantt.docker.HelloDockerApplication   : Started HelloDockerApplication in 1.143 seconds (JVM running for 1.401) 

可见默认端口是8080。

6.浏览器访问

http://127.0.0.1:8080/hello?name=potato

结果如下:

三.maven工程docker构建对接改造

1.为maven工程添加docker插件

      增加了2处,一是properties里面增加了docker插件版本,二是增加了build这一块。整体如下:

 	4.0.0 	com.scantt 	hello-docker 	0.0.1-SNAPSHOT   	 		 		2.7.0 		 		1.8 		1.8 		 		1.4.13 	  	 	 		 			 				org.springframework.boot 				spring-boot-dependencies 				${version.springboot} 				pom 				import 			 		 	 	 	 		 			org.springframework.boot 			spring-boot-starter-web 		 	   	 		${project.artifactId} 		 			 				org.springframework.boot 				spring-boot-maven-plugin 				2.6.6 				 					 						 							repackage 						 					 				 			 			 				com.spotify 				dockerfile-maven-plugin 				${version.dockerPlugin} 				 					 						default 						 							build 							push 						 					 				 				 					${groupId}/${project.artifactId} 					${project.version} 					 						${project.build.finalName} 					 					Dockerfile 				 			 		 	 

2.编写Dockerfile文件

新建文件Dockerfile,放到hello-docker下面(必须放到工程根目录)。内容如下:

# 基础镜像 FROM docker.io/majiajue/jdk1.8  # 环境变量配置 ENV ENV LC_ALL zh_CN.UTF-8  # 主目录 ENV BASE_PATH=/usr/local/app/  # 创建一个存放项目文件的目录 RUN mkdir -p ${BASE_PATH}  # 复制编译打包号的jar包到镜像内/usr/local/app/目录下 # 基于当前项目根目录去复制文件:可以参照deploy.sh 关于docker build说明 COPY target/hello-docker.jar ${BASE_PATH}/hello-docker.jar  # 启动镜像运行的命令 ENTRYPOINT java -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 -jar ${BASE_PATH}/hello-docker.jar   

3.增加系统环境变量DOCKER_HOST

我这里上篇文章docker的ip和端口是tcp://10.1.230.94:2375

4.build试试

    在工程点击右键选择“Run As”=》“Maven install”

     运行结果会发现其中有类似镜像构建过程的输出日志,部分如下:     

[INFO] Image will be built as com.scantt/hello-docker:0.0.1-SNAPSHOT [INFO]  [INFO] Step 1/6 : FROM docker.io/majiajue/jdk1.8 [INFO]  [INFO] Pulling from majiajue/jdk1.8 [INFO] Digest: sha256:fc684fe12c95aac86ef506f5a2bc2ec8fa411cdf7f34165f51a0275076dedcb4 [INFO] Status: Image is up to date for majiajue/jdk1.8:latest [INFO]  ---> 2be3cc30c33f [INFO] Step 2/6 : ENV ENV LC_ALL zh_CN.UTF-8 [INFO]  [INFO]  ---> Using cache [INFO]  ---> 30161b4581a1 [INFO] Step 3/6 : ENV BASE_PATH=/usr/local/app/ [INFO]  [INFO]  ---> Using cache [INFO]  ---> be747d0679df [INFO] Step 4/6 : RUN mkdir -p ${BASE_PATH} [INFO]  [INFO]  ---> Using cache [INFO]  ---> 7b513e464747 [INFO] Step 5/6 : COPY target/hello-docker.jar ${BASE_PATH}/hello-docker.jar [INFO]  [INFO]  ---> ac30abcf81e8 [INFO] Step 6/6 : ENTRYPOINT java -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 -jar ${BASE_PATH}/hello-docker.jar [INFO]  [INFO]  ---> Running in e208149d02d6 [INFO]  ---> Removed intermediate container e208149d02d6 [INFO]  ---> f02da726ef9a [INFO] [Warning] One or more build-args [JAR_FILE] were not consumed [INFO] Successfully built f02da726ef9a [INFO] Successfully tagged com.scantt/hello-docker:0.0.1-SNAPSHOT

5.1Panel中去看看镜像

点击“容器”,在右边界面选择“镜像”就可以看到刚刚构建的镜像文件了。

6.1Panel中用镜像创建容器

点击左边“容器”,右边还是选择“容器”,点击“创建容器”按钮

      在容器创建界面,填写如下:

      填写名称、选择镜像文件、指定端口映射、选择网络即可。ip可以自动生成。

7.1Panel中查看容器运行日志

     刚刚创建的容器,默认就运行了。点击右边的“日志”,弹出可以查看日志。

     从日志来看,可以看到启动是正常的。

8.浏览器再访问试试

我的1Panel服务器的ip是10.1.230.94。刚刚创建容器配置的映射端口是9001对应容器的8080端口。所以访问地址就变成了 http://10.1.230.94:9001/hello?name=docker

四.总结

      我们经历了maven创建创建、docker插件使用、1Panel容器创建三个主要过程。实现了eclipse工具中maven工程调用远程docker服务完成镜像文件构建。但pom中,只是简单的将maven插件写在了build中,每次maven工程install都会去构建镜像文件,这里不太合理,下次再写一篇文章,将这个一部分“优雅”一些。

      到这里,勉强达到目的吧!其实过程中遇到很多问题。比如:

      1)docker对接不上,提示0.0.0.0:9527等信息,是没有设置系统环境变量DOCKER_HOST引起的。

      2)构建报错“Could not acquire image ID or digest following build”。我直接把Dockerfile放到工程根目录,对应pom中指定dockerfile就不写路径了。它就没有问题了,为啥原因还没有去深究。

相关内容

热门资讯

第4个了解!智星德州app软件... 第4个了解!智星德州app软件透明挂辅助软件,微扑克用模拟器(有挂细节)-哔哩哔哩是一款可以让一直输...
1分钟体悟!中至余干麻将技巧!... 1分钟体悟!中至余干麻将技巧!(透视)外挂透视辅助脚本(2021已更新)-哔哩哔哩;1、让任何用户在...
八刹那秒懂!(中至余干)外挂辅... 自定义新版中至余干系统规律,只需要输入自己想要的开挂功能,一键便可以生成出中至余干专用辅助器,不管你...
第三了解!微扑克脚本外挂透明挂... 第三了解!微扑克脚本外挂透明挂辅助器软件,wpk有机器人的(有挂教程)-哔哩哔哩是一款可以让一直输的...
【ROS2机器人入门到实战】 ROS2机器人入门到实战教程(鱼香ROS)写在前面当前平台文章汇总地址:ROS2机器人...
6分钟了解!(沐沐麻将)外挂透... 6分钟了解!(沐沐麻将)外挂透明挂辅助神器!(透视)详细教程(2020已更新)(哔哩哔哩)是一款可以...
惬意上手Python —— i... 目录一、Python中的分支1.分支介绍2.分支的关键字2.1 if 介绍2.2 else 和 el...
8分钟体悟!微信白金岛辅助工具... 8分钟体悟!微信白金岛辅助工具!(透视)外挂辅助作弊(2024已更新)-哔哩哔哩;1、不需要AI权限...
【比赛资讯】Robocom睿抗... Robocom睿抗机器人开发者大赛(RAICOM)-CAIP编程设计赛道“编程技能赛”比赛信息&#x...
7分钟了解!微扑克模拟器软件透... 7分钟了解!微扑克模拟器软件透明挂辅助脚本,wepoke透明挂(有挂详细)-哔哩哔哩;科技安装教程;...