1. 背景
springboot项目打镜像发布到仓库的大流程有两种:
第一种:本地开发环境 ---> 服务器 ----> 私有镜像仓库
1.1 流程:在本地开发环境打镜像包,并通过docker的2375端口将镜像推到服务器上,最后服务器再推到私有仓库。
1.2 缺点:服务器暴露2375端口是非常危险的,别人甚至可以直接操控你的宿主机,除非你对端口使用ca证书,不过这种方式太过繁琐,参考:https://docs.docker.com/engine/security/protect-access/
1.3 适用场景:如果服务器处于私网,那就是可行的
第二种:本地开发环境 ---> 私有镜像仓库 --->服务器
2.1 在本地开发环境打镜像包直接发布到私有仓库,然后服务器手动拉取
2.2 缺点:需要服务器手动拉取仓库的镜像,但是如果项目是由docker-compose部署的,那么这也不是什么问题,除非你使用的镜像tag是lastest,否则不管怎样,你都需要去修改下docker-compose.yml的镜像版本
2. 使用
第一种. 使用2375端口推镜像
有两种方式,第一种是使用maven插件,第二种是使用idea插件,(maven插件的方式就是在pom文件的plugin里面去配置服务器的信息,idea插件则是通过idea的setting设置去配置)。
但是无论哪种方式,都是需要有docker环境的,要么是本地安装,要么是连接服务器的docker
步骤:
2.1 打开服务器2375端口:
1.1 进入阿里云ecs服务器,进入安全组,添加安全组2375
1.2 打开服务器的防火墙2375端口
1.3 修改docker的配置文件:https://www.cnblogs.com/panchanggui/p/12133928.html
2.2 使用插件进行配置
由于个人不是很喜欢使用2375端口的方式推镜像,所以配置都是一笔带过,有两种,要么maven插件,要么idea插件
2.2.1 使用maven插件进行配置
网上教程很多,大多都是使用com.spotify,可参考:https://blog.csdn.net/xxkalychen/article/details/97174448
2.2.2 使用idea插件进行配置
使用Alibaba Cloud Toolkit插件:参考:
https://help.aliyun.com/document_detail/162966.html
https://blog.csdn.net/u013008898/article/details/113811472
第二种.直接打镜像发布到私有仓库(强烈推荐)
第一种方法是需要本地或服务器拥有docker环境才能使用的,而这种方法不需要有docker服务,可以直接推到私有仓库。
但缺点也是有的:需要暴露阿里云的账号密码,不过可以通过阿里云的RAM子账号解决这个问题:https://help.aliyun.com/document_detail/144229.html
pom文件的配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.4.0</version>
<configuration>
<from>
<!--表示从docker hub获取java镜像作为基础构建镜像-->
<image>java</image>
</from>
<to>
<!-- 阿里云前缀/命名空间/仓库名,可直接在阿里云的仓库复制地址 -->
<image>registry.cn-shenzhen.aliyuncs.com/xxx/xxx</image>
<auth>
<!--阿里云上的账号和密码-->
<username>xxxx</username>
<password>xxxx</password>
</auth>
<tags>
<tag>${project.version}</tag>
</tags>
</to>
<!--不使用https-->
<allowInsecureRegistries>false</allowInsecureRegistries>
</configuration>
<!--使用maven的生命周期,即在package时会自动进行打镜像-->
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>