docker-compose配置networks
默認網絡
例如, 假設有一個項目,目錄名myapp
, docker-compose.yml
配置如下:
version: "3"
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
ports:
- "8001:5432"
當執行 docker-compose up
的時候。會發生以下事情:
- 會創建一個名字是
myapp_default
的網絡(networks) web
這個容器會加入到myapp_default
網絡中,並且在網絡中的名稱為:web
。db
這個容器會加入到myapp_default
網絡中,並且在網絡中的名稱為:db
。
這里,每個容器都能通過應用名找到對方,例如,web
容器可以通過 postgres://db:5432
來使用 Pg數據庫。
上面例子還有一個注意點就是端口號,注意區分HOST_PORT
和CONTAINER_PORT
,以上面的db為例:
8001
是宿主機的端口5432
(postgres的默認端口) 是容器的端口
當容器之間通訊時 , 是通過 CONTAINER_PORT
來連接的。
這里有宿主機端口,那么容器就可以通過宿主機端口和外部應用連接。
更新容器
對已經啟動的容器,再執行 docker-compose up
的時候,舊容器刪除,然后創建一個新的容器。
新容器會加入到網絡,相同的網絡名稱,但容器IP是不一樣的。已經連接的其他容器會自己重連到新的容器IP上。
自定義網絡
可能通過一級配置networks
來自定義網絡,可以創建更復雜的網絡選項和配置,也可以用來連接已經存在的網絡(不是通過compose創建的)
每個service
配置下也可以指定networks
配置,來指定一級配置的網絡。
例如:
version: "3"
services:
proxy:
build: ./proxy
networks:
- frontend
app:
build: ./app
networks:
- frontend
- backend
db:
image: postgres
networks:
- backend
networks:
frontend:
# Use a custom driver
driver: custom-driver-1
backend:
# Use a custom driver which takes special options
driver: custom-driver-2
driver_opts:
foo: "1"
bar: "2"
- 一級配置
networks
用來創建自定義的網絡 。這里配置了兩個frontend
和backend
. 且自定義了網絡類型。 - 每一個serviceg下,
proxy
,app
,db
都定義了一下networks
配置。proxy
只加入到frontend
網絡。db
只加入到backend
網絡。app
同時加入到frontend
和backend
。db
和proxy
不能通訊,因為不在一個網絡中。app
和兩個都能通訊,因為app
在兩個網絡中都有配置。db
和proxy
要通訊,只能通過app
這個應用來連接。
配置默認網絡
不指定網絡時,默認的網絡也是可以配置的。不配置的話,默認是使用:brige
,也可以修改為其他 的。
version: "3" services: web: build: . ports: - "8000:8000" db: image: postgres networks: default: # Use a custom driver driver: custom-driver-1
指定一個已經存在的網絡
多個容器,不在相同的配置中,也會有網絡通訊的需求 。那么就可以使用公共的網絡配置。
容器可以加入到已經存在的網絡。
networks: default: external: name: my-pre-existing-network
這里name
就是指定已經存在的網絡名稱。
作者:ElEGanT棇
鏈接:https://www.jianshu.com/p/3004fbce4d37
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。