一、创建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