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

简介: 在SAP云平台上部署和运行Docker应用

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


Proof of Concept: Deploying ABAP in Kubernetes


image.pngimage.pngimage.pngimage.pngimage.png

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


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


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


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


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


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


mvn spring-boot:run


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

image.png

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

image.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

image.png

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


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


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

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

image.png

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


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


docker exec -it 8302db78f838 /bin/sh


image.png

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

image.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

image.png

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


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


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


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

image.png

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

image.png

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

image.png

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

image.png

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


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


感谢阅读。




相关文章
|
2天前
|
Java Docker 容器
docker部署springboot指定yml文件
docker部署springboot指定yml文件
7 0
|
2天前
|
Java 关系型数据库 MySQL
docker 部署springboot项目,连接mysql容器
docker 部署springboot项目,连接mysql容器
12 0
|
4天前
|
KVM 虚拟化 Android开发
DP读书:鲲鹏处理器 架构与编程(十二)鲲鹏软件实战案例Docker+KVM的部署
DP读书:鲲鹏处理器 架构与编程(十二)鲲鹏软件实战案例Docker+KVM的部署
34 1
|
7天前
|
Anolis Docker 容器
百度搜索:蓝易云【openAnolis上部署docker容器】
通过以上步骤,你的Docker容器应该已经在OpenAnolis服务器上成功部署并运行了。
22 5
|
9天前
|
物联网 Linux Docker
百度搜索:蓝易云【OpenHarmony运行docker详细步骤】
需要注意的是,OpenHarmony上运行Docker可能会涉及到一些系统配置和适配工作,因为OpenHarmony和传统Linux系统在内核和运行环境方面存在一些差异。因此,在尝试在OpenHarmony上运行Docker之前,建议详细阅读OpenHarmony的文档和指南,并确保对系统配置和适配有足够的了解。
17 5
|
14天前
|
安全 Java 数据安全/隐私保护
百度搜索:蓝易云【docker部署ELK8.8.1集群logstash报错PKIX path building failed】
重新启动logstash:保存修改后的配置文件,并重新启动logstash容器。
22 6
|
15天前
|
NoSQL Redis Docker
深入浅出:使用Docker容器化改进Python应用部署
在快速演进的软件开发领域,持续集成和持续部署(CI/CD)已成为加速产品上市的关键。本文将探索如何利用Docker,一种流行的容器化技术,来容器化Python应用,实现高效、可靠的部署流程。我们将从Docker的基本概念入手,详细讨论如何创建轻量级、可移植的Python应用容器,并展示如何通过Docker Compose管理多容器应用。此外,文章还将介绍使用Docker的最佳实践,帮助开发者避免常见陷阱,优化部署策略。无论是初学者还是有经验的开发人员,本文都将提供有价值的见解,助力读者在自己的项目中实现容器化部署的转型。
|
15天前
|
云计算 开发者 Docker
深入浅出:使用Docker部署微服务架构
在当今快速迭代的软件开发环境中,微服务架构凭借其灵活性和可扩展性成为了热门趋势。本文将探讨如何利用Docker这一强大的容器化技术,简化和加速微服务应用的部署与管理过程。我们将从微服务的基本概念出发,逐步深入到Docker的核心功能,最后通过一个实际案例演示整个部署流程。文章旨在为开发者提供一个清晰、实用的指南,帮助他们有效地利用Docker在微服务架构下的应用部署。
15 0
|
15天前
|
运维 Java 开发者
深入浅出:使用Docker容器化改善Java应用的部署与运维
在当今快速迭代的软件开发周期中,确保应用的一致性、可移植性与易于管理成为了开发与运维团队面临的重大挑战。本文旨在介绍如何通过Docker容器技术,有效地解决这些问题,特别是针对Java应用。我们将从Docker的基本概念出发,逐步深入到实际操作,展示如何将传统的Java应用容器化,以及这一过程如何帮助简化部署流程、提高应用的可靠性和可伸缩性。不同于常规的技术文章,本文试图以一种更加易于理解和实践的方式,让读者能够快速掌握容器化技术,并将其应用于日常的开发与运维工作中。
74 0
|
16天前
|
JavaScript NoSQL Redis
深入浅出:使用 Docker 容器化部署 Node.js 应用
在当今快速发展的软件开发领域,Docker 作为一种开源的容器化技术,已经成为了提高应用部署效率、实现环境一致性和便于维护的关键工具。本文将通过一个简单的 Node.js 应用示例,引导读者从零开始学习如何使用 Docker 容器化技术来部署应用。我们不仅会介绍 Docker 的基本概念和操作,还会探讨如何构建高效的 Docker 镜像,并通过 Docker Compose 管理多容器应用。此外,文章还将涉及到一些最佳实践,帮助读者更好地理解和应用 Docker 在日常开发和部署中的强大功能。
17 0