通过maven插件封装docker镜像到华为云SWR仓库
【摘要】 对于软件企业来说,企业的软件代码,就是企业的生命,但是当前云服务已经是一个大趋势,如何在拥抱公有云的情况下,又能使企业管理人员安心,是一个问题。
0. 场景说明
对于软件企业来说,企业的软件代码,就是企业的生命,但是当前云服务已经是一个大趋势,如何在拥抱公有云的情况下,又能使企业管理人员安心,是一个问题。
1. 环境说明:
本地开发环境如下:
-
操作系统:MacOS 10.15.7
-
IDE环境:IDEA 2020.3
-
JAVA版本:Java JDK 1.8
-
Docker版本:20.10.5 for MacOS
-
Maven版本:3.6.3
-
docker-maven-plugin:0.4.13
2. 配置过程:
本过程假设,本地开发环境已经部署好了,包括JAVA、IDEA、Maven,已经配置好了的情况下进行的;
2.1. Java代码
创建一个maven项目,根据自己的情况选择项目类型;
本地代码调试好后,可以通过mvn compile进行编译、mvn package进行打包等测试,代码开发正常无误后,即可等待后续封装成容器镜像,并发布到容器环境;
2.2. 准备华为云SWR相关信息
# 主要准备华为云swr服务的登录信息等:
# 1. 地域信息,即需要使用华为云的哪个地域(本例选用华东-上海二):
# 2. 获取华为云AK/SK访问密钥
登录管理控制台,单击右上角您的用户名处,单击“我的凭证”。
在左侧导航栏中选择“访问密钥”,单击“新增访问密钥”。
输入验证码。
单击“确定”,下载访问密钥,其中包含AK和SK。
# 3. 获取长期登录密钥
登录一台linux系统的计算机,执行如下命令获取登录密钥。
printf "$AK" | openssl dgst -binary -sha256 -hmac "$SK" | od -An -vtx1 | sed 's/[ \n]//g' | sed 'N;s/\n//'
其中$AK和$SK为上面获取的AK/SK。
# 4. 拼接登录指令
使用如下的格式拼接登录指令。
docker login -u [区域项目名]@[AK] -p [登录密钥] [镜像仓库地址]
其中,区域项目名和镜像仓库地址在1中获取,AK在2中获取,登录密钥为3的执行结果。
# 举例如下(建议将拼接好的命令,手动在命令行执行一下,确保成功):
docker login -u cn-east-2@Z6A***SXD**HNH -p 52f2*******cdd7b***45599***3154 swr.cn-east-2.myhuaweicloud.com
# 保留-u和-p后面的值,后面在配置maven时,需要用到:
-u cn-east-2@Z6A***SXD**HNH
-p 52f2*******cdd7b***45599***315452f2*******cdd7b***45599***3154
-
配置swr登录信息
<!--
需先准备好下面信息:
1. 需事先获取镜像仓库的登录帐户信息,即前步骤中的-u 和-p;
2. 需事先获取镜像仓库的站点信息,如华东-上海二:swr.cn-east-2.myhuaweicloud.com
3. 需事先创建好SWR的组织信息:本例以 busyfan 为例;
根据以上信息,修改maven的settings.xml配置
-->
<server>
<id>hw-swr</id>
<username>cn-east-2@Z6A***SXD**HNH</username>
<password>52f2*******cdd7b***45599***315452f2*******cdd7b***45599***3154</password>
<configuration>
<email>yangzb@shlongtian.com</email>
</configuration>
</server>
<!-- 注:以上用户信息中带有地域信息,如果需要换到其它地域,需要重新拼接用户信息 -->
-
附:修改settings.xml,添加国内maven镜像源:
<!-- 1. 华为的maven镜像仓库: -->
<mirror>
<id>huaweicloud</id>
<mirrorOf>*</mirrorOf>
<url>https://repo.huaweicloud.com/repository/maven/</url>
</mirror>
<!-- 2. 阿里的maven镜像仓库: -->
<mirror>
<id>ali maven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
2.4. 配置pom.xml
<!--
修改maven的pom.xml文件,以引入maven的docker插件
-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>swr.cn-east-2.myhuaweicloud.com/busyfan/hellojava:1.0</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 必须与maven配置文件settings.xml中配置的server.id一致 -->
<serverId>hw-swr</serverId>
</configuration>
</plugin>
<!--
注意:在引用上面的docker-maven-plugin信息添加后,会自动从官网下载插件;
如果<artifactId>docker-maven-plugin</artifactId>字段,以红包显示,则表示插件未下载;
因为官网在国外,所以初次下载会比较慢,甚至因为网络的原因下载失败;
可以考虑使用国内的maven镜像仓库,配置方法参考上面第2.3小节;
-->
-
注意:上面的镜像,必须要加上swr.cn-east-2.myhuaweicloud.com/busyfan的tag标签,否则无法推送;
-
附:各个地域的endpoint信息:
2.5. 执行镜像封装&推送到SWR仓库
# 1.执行镜像封装命令,测试docker封装:
# 进入项目根目录,即pom.xml文件所在位置,执行以下命令:
$ mvn clean package docker:build
# 2.执行镜像推送命令,测试swr推送:
# 进入项目根目录,即pom.xml文件所在位置,执行以下命令:
$ mvn clean package docker:push -•
2.6. 确认结果
-
登录华为云swr镜像仓库,确认是否成功推送
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)