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

一、创建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>[email protected]</username>
    <!--这里是在阿里云注册的密码-->
    <password>abcdef</password>
    <configuration>
       <!--这是在阿里云注册时填写的邮箱-->
       <email>[email protected]</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

发布了10 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/haogexiang9700/article/details/88318867