这是Jerry 2020年的第30篇文章,也是汪子熙公众号总共第213篇原创文章。

容器技术,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/

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

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

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

(1) 首先得有一个能在本地正常运行的SpringBoot应用。如果没有,百度之然后自己动手做一个。

如果实在不想自己动手,从Jerry的github仓库上克隆一个下来也行:

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

本地配置好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-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

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

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

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

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

第二行和第三行:定义两个名叫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上看到推送好的镜像:

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

这样,稍后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云平台的部署就成功了。

顺便说一句,昨天Jerry的文章 SAP新一代全栈开发工具:SAP Business Application Studio 推送之后,有一位朋友在文章下面留言:

关于传统ABAP开发人员如何学习SAP Cloud Platform相关技术,Jerry后续如果有机会的话会专门写一篇短文介绍自己的做法,敬请期待。

感谢阅读。

docker容器部署的应用启动日志在哪里看_在SAP云平台上部署和运行Docker应用相关推荐

  1. 在SAP云平台上部署和运行Docker应用

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

  2. SAP云平台上部署应用时遇到disk quota不够的问题

    我部署了一个应用到SAP云平台后,在控制台上看到这个应用的状态为CRASHED. 在Events区域看到这些日志: tar: Jdeps/bin/yarnpkg.cmd: Cannot creatsy ...

  3. 如何在谷歌云平台上部署可解释性模型

    2020-02-26 21:52 导语:获取 TensorFlow 模型的局部和全局解释 图片来源于 Pixabay 现代机器学习和人工智能在解决复杂的问题方面取得了令人印象深刻的成果.然而,复杂的问 ...

  4. 部署在SAP云平台上的应用, 该如何解决跨域问题Cross Domain

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  5. Openstack云平台脚本部署之Ceph存储集群配置(十四)

    目录 一.简介 二.部署脚本 三.参考文档 四.源码 五.系列文章 一.简介 Openstack的后端存储对接Ceph分布式统一存储,将Glance镜像.Nova虚拟机及快照.Cinder-Volum ...

  6. 5分钟将Docker镜像部署到SAP云平台CloudFoundry

    一键部署Docker镜像到SAP CloudFoundry 阅读这篇blog大约需要5分钟 Docker 是世界领先的软件容器平台.DockerHub 是一个由 Docker 公司运行和管理的基于云的 ...

  7. docker 容器之间通信_还不清楚docker容器间是如何通信的?看这篇文章就够了

    如果觉得文章有帮助,欢迎点击头像关注我获取更多原创文章,同时也欢迎转发. 同时也可以在我的历史文章中找到Linux操作系统相关的服务器运维管理入门系列文章,欢迎交流. 前文演示docker容器内部数据 ...

  8. 将SpringBoot应用Docker化并部署到SAP云平台

    首先需要把SpringBoot应用打包成docker,我用的dockerfile内容为: FROM openjdk:8-jdk-alpine VOLUME /tmp VOLUME /log EXPOS ...

  9. arm架构服务器安装系统教程,docker服务在arm平台上部署安装方法

    docker服务在arm平台上部署安装方法 本教程使用的硬件平台是全志A40I,操作系统采用的是ubuntu18.04,内核是3.10.108(内核很老导致docker兼容性不好) 1.获取最新版本的 ...

  10. 在华为云 CCE 上部署 EMQX MQTT 服务器集群

    云进入以「应用为中心」的云原生阶段,Operator 模式的出现,则为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范.通过将运维知识固化成高级语言 Go/Java 代 ...

最新文章

  1. 第五篇:Mysql的数据备份与恢复---------
  2. linux unix shell programming,UnixampLinux Shell Programming I.ppt
  3. sql 循环处理数据_图文介绍 SQL 的三种查询计划处理模型,Spark 用了其中两个
  4. 管理软件实施(3)——项目的生命周期
  5. 从前端html 来限制删除去掉csdn页面广告
  6. 全球10大受欢迎的顶级编程语言与薪资水平
  7. linux中产生随机数函数,如何用C++产生随机数
  8. mysql忘记密码时如何修改root用户密码
  9. Android 消息机制之 MessageQueue 消息队列
  10. 在大学里我们应该学习什么
  11. 华为“最青睐”的10所大学,有你的大学么?
  12. 吊打面试官系列之:UI自动化面试题汇总,对标P7,从此再也不怕面试官了。
  13. 在vue项目中使用高德地图JS API
  14. web前端做汽车之家官网,HTML5+CSS3+JS
  15. 十四届蓝桥青少组模拟赛Python-20221108
  16. java图片编辑器,Java图片编辑工具thumbnailator
  17. 修改后的小米文件管理器(去掉远程管理)
  18. 奥塔在线:vsftp用户及权限管理体系初探
  19. 拉盖尔多项式 matlab,类氢原子的定态波函数
  20. FreeBSD网络配置

热门文章

  1. nginx平滑重启与平滑升级的方法
  2. 解决屏蔽JS代码报错的问题
  3. 终于理解你的软件 搞那么多年了 (通用权限管理系统组件源码完善了7-8年)
  4. Pytorch:Tensor(张量)的使用
  5. python编写性别比例失衡_性别比例失衡加剧什么情况?什么原因导致这样的结果?...
  6. 小狗扫地机器人与石头_养宠物不卫生?石头扫地机器人和戴森,你都用对了吗?...
  7. 动态代理和静态代理的区别_动态代理与静态代理
  8. consul服务下线通知_服务注册中心如何实现秒级服务上下线通知 | SOFARegistry 解析...
  9. showdoc修改json转表格格式
  10. php api接口怎么写,php如何写api接口?