Spring boot 开发轻巧的微服务提供了便利,Docker 的发展又极大的方便了微服务的部署。这篇文章介绍一下如果借助 maven
来快速的生成微服务的镜像以及快速启动服务。

其实将 Spring Boot 项目用 Docker
部署也不是什么多么神秘的技术,也要先生成镜像,再用镜像启动容器,如果说有什么方便的地方,也就是一些工具可以帮助我们节省手动操作的过程。

知识背景:

掌握 docker 的安装以及基本的操作,熟悉 Dockerfile 文件创建镜像的方法。

创建 Spring boot 项目

1、添加 application.yml 配置文件
server: port: 7000 spring: application: name: spring-boot-docker-sample
2、创建项目启动文件
@SpringBootApplication public class Application { public static void
main(String[] args){ SpringApplication.run(Application.class, args); } }
3、添加一个 RestController 用于服务是否正常可用
@RestController public class DockerController { @GetMapping(value = "hello")
public Object sayHello(){ return "hello! spring boot with docker."; } }
之后启动服务,访问 localhost:7000/hello 查看,如果正常访问,则进入下一步操作。

利用 maven 插件生成镜像文件

我们这里用到的 Maven 插件是 dockerfile-maven-plugin。

1、在 pom 文件中添加上述插件依赖
<plugin> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin>
<groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.9</version> <executions> <execution> <id>tag-latest</id>
<phase>deploy</phase> <goals> <goal>build</goal> <goal>tag</goal>
<goal>push</goal> </goals> <configuration> <tag>latest</tag> </configuration>
</execution> <execution> <id>tag-version</id> <phase>deploy</phase> <goals>
<goal>build</goal> <goal>tag</goal> <goal>push</goal> </goals> <configuration>
<tag>${project.version}</tag> </configuration> </execution> </executions>
</plugin>
2、这个 maven 插件是依赖于 Dockerfile 文件的,所以使用命令之前需要先手动创建 Dockerfile 文件,注意这个 Dockerfile
文件要和 pom.xml 文件同级,简单的 Dockerfile 内容如下:
FROM openjdk:8-jdk-alpine VOLUME /tmp COPY
target/docker-sample-1.0-SNAPSHOT.jar app.jar ENTRYPOINT
["java","-jar","/app.jar"]
简单解释一下:

* 先从中央仓库或者你配置的代理仓库(如阿里云镜像仓库)拉取 openjdk 镜像;
* 然后设置一个挂载点;
* 拷贝 target 目录下的 Spring boot 项目运行包,并改名为 app.jar;
* 设置启动命令 java -jar app.jar
3、然后使用命令 sudo mvn package dockerfile:build 就可以生成镜像到本地仓库了,生成后的镜像如下:



这一步翻译为 docker 命令的话就是下面两条:
docker build -t registry.cn-beijing.aliyuncs.com/fengzheng/kite:1.0-SNAPSHOT .
docker build -t registry.cn-beijing.aliyuncs.com/fengzheng/kite:latest
4、之后根据生成的镜像,就可以以 docker 方式启动服务了
docker run -d -p 7000:7000
registry.cn-beijing.aliyuncs.com/fengzheng/kite:latest
将镜像推送到阿里云 docker 仓库

访问 https://dev.aliyun.com/search.html,然后随意输入一个镜像名称,例如
redis,如果你没有注册过,阿里云便会调到登录注册页,之后按照提示注册即可。

注册成功后,到镜像管理界面,会提示你输入镜像仓库服务的密码,也就是下方配置文件中的 Registry登录密码。

注册成功后,设置一个命名空间,并在命名空间下新建一个仓库。例如本例中我设置的命名空间是fengzheng,仓库名称为 kite。

之后,在 pom.xml 文件中 plugin 节点增加如下配置:
<configuration> <username>阿里云账号名</username> <!--在容器镜像服务控制台"设置Registry登录密码"-->
<password>Registry登录密码</password>
<!--registry.cn-hangzhou.aliyuncs.com/namespace/repositoryname-->
<repository>registry.cn-beijing.aliyuncs.com/fengzheng/kite</repository>
<tag>latest</tag> <buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE> </buildArgs>
</configuration>
设置好用户名和密码,仓库地址等参数,因为是私有仓库,所以需要用户名和密码。

然后运行命令,将以 latest 和 ${project.version} 为 tag 的镜像推送到阿里云镜像仓库。
sudo mvn dockerfile:push
或者,运行命令,发布某一个指定 tag 的镜像。
sudo mvn dockerfile:push@tag-version 或 sudo mvn dockerfile:push@tag-latest
最后,各位同学不妨到我的公众号里互动一下 : 古时的风筝 ,进入公众号可以加入交流群


友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信