一個非常好的問題。使用Docker時,宿主機和Docker容器之間、Docker容器和Docker容器之間,都需要進行服務間通訊。
Docker啟動容器時,指定服務埠,比如啟動Redis時,埠為6379,這時如果需要訪問Redis服務,就使用ip地址:埠,或者直接使用localhost:6379
在需要直接登入到容器時,可以使用docker命令,比如:
其中data_redis_1時容器名稱,可以透過docker ps檢視當前容器資訊:
Docker容器快捷高效部署應用,資源編排定義和執行多個容器,透過docker-compose.yml配置檔案宣告各個服務,作為一個整體來建立和啟動。
那麼Docker容器之間怎麼通訊呢?顯然是不應該使用IP地址的,應該使用和配置hostname,如果在不同子網,就增加networks資訊。
1,配置hostname
以Redis為例,Redis服務被API服務呼叫,為Redis配置hostname: cache
2,引用hostname
API服務在application.yml中配置Redis連線資訊時,使用hostname指定服務地址:
3,不同子網間配置networks資訊
實際使用中經常將服務按照不同類別部署在不同子網中,這時需要指定networks資訊。以資料層和介面層為例:
1)部署Redis時,配置networks為data,橋接模式
2)部署API服務時,宣告networks資訊,data是external外部子網
一個非常好的問題。使用Docker時,宿主機和Docker容器之間、Docker容器和Docker容器之間,都需要進行服務間通訊。
一,宿主機和Docker容器之間Docker啟動容器時,指定服務埠,比如啟動Redis時,埠為6379,這時如果需要訪問Redis服務,就使用ip地址:埠,或者直接使用localhost:6379
在需要直接登入到容器時,可以使用docker命令,比如:
docker exec -it data_redis_1 bash其中data_redis_1時容器名稱,可以透過docker ps檢視當前容器資訊:
二,Docker容器之間Docker容器快捷高效部署應用,資源編排定義和執行多個容器,透過docker-compose.yml配置檔案宣告各個服務,作為一個整體來建立和啟動。
那麼Docker容器之間怎麼通訊呢?顯然是不應該使用IP地址的,應該使用和配置hostname,如果在不同子網,就增加networks資訊。
1,配置hostname
以Redis為例,Redis服務被API服務呼叫,為Redis配置hostname: cache
2,引用hostname
API服務在application.yml中配置Redis連線資訊時,使用hostname指定服務地址:
3,不同子網間配置networks資訊
實際使用中經常將服務按照不同類別部署在不同子網中,這時需要指定networks資訊。以資料層和介面層為例:
1)部署Redis時,配置networks為data,橋接模式
2)部署API服務時,宣告networks資訊,data是external外部子網