欢迎访问网易云社区,了解更多网易技术产品运营经验。
2.3 实战示例
工程离不开实践,尤其是软件工程。本节将一步步带你构建一个基于 Spring Boot 和 Docker 的单体应用,通过镜像将其部署在网易云并运行。
第一步:新建工程目录
新建一个文件夹,名字就是你的项目名,这里以 spring-boot-docker-cloudcomb 为例。
mkdir spring-boot-docker-cloudcomb
在根目录下创建 pom.xml 文件。
touch pom.xml
在当前目录下新建子目录。
mkdir -p src/main/java/com/bingohuang/hello
项目结构如下。
第二步:配置 POM 文件
在 pom.xml 中添加内容如下。
上述 POM 文件并不复杂,是一个 Spring Boot 的标准配置,Spring Boot 的 Maven 插件 会提供以下功能。
收集的类路径上所有 JAR 文件,并构建成一个单一的、可运行的 JAR 文件,这使 得它更便于执行和传输服务。
搜索 public static void main()方法来标记为可运行的类。
提供了一个内置的依赖解析器,用于设置版本号以匹配 Spring Boot 的依赖。你可 以覆盖任何你想要的版本,但它会默认使用 Spring Boot 所设置的版本集。
第三步:编写 Spring Boot 应用
创建一个简单的 Java 应用程序。
代码核心就是处理了根路径 / 的 Web 请求,并包含可执行的 main 方法,解释其中几个 关键点如下。
用@SpringBootApplication 和@RestController 注解类,表示可用 Spring MVC 来处 理 Web 请求。
@RequestMapping 将 / 映射到 home 方法,并返回相应文本。
main 方法使用 Spring Boot 的 SpringApplication.run 方法来启动应用。
第四步:本地运行程序
Maven 构建
该应用的核心代码已完成,只有两个文件,可见 Spring Boot 非常简单,目录结构如下。
在根目录执行如下命令。
mvn package
之后会在根目录下生成一个 target 目录,并在 target 目录下包含一个可执行的 jar 包。
运行 JAR 包
Spring Boot 的强大之处是将应用打成一个可独立运行的 JAR 文件。
java -jar target/spring-boot-docker-cloudcomb-0.1.0.jar
不出意外,输出日志,应用启动,默认监听 8080 端口。
访问应用
应用正常启动后,浏览器访问 http://127.0.0.1:8080/,即可看到页面输出如下文本。
Hello Spring Boot, Docker and CloudComb!
第五步:容器化构建及运行
Dockerfile
在项目根目录下创建一个 Dockerfile 文件,内容如下。
该 Dockerfile 并不复杂,核心功能就是拉到 Git 仓库中的最新代码并构建,并在容器启 动时默认执行启动命令 java -jar/app.jar。
此时项目所有源文件编写完成,共 3 个文件,目录结构如下。
构建镜像
在项目根目录下执行镜像构建如下命令。
docker build -t spring-boot-docker-cloudcomb:0.1.0.
运行容器
docker run -p 8080:8080 -t spring-boot-docker-cloudcomb:0.1.0
访问项目
同样输出日志,监听 8080 端口,浏览器访问 http://127.0.0.1:8080/,输出如下文本。
Hello Spring Boot, Docker and CloudComb!
第六步:推送镜像到网易云
首先,需要有一个网易云的账号,可在网易云官网(https://www.163yun.com/)注册。 接下来,在命令行中登录云基础服务镜像仓库。
接着,统一标记本地镜像。
最后,推送镜像到云基础服务镜像仓库。
第七步:在网易云上创建服务
具体步骤请参考网易云在线帮助文档:http://support.c.163.com/md.html#!计算服务/容器
服务/在网易云上创建服务.md。
注:此镜像已经在网易云上公开,地址是 https://c.163.com/hub#/m/repository/?repoId= 41359,读者也可以直接在云基础服务镜像中心(https://c.163.com/hub#/m/home/)搜索 spring-boot-docker-cloudcomb,打开收藏,即可直接基于该镜像创建搜索 Spring Boot + Docker 的应用服务。
参考网址
源代码:https://github.com/163yun/spring-boot-docker-cloudcomb
Spring Boot:http://projects.spring.io/spring-boot/
Docker:https://docker.com
网易云:https://www.163yun.com
小 结
本章首先对实际项目中的一些工程化实践经验进行了介绍,包含工程模板、模板化、 工程化构建、代码版本管理及环境划分,并对在实际发布过程中的环境一致性问题进行了 描述,然后基于容器技术来解决环境一致性问题,并对容器相关技术进行了简单介绍,最 后以示例形式演示了如何使用容器技术整体构建工程。总之,本章的目的是帮助读者了解 一些工程化的实践经验及容器技术,后续才能以此为基础快速进行产品的开发及发布。
文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著
网易云计算基础服务深度整合了 IaaS、PaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用。