Nodejs Docker开发微服务

时间:2018-04-09 22:05:14

标签: docker

我正在使用微服务架构构建应用程序。

基本上,我的应用程序看起来像这样

API GATEWAY(port 3000) => USERS-SERVICE(port 9090), AUTH-SERVICE(port 8080), SEND-SMS-SERVICE(port 7070).

直到现在一切正常。

现在我尝试在我的项目中实现docker。我为每个服务构建一个图像 并在我的本地计算机上为每个运行容器实例。

现在我想开发新的服务客户服务。并且此服务在

上运行
  

http://localhost:3030

问题:

1)我如何从api网关请求http://localhost:3030,如果在开发中我从容器运行api-gateway。

2 个答案:

答案 0 :(得分:1)

您必须了解网络概念,当您启动独立的docker实例并且您没有定义网络时,它们之间将无法访问它们。

还有其他一些事情,您无法使用localhost访问Docker中托管的一个微服务到其他docker镜像中托管的其他Micro服务,localhost127.0.0.1。这是对本地机器的调用。那么docker的概念就像“在同一台机器上运行的不同机器”就像一个虚拟机,但是docker共享主机内核。

您可以通过两种方式访问​​其他泊坞窗图像。

  • 在主机网络中配置,我不建议
  • 创建网络,将每个docker镜像实例添加到此网络,并使用容器名称调用其他微服务。 IE可以使用http://my-service-1:3400/api/v1/post

我建议你使用docker-compose。

这是我的一个存储库,我创建了使用JWT共享节点应用程序的支持,但是这个项目使用Docker和docker-compose

https://github.com/camiloperezv/jwt-template

如何查看,我在Network中定义docker-compose.yml属性,并在我的所有服务中使用此网络。

在服务部分,您将放置所有微服务,在代码中,您将使用容器名称而不是使用localhost或IP地址来发出http请求。

在我的服务中使用build: .这是用于开发的用途,在生产中你应该使用预构建的docker镜像而不是在生产服务器上构建它。

随意使用我的github代码。

此致

答案 1 :(得分:0)

据我从问题中了解,新服务Costumer-Service在主机上的http://localhost:3030上运行。

如果是,则应在主机网络中启动api-gateway泊坞窗容器:

docker run --network host -d <api-gateway_image_name>

Costumer-Service可以从localhost:3030容器api-gateway访问CREATE TABLE Employee_id_credits ( Employee_id, credits ) AS SELECT 10, 1 FROM DUAL UNION ALL SELECT 12, 1 FROM DUAL UNION ALL SELECT 10, 1 FROM DUAL UNION ALL SELECT 12, 1 FROM DUAL UNION ALL SELECT 12, 1 FROM DUAL UNION ALL SELECT 14, 1 FROM DUAL; CREATE TABLE Employee_Manager ( Employee_id, Manager_id ) AS SELECT 10, 101 FROM DUAL UNION ALL SELECT 12, 120 FROM DUAL UNION ALL SELECT 13, 120 FROM DUAL UNION ALL SELECT 14, 150 FROM DUAL UNION ALL SELECT 101, NULL FROM DUAL UNION ALL SELECT 120, 130 FROM DUAL UNION ALL SELECT 130, NULL FROM DUAL;