通过maven插件封装docker镜像到华为云SWR仓库

举报
寒六先生 发表于 2021/04/01 19:22:30 2021/04/01
【摘要】 对于软件企业来说,企业的软件代码,就是企业的生命,但是当前云服务已经是一个大趋势,如何在拥抱公有云的情况下,又能使企业管理人员安心,是一个问题。

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

2.3. 配置settings.xml

  • 配置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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。