一翘魄、概述
默認情況下,Compose 會為我們的應用創(chuàng)建一個網(wǎng)絡舀奶,服務的每個容器都會加入該網(wǎng)絡中暑竟。這樣络它,容器就可被該網(wǎng)絡中的其他容器訪問,不僅如此野建,該容器還能以服務名稱作為 Hostname 被其他容器訪問彼城。
默認情況下,應用程序的網(wǎng)絡名稱基于 Compose 的工程名稱腹躁,而項目名稱基于 docker-compose.yml
所在目錄的名稱桑包。如需修改工程名稱,可使用 --project-name
標識或 COMPOSE_PORJECT_NAME
環(huán)境變量纺非。
假如一個應用程序在名為 myapp 的目錄中哑了,并且 docker-compose.yml
如下所示:
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
當我們運行 docker-compose up
時,將會執(zhí)行以下幾步:
- 創(chuàng)建一個名為 myapp_default 的網(wǎng)絡
- 使用 web 服務的配置創(chuàng)建容器烧颖,它以 web 這個名稱加入網(wǎng)絡 myapp_default
- 使用 db 服務的配置創(chuàng)建容器弱左,它以 db 這個名稱加入網(wǎng)絡 myapp_default
容器間可使用服務名稱(web 或 db)作為 Hostname 相互訪問。例如炕淮,web 這個服務可使用postgres://db:5432
訪問 db 容器拆火。
當服務的配置發(fā)生更改時,可使用docker-compose up
命令更新配置鳖悠。此時榜掌,Compose 會刪除舊容器并創(chuàng)建新容器。新容器會以不同的 IP 地址加入網(wǎng)絡乘综,名稱保持不變憎账。任何指向舊容器的連接都會被關閉,容器會重新找到新容器并連接上去卡辰。
二胞皱、使用 links
默認情況下,服務之間可使用服務名稱相互訪問九妈。links 允許我們定義一個別名反砌,從而使用該別名訪問其他服務。
version: '2'
services:
web:
build: .
links:
- "db:database"
db:
image: postgres
三萌朱、自定義網(wǎng)絡
一些場景下宴树,默認的網(wǎng)絡配置滿足不了我們的需求,此時我們可使用 networks 命令自定義網(wǎng)絡晶疼。networks 命令允許我們創(chuàng)建更加復雜的網(wǎng)絡拓撲并指定自定義網(wǎng)絡驅(qū)動和選項酒贬。不僅如此,我們還可使用 networks 將服務連接到不是由 Compose 管理的翠霍、外部創(chuàng)建的網(wǎng)絡锭吨。
version: '3'
services:
proxy:
build: nginx
networks:
- front
app:
build: ./app
networks:
- front
- back
db:
image: postgres
networks:
- back
networks:
front:
# Use a custom driver
driver: custom-driver-1
back:
# Use a custom driver which takes special options
driver: custom-driver-2
driver_opts:
foo: "1"
bar: "2"
其中,proxy 服務與 db 服務隔離寒匙,兩者分別使用自己的網(wǎng)絡零如;app 服務可與兩者通信。使用 networks 命令,即可方便實現(xiàn)服務間的網(wǎng)絡隔離與連接考蕾。
四祸憋、配置默認網(wǎng)絡
version: '3'
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
networks:
default:
driver: custom-driver-1
這樣,就可為該應用指定自定義的網(wǎng)絡驅(qū)動
五肖卧、已存在的網(wǎng)絡
我們可以預先創(chuàng)建一個名為 myapp 的網(wǎng)絡夺衍,讓 Compose 加入這個新創(chuàng)建的網(wǎng)絡,使所有 Compose 可以通信喜命,此時使用 external 選項沟沙。
# 創(chuàng)建網(wǎng)絡
docker network create <Network Name>
# 查看已存在的網(wǎng)絡
docker network list
networks:
default:
external:
name: web