从 Docker 容器中的 Liberty Java 应用程序访问 Bluemix 服务

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

IBM Bluemix 允许开发人员托管他们的 Docker 映像并在云中运行他们的 Docker 容器。除了在云中托管 Docker 之外,Bluemix 还提供了 100 多种服务,开发人员可以使用这些服务来构建应用程序。有数据库服务、认知服务、分析服务、物联网服务、构建移动后端的服务等等。

通常,在将这些服务添加到应用程序时,会为开发人员提供服务并创建凭证。使用这些凭据,可以调用服务的 REST API,开发人员可以登录到服务的仪表板。服务的凭据和附加配置以 JSON 格式放在环境变量 VCAP_SERVICES 中。应用程序可以在运行时访问此信息。例如,Java 应用程序可以使用 System.getenv 和 org.apache.wink.json4j 等 JSON 库。

对于基于 Cloud Foundry 的应用程序,可以通过 Bluemix 用户体验或命令行工具轻松添加服务。此时,您无法将服务直接绑定到基于 Docker 的应用程序。相反,您需要一个 Cloud Foundry 桥接应用程序 。在此之后,您可以使用相同的代码访问在 Bluemix 上运行的 Docker 和 Cloud Foundry 应用程序中的服务。

作为一名开发人员,我更喜欢在本地 IDE 中开发代码并在那里进行测试和调试。下面是我通常执行的从本地应用程序访问 Bluemix 服务的操作,而无需编写额外的代码。下面的示例是对 简单 Liberty 应用程序的 扩展。

通过 Liberty,您可以使用 server.env 文件来定义环境变量。在此文件中,有一个条目 VCAP_SERVICES 具有您可以从 Bluemix 用户体验中复制的值。为了删除空格,您可以使用不同的在线 工具


该文件可供运行在 Eclipse 中的 Liberty 服务器使用,也可供本地容器中的 Liberty 服务器使用。由于只有在本地运行时才需要此文件,因此创建了第二个图像,它扩展了您可以在 Bluemix 上托管的图像。第二个图像只是使用 Liberty 和 Web 应用程序扩展了核心图像,并向其添加了环境变量。


为了创建图像并在本地运行容器,您需要调用这些命令。


 root directory: mvn package
directory 'target': docker build -t simple-liberty-image .
directory 'dockerlocal': docker build -t simple-liberty-image-local .
any directory: docker run --name simple-liberty-container-local -p 80:80 -p 443:443 -d -t simple-liberty-image-local

或者,正如我的同事 Richard Osowski 指出的那样,您可以运行类似这样的东西:


 root directory: mvn package
directory 'target': docker build -t simple-liberty-image .
directory 'dockerlocal': docker build -t simple-liberty-image-local .
any directory: docker run --name simple-liberty-container-local -p 80:80 -p 443:443 -d -t simple-liberty-image-local

Richard 还在 博客 中解释了如何在启动 Liberty 服务器之前使用 VCAP_SERVICES 变量的值更新 server.xml 文件。