Docker Compose 網(wǎng)絡(luò)設(shè)置
概述內(nèi)容
默認(rèn)情況下,Compose 會(huì)為我們的應(yīng)用創(chuàng)建一個(gè)網(wǎng)絡(luò)烫幕,服務(wù)的每個(gè)容器都會(huì)加入該網(wǎng)絡(luò)中济炎。這樣,容器就可被該網(wǎng)絡(luò)中的其他容器訪問(wèn)凯亮,不僅如此边臼,該容器還能以服務(wù)名稱作為 Hostname 被其他容器訪問(wèn)。
默認(rèn)情況下假消,應(yīng)用程序的網(wǎng)絡(luò)名稱基于 Compose 的工程名稱柠并,而項(xiàng)目名稱基于 docker-compose.yml
所在目錄的名稱。如需修改工程名稱富拗,可使用 --project-name
標(biāo)識(shí)或 COMPOSE_PORJECT_NAME
環(huán)境變量臼予。
假如一個(gè)應(yīng)用程序在名為 myapp 的目錄中,并且 docker-compose.yml
如下所示:
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
當(dāng)我們運(yùn)行 docker-compose up
時(shí)啃沪,將會(huì)執(zhí)行以下幾步:
- 創(chuàng)建一個(gè)名為 myapp_default 的網(wǎng)絡(luò)
- 使用 web 服務(wù)的配置創(chuàng)建容器粘拾,它以 web 這個(gè)名稱加入網(wǎng)絡(luò) myapp_default
- 使用 db 服務(wù)的配置創(chuàng)建容器,它以 db 這個(gè)名稱加入網(wǎng)絡(luò) myapp_default
容器間可使用服務(wù)名稱(web 或 db)作為 Hostname 相互訪問(wèn)创千。例如缰雇,web 這個(gè)服務(wù)可使用 postgres://db:5432
訪問(wèn) db 容器入偷。
當(dāng)服務(wù)的配置發(fā)生更改時(shí),可使用 docker-compose up
命令更新配置械哟。此時(shí)疏之,Compose 會(huì)刪除舊容器并創(chuàng)建新容器。新容器會(huì)以不同的 IP 地址加入網(wǎng)絡(luò)暇咆,名稱保持不變锋爪。任何指向舊容器的連接都會(huì)被關(guān)閉,容器會(huì)重新找到新容器并連接上去爸业。
使用 links
默認(rèn)情況下几缭,服務(wù)之間可使用服務(wù)名稱相互訪問(wèn)。links 允許我們定義一個(gè)別名沃呢,從而使用該別名訪問(wèn)其他服務(wù)年栓。
version: '2'
services:
web:
build: .
links:
- "db:database"
db:
image: postgres
自定義網(wǎng)絡(luò)
一些場(chǎng)景下,默認(rèn)的網(wǎng)絡(luò)配置滿足不了我們的需求薄霜,此時(shí)我們可使用 networks 命令自定義網(wǎng)絡(luò)某抓。networks 命令允許我們創(chuàng)建更加復(fù)雜的網(wǎng)絡(luò)拓?fù)洳⒅付ㄗ远x網(wǎng)絡(luò)驅(qū)動(dòng)和選項(xiàng)。不僅如此惰瓜,我們還可使用 networks 將服務(wù)連接到不是由 Compose 管理的否副、外部創(chuàng)建的網(wǎng)絡(luò)。
version: '2'
services:
proxy:
build: ./proxy
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 服務(wù)與 db 服務(wù)隔離备禀,兩者分別使用自己的網(wǎng)絡(luò);app 服務(wù)可與兩者通信奈揍。使用 networks 命令曲尸,即可方便實(shí)現(xiàn)服務(wù)間的網(wǎng)絡(luò)隔離與連接。
配置默認(rèn)網(wǎng)絡(luò)
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
networks:
default:
# Use a custom driver
driver: custom-driver-1
這樣男翰,就可為該應(yīng)用指定自定義的網(wǎng)絡(luò)驅(qū)動(dòng)
實(shí)操內(nèi)容
# 已存在的網(wǎng)絡(luò)
我們可以預(yù)先創(chuàng)建一個(gè)名為 myapp 的網(wǎng)絡(luò)另患,讓 Compose 加入這個(gè)新創(chuàng)建的網(wǎng)絡(luò),使所有 Compose 可以通信蛾绎,此時(shí)使用 external 選項(xiàng)昆箕。
# 創(chuàng)建網(wǎng)絡(luò)
docker network create <Network Name>局域網(wǎng)名字
# 查看已存在的網(wǎng)絡(luò)
docker network list
在需要加入同一局域網(wǎng)的容器 .yml或yaml文件中添加下面的代碼:
networks:
default:
external:
name: 局域網(wǎng)名字
一次構(gòu)建,到處運(yùn)行
請(qǐng)參考本節(jié)視頻(加微信13979751435獲茸夤凇)