docker与云平台_在 SAP 云平台上部署和运行 Docker 应用

容器技术,Docker,虚拟化,这些名词诞生尽管有很长一段时间了,但是在云原生开发领域仍旧热度不减。甚至连 SAP 赖以成名的ABAP Netweaver,如今也踏上了容器化的上云探索之路,比如下面这张来自 SAP 社区一篇博客的架构图:

Proof of Concept: Deploying ABAP in Kubernetes

https://blogs.sap.com/2020/02/06/proof-of-concept-deploying-abap-in-kubernetes/

08b8fce74b87da2aec163c224d026ae5.png

今天暂时不聊 ABAP 的容器化,先从最简单的概念开始。网络上关于 Docker 容器的技术文章多如牛毛,就不再重复了,还是紧扣 SAP 技术和 SAP 解决方案来写。

如果有一个已经能够正常运行的 Java 应用,可以将其以 Docker 容器的方式,部署且运行在 SAP 云平台上吗?当然可以,而且只需要简单的几个命令行即可。

本文接下来的步骤是针对那些听说过 Docker 容器技术,但尚未动手实践过的朋友。通过阅读本文,可以了解将 Java 应用容器化并部署到 SAP 云平台运行的大致步骤。您也可以根据本文的步骤动手试一试,只需要在本地搭一个最简单的 Java 开发环境,安装 Docker 客户端和申请一个 SAP 云平台的 trial 账号即可。

(1) 首先得有一个能在本地正常运行的 SpringBoot 应用。可以自己动手创建一个,或者从这个 github 仓库上克隆一个下来:

https://github.com/wangzixi-diablo/mySpringBoot

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

mvn spring-boot:run

你会看到 Tomcat started on port 8000 的提示,意思是该应用已经成功启动,监听在本地端口 8000 上。

224ba323aa1681a28aea002cffa817f5.png

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

d219a90326562df0ff7da59bca3b6e10.png

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

FROM openjdk:8-jdk-alpine

VOLUME /tmp

VOLUME /log

EXPOSE 8080

ADD target/prolikeService.jar app.jar

ENV JAVA_OPTS="-Dserver.port=8080"

ENTRYPOINT exec java $JAVA_OPTS -jar /app.jar

b93e53faabb8f89356ad13f2ab302082.png

这实际是一个指令文件,Docker 客户端会根据里面的内容,制作一个 Docker 镜像。

简要介绍每一行内容的含义。

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

https://hub.docker.com/_/openjdk

d59ad8af1b1a087cfd68a4b78930dc6d.png

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

如果一个容器尚处在运行状态,我们可以用命令行进入容器内部,查看 log 文件夹里的运行日志文件

docker exec -it 8302db78f838 /bin/sh

d6b281bddf9d296cceec6acb1f827121.png

如果该容器已经销毁,我们就可以到宿主机的 /var/lib/docker/volumes 目录下,查看持久化的日志文件:

b4d5a8103024ded03893173fde4182e9.png

第五行:把当前项目通过 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 上看到推送好的镜像:

https://hub.docker.com/repository/docker/i042416/springbootexample

3c04674c192725626a75c4b0391ca7b0.png

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

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

cf push jerryjavadocker --docker-image i042416/springbootexample:v6

因为我的容器镜像修改过好几次,所以标签从 v1 升到了 v6. 

2292079a532153ae4e5f3beb837b21d6.png

成功部署,应用的状态显示成了 running :

827e65d91a2497fe998b230b4bd526e1.png

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

b85f85d415797380645c8ef5ac56aa88.png

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

ac15f1b9fbc1468a275bc9329da24d9d.png

d2b91fcdbdf6d69bf7cd34ed2ee6db1c.gif

作者介绍

151fba06930caa879d8a5cc78386115f.png特邀撰稿人

Jerry Wang|汪子熙
SAP 开发专家

Jerry Wang 于 2007 加入 SAP 工作,目前在 SAP 成都研究院担任开发专家的一职。除此以外,Jerry 也作为 SAP 社区导师和 SAP 中国技术大使,积极推广 SAP 技术开发相关的知识。

d2b91fcdbdf6d69bf7cd34ed2ee6db1c.gif

欢迎投稿

如果您或者您身边的技术大牛也想要分享与 SAP 云平台有关的开发内容和实用技巧,欢迎您积极投稿或者推荐。我们会进行适当筛选,并随后与作者沟通联系。投稿邮箱:

gavin.du@sap.com

jiahui.zou01@sap.com
kate.shen02@sap.com

往期回顾

  • SCP 技术干货 | 使用 SAP Cloud Platform IAS 安全策略做权限管理
  • 基于 SAP 云平台的云应用授权管理 (下)
  • 利用 SAP XSUAA 安全模块快速实现 Python 应用的认证和授权
  • 利用 SAP 云平台集成 S/4HANA 与企业微信审批方案 (上)
  • 利用 SAP 云平台集成 S/4HANA 与企业微信审批方案 (下)

bdbe41f146d36232b069fba5c8810f1d.png

65ed471536c44d4e0b10376f82d6b2dc.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值