本教程的前六篇文章:
- Docker 实战教程之从入门到进步 (一)
- Docker 实战教程之从入门到进步 (二)
- Docker 实战教程之从入门到进步 (三)
- Docker 实战教程之从入门到进步 (四)
- Docker 实战教程之从入门到进步 (五)
- Docker 实战教程之从入门到进步 (六)
以及通过这篇文章的介绍,咱们深刻学习了 Docker 技术的三大要点。
从本文开始,咱们将学习如何将 Docker 镜像部署到云平台上并运行。
练习 1:将 SpringBoot 利用 Docker 化
首先须要把 SpringBoot 利用打包成 docker,我用的 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 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 是否正确:
https://hub.docker.com/reposi…
最初胜利部署:
在 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-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 网站上能找到更多对于该镜像的阐明。
第二行和第三行:定义两个名叫 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/reposi…
这样,稍后 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 环境并运行的具体步骤,并针对部署过程中的常见谬误音讯,给出了对应的谬误剖析和解决方案。
本系列前六篇文章:
- Docker 实战教程之从入门到进步 (一)
- Docker 实战教程之从入门到进步 (二)
- Docker 实战教程之从入门到进步 (三)
- Docker 实战教程之从入门到进步 (四)
- Docker 实战教程之从入门到进步 (五)
- Docker 实战教程之从入门到进步 (六)