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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

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 文件。

相关文章