通过http为api网关链接的docker容器之间的通信

时间:2016-10-18 07:50:16

标签: go docker

我目前正在开发一个golang网络应用程序,该应用程序目前是一个由众多软件包组成的应用程序,并部署在一个独立的docker容器中。我有一个redis实例和一个部署的mysql实例,并作为单独的容器链接。为了获取它们的地址,我从docker设置的环境变量中提取它们。我想实现一个api网关模式,其中我有一个服务公开HTTP端口(80为http或443为https),称为'api',它代理对其他服务的请求。其他服务理想情况下不公开任何端口,而是直接与它们所依赖的服务链接。

因此,api将与除mysql和redis之外的所有服务相关联。任何需要验证用户会话信息的服务都将与用户服务等链接。我的问题是,如何让我的http服务器在我的容器之间的docker链接端口上侦听http请求。

1 个答案:

答案 0 :(得分:2)

最简单的方法是Docker Compose。您可以简单地定义所需的服务,Docker Compose会自动将它们链接到专用网络中。假设您拥有goappredismysql实例,并希望使用nginx作为反向代理。您的docker-compose.yml文件如下所示:

services:
  redis:
    image: redis
  mysql:
    image: mysql
  goapp:
    image: myrepo/goapp
  nginx:
    image: nginx
    volumes:
      - /PATH/TO/MY/CONF/api.conf:/etc/nginx/conf.d/api.conf
    ports:
      - "443:443"
      - "80:80"

优点是您可以通过其名称引用其他服务的任何服务。因此,从您的goapp,您可以在主机名mysql下访问您的MySQL服务器,依此类推。唯一暴露的端口(即可从主机访问)是44380容器的nginx

您可以使用docker-compose up启动整个系统!