使用SpringBoot2.0+DockerFile+Maven插件构建镜像并推送到阿里云仓库

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 04:41   33   0

一、创建SpringBoot工程

首先我们创建一个SpringBoot工程,建议使用IDEA 商业版,搭建比较方便。选用SpringBoot 2.1.3.RELEASE + SpringCloud Finchley.RELEASE作为技术选型。本文笔者以微服务的注册
中心Eureka为例,来做后面的演示。

添加的依赖有:

<dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
 </dependency>
 
 <!-- 注册中心Eureka 服务端 -->
 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  <version>2.0.0.RELEASE</version>
 </dependency>
</dependencies>

配置yml文件等不做过多赘述。配置如下,可供参考。

server:
  port: 8761

spring:
  application:
    name: microservice-eureka-service

eureka:
  instance:  #定义Eureka实例
    hostname: microservice-eureka-service   #Eureka实例所在的主机名

  #eureka默认情况下,把自己当做客户端来注册自己,所以我们要禁用它
  client:
    register-with-eureka: false   #表示是否将自己注册到Eureka Server上,默认为true
    fetch-registry: false         #表示是否从Eureka Server上获取注册信息,默认为true

二、编写DockerFile

FROM java:8
VOLUME /tmp
ADD microservice-eureka-service-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8761
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]

其中的microservice-eureka-service-0.0.1-SNAPSHOT.jar要与镜像名称保持一致,否则会报错。

三、配置pom.xml及仓库权限

关于pom.xml里面的配置,笔者先直接贴上代码。
(1)设置全局变量

<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
 <docker.repostory>registry.cn-shanghai.aliyuncs.com</docker.repostory>
 <docker.registry.name>calvinsheng</docker.registry.name>
</properties>   

其中,docker.repostory表示仓库地址,docker.registry.name表示仓库名称。

(2)设置仓库地址及镜像名称

<build>
 <plugins>
  <plugin>
   <groupId>com.spotify</groupId>
   <artifactId>docker-maven-plugin</artifactId>
   <version>0.4.12</version>
   <configuration>
    <imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}</imageName>
    <!-- 指定Dockerfile所在的路径 -->
    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
    <resources>
     <resource>
      <targetPath>/</targetPath>
      <directory>${project.build.directory}</directory>
      <include>${project.build.finalName}.jar</include>
     </resource>
    </resources>
    <serverId>docker-aliyun</serverId>
    <registryUrl>${docker.repostory}</registryUrl>
    <pushImage>true</pushImage>
   </configuration>
  </plugin>
 </plugins>
</build>

需要注意以下几处

  • 新增serverId
<serverId>docker-aliyun</serverId>

serverId可以随便命名,不过需要与的server下id保持一致。Maven中的Setting.xml配置,作为阿里云仓库的权限认证。(账号内容根据自己的实际情况替换即可)

<server>
    <!--maven的pom中可以根据这个id找到这个server节点的配置-->  
    <id>docker-aliyun</id>
    <!--这里是在阿里云注册的账号-->
    <username>12345678@qq.com</username>
    <!--这里是在阿里云注册的密码-->
    <password>abcdef</password>
    <configuration>
       <!--这是在阿里云注册时填写的邮箱-->
       <email>12345678@qq.com</email>
    </configuration>
</server>
  • 新增registryUrl
registryUrl>${docker.repostory}</registryUrl>

表示阿里云的docker仓库地址。阿里云的容器镜像服务地址:https://cr.console.aliyun.com/
读者可以查看开通服务,并设置仓库密码及命名空间等。笔者在此不多作赘述,可以查阅
阿里云官方文档或者网络资料。

  • 新增Push节点
<pushImage>true</pushImage>

表示推送镜像到仓库。

  • 修改imageName节点的内容,改为私有仓库地址和端口,再加上镜像id和TAG
<imageName>${docker.repostory}/${docker.registry.name}/${project.artifactId}:${project.version}</imageName>

接着在此工程下执行命令,构建并推送镜像:

mvn clean package docker:build  -DpushImage

最后,镜像会构建成功并推送到阿里云仓库。在这里插入图片描述

四、总结

最后,附上项目工程结构截图。
在这里插入图片描述
具体代码可参照码云:https://gitee.com/calvin1993/docker-aliyun

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP