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