容器技术,Docker,虚拟化,这些名词诞生只管有很长一段时间了,然而在云原生开发畛域仍旧热度不减。甚至连SAP赖以成名的 ABAP Netweaver,现在也踏上了容器化的上云摸索之路,比方上面这张来自SAP社区的一篇博客:

对于 SAP 生态圈的客户来说,常见的需要之一,就是可能将应用一个或多个反对服务(数据库/消息传递等)的任何现有业务应用程序迁徙到云。 实现此目标的一种办法是在虚拟机上运行它或创立容器映像并部署在能够运行容器的云环境中。

另一方面,当客户的首要任务是最大化在起码数量的服务器上运行的应用程序数量,并且其应用程序实际上不须要拜访操作系统级别的资源或性能时,容器技术是更好的抉择。 默认启用 Diego(Cloud Foundry 的容器管理系统)的 SAP Cloud Platform Cloud Foundry 环境,提供了将 Docker 映像部署为 Cloud Foundry 应用程序的可能性。如果有一个曾经可能失常运行的Java利用,能够将其以Docker容器的形式,部署且运行在SAP云平台上吗?当然能够,而且只须要简略的几个命令行即可。

本文接下来的步骤是针对那些据说过 Docker 容器技术,但尚未入手实际过的敌人。通过浏览本文,能够理解将Java利用容器化并部署到SAP云平台运行的大抵步骤。您也能够依据本文的步骤入手试一试,只须要在本地搭一个最简略的Java开发环境,装置Docker客户端和申请一个SAP云平台的trial账号即可。

(1) 首先得有一个能在本地失常运行的SpringBoot利用。如果没有,百度之而后本人动手做一个。

如果切实不想本人入手,从笔者的 github 仓库上克隆一个下来也行。

本地配置好maven和JDK之后,间接用命令行启动它:

mvn spring-boot:run
你会看到 Tomcat started on port 8000 的提醒,意思是该利用曾经胜利启动,监听在本地端口8000上。

浏览器里输出localhost:8000/product, 看到Hello World. 至此,咱们就有了一个本地失常运行的SpringBoot利用了,下一步是将其打包成Docker镜像。

(2) 在SpringBoot我的项目里新建一个名叫Dockerfile的文件,输出以下内容:

FROM openjdk:8-jdk-alpineVOLUME /tmpVOLUME /logEXPOSE 8080ADD target/prolikeService.jar app.jarENV JAVA_OPTS="-Dserver.port=8080"ENTRYPOINT exec java $JAVA_OPTS -jar /app.jar

这理论是一个指令文件,Docker客户端会依据外面的内容,制作一个Docker镜像。
简要介绍每一行内容的含意。

第一行:指定待制作的镜像是基于名叫openjdk:8-jdk-alpine的镜像,在Docker Hub 网站上能找到更多对于该镜像的阐明:

第二行和第三行:定义两个名叫tmp和log的长久化存储。容器运行时产生的数据,随着容器的销毁而销毁,但有时咱们又心愿这些数据可能长久化保留,比方须要剖析某个容器运行时产生的日志文件,这时能够应用Dockerfile里VOLUME关键字提供的容器长久化技术,创立所谓的“卷”,将容器利用运行时写入数据的目录,映射到宿主机上的某个目录下。

如果一个容器尚处在运行状态,咱们能够用命令行进入容器外部,查看log文件夹里的运行日志文件

docker exec -it 8302db78f838 /bin/sh

如果该容器曾经销毁,咱们就能够到宿主机的/var/lib/docker/volumes目录下,查看长久化的日志文件:

第五行:把以后我的项目通过maven打包而成的jar包拷贝到容器外部,重命名为app.jar

第六~七行:设置JVM启动参数,裸露8080端口给内部。

Dockerfile文件编写结束后,应用命令行制作镜像:

docker build -t i042416/springbootexample:v1 .

v1代表该镜像的标签,命令行尾部的句号代表当前目录。

镜像制作结束后,应用命令即将制作好的镜像推送到Docker Hub网站上(有点像咱们本地用git客户端提交代码到Github上):

docker push i042416/springbootexample:v1

胜利之后,可能在 Docker Hub上看到推送好的镜像:

这样,稍后SAP云平台就能从Docker Hub上拉取这个镜像了。

(3) 登录SAP云平台CloudFoundry环境,应用命令行部署, 用参数--docker-image指定咱们刚刚上传到Docker Hub上的镜像名称,部署生成的利用名叫jerryjavadocker.

cf push jerryjavadocker --docker-image i042416/springbootexample:v6
因为我的容器镜像批改过好几次,所以标签从v1升到了v6.

胜利部署,利用的状态显示成了running:

在SAP云平台也能看到这个胜利部署的利用,处于运行状态:

运行这个胜利部署好的Docker利用,和咱们在本地mvn spring-boot:run的成果一样。至此这个SpringBoot利用的容器化和SAP云平台的部署就胜利了。

总结

本文具体介绍了基于一个开发好的 SpringBoot 利用,如何将其制作成 Docker 镜像,并且部署到 SAP 云平台上运行的步骤。