多個 Docker Compose 項目之間的通信
瀏覽人數:768最近更新:
一、概述
我們通常使用單個docker-compose.yml
文件來引用 Docker Compose。但是,我們可能需要使用多個 YAML 文件,並且仍然能夠讓正在運行的容器成為同一網絡的一部分。
在這個簡短的教程中,我們將通過一些docker-compose.yml
示例了解如何使用network
連接多個 Docker Compose 項目。
2. 為多個 Docker Compose 項目使用網絡
由於 Docker Compose 引入了網絡,我們可以讓我們的容器了解現有網絡並讓它們加入它。
例如,假設我們希望我們的 Redis 緩存和 Web 應用程序屬於同一網絡,但它們是兩個不同的 YAML 文件。
2.1。加入現有網絡
首先,讓我們創建一個網絡:
docker network create network-example
然後,我們可以在 YAML 模板中定義對該現有網絡的引用。
讓我們看看我們的 Redis 定義:
services:
db:
image: redis:latest
container_name: redis
ports:
- '6379:6379'
networks:
- network-example
networks:
network-example:
external: true
讓我們在另一個文件中為我們的 Web 應用程序定義它:
services:
my_app:
image: "web-app:latest"
container_name: web-app
ports:
- "8080:8080"
networks:
- network-example
networks:
network-example:
external: true
2.2.在 YAML 模板中定義網絡
同樣,我們也可以在模板中定義一個network
,例如我們的redis_network
:
services:
db:
image: redis:latest
container_name: redis
ports:
- '6379:6379'
networks:
- network
networks:
network:
driver: bridge
name: redis_network
這一次,我們在設置web應用模板的時候,需要參考Redis現網:
services:
my_app:
image: "web-app:latest"
container_name: web-app
ports:
- "8080:8080"
networks:
- my-app
networks:
my-app:
name: redis_network
external: true
3. 運行和檢查容器
如果我們在服務定義中創建一個網絡,我們需要首先啟動該服務,就像我們例子中的 Redis 一樣:
docker-compose -f docker-compose-redis-service.yaml up -d && docker-compose -f docker-compose-my-app-service.yaml up -d
讓我們檢查一個正在運行的容器以查看網絡定義,例如,我們的 Redis 服務:
docker inspect 5c7f8b28480b
我們將看到redis_network
的條目。對於 web 應用檢查,我們將獲得相同的輸出:
"Networks": {
"redis_network": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"redis",
"4d23d918eb2c"
],
"NetworkID": "e122aa15d5ad150a66d87f3145084520bde540447a14a73f446ec6ea0603aba9",
"EndpointID": "8904a3389d0b20c6785884c702cb6ae1101522af1f99c079067171cbc9ca97e5",
"Gateway": "172.28.0.1",
"IPAddress": "172.28.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:1c:00:02",
"DriverOpts": null
}
}
同樣,我們可以檢查redis_network
:
docker network inspect redis_network
我們的兩個服務都屬於同一個網絡:
"Containers": {
"5c7f8b28480ba638ce993c6714841265c0a98d746b27205a756936bbe1850ac2": {
"Name": "redis",
"EndpointID": "238bb136d634100eccb7677e87ba07eb43f33be1dc320c795685230f04b809f9",
"MacAddress": "02:42:ac:1c:00:02",
"IPv4Address": "172.28.0.2/16",
"IPv6Address": ""
},
"8584ce3bb2ab1cd3d182346c67179a3aa5e40c71e806c35cc4ce7ea91cae7902": {
"Name": "web-app",
"EndpointID": "9cf0e484e5af1baf968249c312489a83f57a194098a51652c3f6eac19ed0d557",
"MacAddress": "02:42:ac:1c:00:03",
"IPv4Address": "172.28.0.3/16",
"IPv6Address": ""
}
}
4。結論
在本文中,我們了解瞭如何通過同一網絡連接多個 Docker Compose 服務。我們可以讓他們加入現有網絡或根據服務定義創建網絡。
與往常一樣,我們可以在 GitHub 上找到示例的源docker-compose.yml
文件。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議