Docker 实战教程之从入门到提高 (七)

网友投稿 216 2022-10-20

Docker 实战教程之从入门到提高 (七)

本教程的前六篇文章:

Docker 实战教程之从入门到提高 (一)Docker 实战教程之从入门到提高 (二)Docker 实战教程之从入门到提高 (三)Docker 实战教程之从入门到提高 (四)Docker 实战教程之从入门到提高 (五)Docker 实战教程之从入门到提高 (六)

以及通过这篇文章的介绍,我们深入学习了 Docker 技术的三大要点。

从本文开始,我们将学习如何将 Docker 镜像部署到云平台上并运行。

练习1:将 SpringBoot 应用 Docker 化

首先需要把 SpringBoot 应用打包成 docker,我用的 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 build -t i042416/springbootexample:v4 .

docker login 登录 docker hub,将该镜像上传:

docker push i042416/springbootexample:v4 最后使用命令部署到 Cloud Platform上:cf push jerryjavadocker --docker-image i042416/springbootexample:v4

命令执行完毕后,能够在 SAP 云平台的控制台里,看到这个成功部署的 Docker 应用:

从控制台里得到应用 url:

可以在浏览器里成功访问:

练习2:部署 Docker 镜像到 Cloud Platform 可能遇到的错误消息和解决方案

第一次尝试时,我遇到了下图的错误消息:

You have exceeded your organization's memory limit: app requested more memory than available FAILED

要解决该错误,增大该 Subaccoun t的 memory quota 即可:

第二次尝试遇到的错误消息:

Failed getting docker image manifest by tag: errors: denied: requested access to the resource is denied unauthorized: authentication required

登录 docker hub,确认使用的 docker 镜像和 tag 是否正确:

​​SAP 云平台上看到成功部署的 Docker 应用:

拿到应用的 url:

可以成功访问了:

练习3:将包含 SpringBoot 应用的 Docker 镜像部署到 CloudFoundry 环境并成功运行

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

​​Proof of Concept: Deploying ABAP in Kubernetes​​

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

通过本步骤的实战演练,可以了解将 Java 应用容器化并部署到 SAP 云平台 CloudFoundry 环境运行的大致步骤。您也可以根据本文的步骤动手试一试,只需要在本地搭一个最简单的 Java 开发环境,安装 Docker 客户端和申请一个 SAP 云平台的 trial 账号即可。

(1) 首先得有一个能在本地正常运行的 SpringBoot 应用。

本地配置好 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 云平台 CloudFoundry 环境也能看到这个成功部署的应用,处于运行状态:

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

总结

本文回顾了本教程前一步骤如何将 SpringBoot 应用制作成 Docker 镜像的过程,然后介绍了如何将 Docker 镜像部署到云平台 CloudFoundry 环境并运行的详细步骤,并针对部署过程中的常见错误消息,给出了对应的错误分析和解决方案。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Docker 实战教程之从入门到提高 (六)
下一篇:java基础理论Stream管道流Map操作示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~