07.Docker Compose 內(nèi)網(wǎng)設置(同一局域網(wǎng)下)

Docker Compose 網(wǎng)絡設置

概述內(nèi)容

默認情況下,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: '2'
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)絡驅動和選項。不僅如此,我們還可使用 networks 將服務連接到不是由 Compose 管理的、外部創(chuàng)建的網(wǎng)絡。

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 服務與 db 服務隔離,兩者分別使用自己的網(wǎng)絡;app 服務可與兩者通信。使用 networks 命令,即可方便實現(xiàn)服務間的網(wǎng)絡隔離與連接。

配置默認網(wǎng)絡

version: '2'

services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

networks:
  default:
    # Use a custom driver
    driver: custom-driver-1

這樣,就可為該應用指定自定義的網(wǎng)絡驅動

實操內(nèi)容

# 已存在的網(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)名字

# 查看已存在的網(wǎng)絡
docker network list

在需要加入同一局域網(wǎng)的容器 .yml或yaml文件中添加下面的代碼:

networks:
  default:
    external:
      name:  局域網(wǎng)名字

一次構建,到處運行

請參考本節(jié)視頻(加微信13979751435獲?。?/p>

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容