以下是 football-player-microservice 的 Dockerfile:
现在,在 Docker 文件的同一路径中,构建 Docker 映像,如下所示:
检查该图像是否确实在您的本地 Docker 注册表中,发出以下命令:
如果列出了刚刚构建的镜像(它应该出现在列表的顶部),则运行容器,如下所示:
由于连接 Postgres 数据库时出错,应用程序应该无法正常启动,如下所示:
我们需要挂钩在不同容器上运行的数据库,因此可能在不同的网络上。
为此,我们需要链接这两个容器,football-player-microservice 和 postgres_thorntail,以便它们能够相互通信。最好的情况是它们共享相同的网络层;这可以通过普通 Docker 以两种方式实现,如下所示:
- Sharing the network provided by the host (that is, the server running Docker; your laptop, in the case)
- Creating a dedicated network (a dedicated Docker network) for the two containers
第一个选项可能是最简单的,但在大型环境中,它不会扩展。另一方面,第二个选项增加了一点复杂性,但它提供了一个更具可扩展性的解决方案;而且,如果我们正在处理容器,我们想要扩展。
所以,让我们创建一个专用的 Docker 网络,如下所示:
如果您已启动并运行 Postgres 容器,请停止它,然后使用 football 网络再次运行它,如下所示:
如果我们再次检查网络,我们应该会看到属于它的 Postgres 实例:
现在,我们需要将我们的微服务与它用作支持服务的数据库链接起来,如下所示:
如果我们再次检查网络,我们还应该看到属于它的 football-player-microservice,如下所示:
现在,我们确定容器之间可以相互通信,但是 football-player-microservice 应用程序需要绑定到特定 IP 和端口的数据库。
这可以通过将这些参数传递给容器作为环境变量来实现,如下:
这些环境变量必须由应用程序获取;所以,代码需要稍作改动。
打开football-player-microservice应用的源码,编辑YAML文件project-defaults.yml;将 connection-url 替换为以下定义:
现在,按照 再次编译应用程序 a>第 5 章, Eclipse MicroProfile 和事务 - Narayana LRA, 并重建Docker 镜像;然后,运行容器,如下:
现在,让我们将 football-player-ui 前端应用程序容器化。