[英]Communication between linked docker containers over http for api gateway
我目前正在使用golang網絡應用程序,該應用程序目前是一個由許多軟件包組成的應用程序,並已部署在單獨的docker容器中。 我有一個redis實例和一個mysql實例作為單獨的容器進行部署和鏈接。 為了獲取它們的地址,我將它們從docker設置的環境變量中拉出。 我想實現一種api網關模式,其中有一個服務公開了稱為“ api”的HTTP端口(對於HTTP為80或對於HTTPs為443),該服務將請求轉發給其他服務。 理想情況下,其他服務不會公開公開任何端口,而是直接與其所依賴的服務鏈接。
因此,api將與除mysql和redis之外的所有服務鏈接。 任何需要驗證用戶會話信息的服務都將與用戶服務等鏈接。我的問題是,如何使我的http服務器偵聽docker鏈接到我的容器之間的端口上的http請求。
最簡單的方法是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服務器。 唯一公開的端口(即從主機可訪問的端口)是nginx
容器的443
和80
。
您可以使用docker-compose up
啟動整個系統!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.