从 0 到 1 工程实践 (8): Docker 容器及操作实战示例

叁叁肆2018-11-13 14:00

欢迎访问网易云社区,了解更多网易技术产品运营经验。


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


小 结

本章首先对实际项目中的一些工程化实践经验进行了介绍,包含工程模板、模板化、 工程化构建、代码版本管理及环境划分,并对在实际发布过程中的环境一致性问题进行了 描述,然后基于容器技术来解决环境一致性问题,并对容器相关技术进行了简单介绍,最 后以示例形式演示了如何使用容器技术整体构建工程。总之,本章的目的是帮助读者了解 一些工程化的实践经验及容器技术,后续才能以此为基础快速进行产品的开发及发布。


文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著


网易云计算基础服务深度整合了 IaaSPaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用