我目前正在开发一个golang网络应用程序,该应用程序目前是一个由众多软件包组成的应用程序,并部署在一个独立的docker容器中。我有一个redis实例和一个部署的mysql实例,并作为单独的容器链接。为了获取它们的地址,我从docker设置的环境变量中提取它们。我想实现一个api网关模式,其中我有一个服务公开HTTP端口(80为http或443为https),称为'api',它代理对其他服务的请求。其他服务理想情况下不公开任何端口,而是直接与它们所依赖的服务链接。
因此,api将与除mysql和redis之外的所有服务相关联。任何需要验证用户会话信息的服务都将与用户服务等链接。我的问题是,如何让我的http服务器在我的容器之间的docker链接端口上侦听http请求。
答案 0 :(得分:2)
最简单的方法是Docker Compose。您可以简单地定义所需的服务,Docker Compose会自动将它们链接到专用网络中。假设您拥有goapp
,redis
和mysql
实例,并希望使用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服务器,依此类推。唯一暴露的端口(即可从主机访问)是443
和80
容器的nginx
。
您可以使用docker-compose up
启动整个系统!