CodeGym /Adesua ahorow /Docker SELF /使用自定義網絡

使用自定義網絡

Docker SELF
等級 17 , 課堂 4
開放

5.1 主要類型的自定義網路

Docker 中的自定義網路為容器之間的網路互動提供了靈活的配置和管理選項。它們可以隔離容器、組織容器之間的互動並創建複雜的網路拓撲。在這堂課中,我們將探討如何在 Docker 中創建和配置自定義網路,以及它們的使用範例。

主要類型的自定義網路

Docker 支援幾種類型的自定義網路,每種類型都有其特點,並適用於不同的使用場景:

  1. Bridge (橋接網路): 提供單一主機上容器之間的隔離和通信。這種類型的網路預設用於不需要與主機外部互動的本地應用程式。
  2. Overlay (疊加網路): 用於連接不同主機上的容器,例如在 Docker Swarm 或 Kubernetes 集群中運行的容器。它們為分散式應用提供了高擴展性和安全性。
  3. Macvlan: 容許容器直接使用主機的物理網路介面。這對於對性能要求極高的網路應用程式特別有用,也適合需要綁定到特定 MAC 地址的情況。在 Macvlan 網路中的容器可以作為獨立節點與物理網路中的其他設備互動。
  4. Host (主機網路): 容器使用主機的網路堆疊,這消除了網路虛擬化的額外開銷,但也減少了隔離性。這種類型的網路適用於需要最高網路性能的應用。

5.2 建立與使用橋接 (bridge) 網路

橋接網路 (bridge) 是最常見的一種自定義網路類型,用於隔離同一主機上的容器。連接到同一橋接網路的容器可以通過 IP 地址和主機名稱互相通信。

建立自定義 bridge 網路

要建立自定義 bridge 網路,請使用指令 docker network create:

Terminal

docker network create --driver bridge my_bridge_network

在自定義網路中啟動容器

啟動連接到已建立網路的容器:

Terminal

docker run -d --name container1 --network my_bridge_network nginx

docker run -d --name container2 --network my_bridge_network busybox sleep 1000

檢查容器之間的連線

你可以用指令 ping 來檢查容器之間的連線:

Terminal

docker exec container2 ping -c 4 container1

如果容器已正確地連接到網路 my_bridge_network,指令 ping 將執行成功。

5.3 在Docker Compose中使用自定義網路

Docker Compose中使用自定義網路的範例

Docker Compose 簡化了為多容器應用程式創建和管理網路的過程。你可以在 docker-compose.yml 文件中定義自定義網路。

docker-compose.yml 文件的範例:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - my_bridge_network

  app:
    image: myapp:latest
    networks:
      - my_bridge_network

networks:
  my_bridge_network:
    driver: bridge

執行 Docker Compose:

Terminal

docker compose up -d

在這個範例中,兩個服務 (webapp) 都連接到自定義網路 my_bridge_network

5.4 設定與使用 macvlan 網路

macvlan 網路允許容器直接使用主機的實體網路介面,這對於對網路性能有高要求的應用程式來說很有用。這種網路中的容器會獲得指定子網內的 IP 地址,讓它們可以和主機一樣在相同的網路中可見。

建立 macvlan 網路

Terminal

docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 my_macvlan_network

在這個命令中:

  • --subnet: 定義將容器放置的子網。
  • --gateway: 設定容器的網關。
  • -o parent: 指定主機的網路介面,網路將綁定於此。

macvlan 網路中啟動容器

Terminal

docker run -d --name container1 --network my_macvlan_network nginx

docker run -d --name container2 --network my_macvlan_network busybox sleep 1000

在這個例子中,兩個容器都連接到 my_macvlan_network 網路,並且可以通過實體網路介面 eth0 訪問外部網路。

5.5 在 Docker Compose 中的使用範例

你也可以在 Docker Compose 中使用 macvlan 網路。例如:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - my_macvlan_network
        
networks:
  my_macvlan_network:
    driver: macvlan
    driver_opts:
      parent: eth0
    ipam:
      config:
        - subnet: 192.168.1.0/24
          gateway: 192.168.1.1

執行 Docker Compose:

Terminal

docker compose up -d

在這個範例中,網路 my_macvlan_network 允許服務 web 與子網 192.168.1.0/24 中的設備互動,包括主機。

實際建議:

  • 訪問配置: 確保你的路由器或網路管理員允許使用 macvlan 設定中的子網。
  • 隔離: 如果安全性非常重要,使用 VLAN 進行網路分段,確保容器只能訪問必要的資源。
  • 測試: 完成配置後,使用 pingcurl 等指令測試容器與外部網路之間的連接。

5.6 使用網路構建微服務範例

來看看一個例子,其中我們有前端、後端和資料庫,這些都被隔離在不同的網路中,但仍然可以通過網路交叉進行互動。

檔案 docker-compose.yml

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier
        
  backend:
    image: mybackend:latest
    networks:
      - back-tier
      - db-tier
        
  database:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    networks:
      - db-tier
        
networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge
  db-tier:
    driver: bridge

運行 Docker Compose:

Terminal

docker compose up -d 

在這個範例中:

  • 服務 frontend 被連接到網路 front-tierback-tier,這讓它既能與外部客戶端互動,也能與後端互動。
  • 服務 backend 被連接到網路 back-tierdb-tier,這讓它既能與前端互動,也能與資料庫互動。
  • 服務 database 僅被連接到網路 db-tier,這保證了資料庫從外部訪問的隔離。

實用建議:

  • 使用隔離: 將網路分開有助於限制服務對資料庫或其他關鍵資源的訪問。
  • 檢查連接: 確保服務可以通過共享網路進行互動,可以使用 pingcurl 命令來測試。
  • 優化: 如果你的專案需要在群集或多主機上執行,請使用 overlay 網路。

這個範例說明了如何創建網路隔離,並同時在應用程序的不同層之間實現互動。

1
Опрос
Docker 網路設定,  17 уровень,  4 лекция
недоступен
Docker 網路設定
Docker 網路設定
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION