返回文章列表

WeaveDockerCompose整合進階應用

本文探討 Weave 與 Docker Compose 的整合,以及 Weave Scope 的應用,涵蓋 Weave 的安裝、組態、與 Docker Compose 的整合、Weave Scope 的使用、Swarm 叢集的關閉、Weavemesh 網路驅動程式的組態和測試,以及自定義 Docker

容器技術 網路管理

Weave 作為一個強大的網路外掛,能簡化 Docker 容器網路管理。本文詳細介紹 Weave 與 Docker Compose 的整合流程,從 Weave 安裝、叢集節點連線,到 Docker Compose 佈署 WordPress 應用,逐步說明如何利用 Weave 組態複雜的容器網路。同時,也涵蓋 Weave Scope 的安裝與使用,方便視覺化監控容器與主機狀態。此外,文章也探討了關閉 Swarm 叢集、組態 Weavemesh 網路驅動程式,以及測試其跨地理位置主機的連通性,最後簡述了自定義 Docker 擴充套件的建立方法,包含 Convoy、REX-Ray 和 Flocker 等第三方擴充套件的安裝與組態方式,提供讀者更全面的 Docker 擴充套件應用。

網路外掛的進階應用:Weave 與 Docker Compose 的整合

在前面的章節中,我們已經介紹了 Docker 的網路基礎和多主機網路的概念。現在,我們將探討 Weave 這個強大的網路外掛,並展示如何將其與 Docker Compose 結合使用,以實作更複雜的容器網路組態。

Weave 的安裝與組態

首先,我們需要在 Swarm 叢集的三個節點上安裝 Weave。Weave 會佈署三個容器,分別是 weaveworks/weaveexecweaveworks/weaveweaveworks/plugin。在第一個叢集節點上,我們執行以下命令:

docker-machine ssh chapter04-00 'curl -L git.io/weave -o /usr/local/bin/weave; chmod a+x /usr/local/bin/weave'
docker-machine ssh chapter04-00 weave launch --init-peer-count 3

內容解密:

  • docker-machine ssh chapter04-00:透過 SSH 連線到名為 chapter04-00 的 Docker Machine 虛擬機器。
  • curl -L git.io/weave -o /usr/local/bin/weave:下載 Weave 的安裝指令碼並將其儲存到 /usr/local/bin/weave
  • chmod a+x /usr/local/bin/weave:賦予 Weave 指令碼執行許可權。
  • weave launch --init-peer-count 3:啟動 Weave 並指定初始叢集節點數量為 3。

接著,在其他兩個叢集節點上重複相同的安裝步驟,並使用 weave connect 命令將它們連線到第一個節點:

docker-machine ssh chapter04-01 'curl -L git.io/weave -o /usr/local/bin/weave; chmod a+x /usr/local/bin/weave'
docker-machine ssh chapter04-01 weave launch --init-peer-count 3
docker-machine ssh chapter04-01 weave connect "$(docker-machine ip chapter04-00)"

docker-machine ssh chapter04-02 'curl -L git.io/weave -o /usr/local/bin/weave; chmod a+x /usr/local/bin/weave'
docker-machine ssh chapter04-02 weave launch --init-peer-count 3
docker-machine ssh chapter04-02 weave connect "$(docker-machine ip chapter04-00)"

內容解密:

  • 在每個節點上安裝 Weave 並啟動。
  • 使用 weave connect 命令將其他節點連線到第一個節點,實作叢集互聯。

安裝完成後,使用 weave status 命令檢查叢集狀態,確認三個節點之間是否成功建立連線。

Docker Compose 與 Weave 的整合

現在,我們將使用 Docker Compose 來佈署一個 WordPress 應用,並利用 Weave 的網路功能。Docker Compose 檔案如下:

version: '2'
services:
  wordpress:
    container_name: "my-wordpress-app"
    image: wordpress
    ports:
      - "80:80"
    environment:
      - "WORDPRESS_DB_HOST=mysql.weave.local:3306"
      - "WORDPRESS_DB_PASSWORD=password"
      - "constraint:node==chapter04-01"
    hostname: "wordpress.weave.local"
    dns: "172.17.0.1"
    dns_search: "weave.local"
    volumes:
      - "uploads:/var/www/html/wp-content/uploads/"
  mysql:
    container_name: "my-wordpress-database"
    image: mysql
    environment:
      - "MYSQL_ROOT_PASSWORD=password"
      - "constraint:node==chapter04-02"
    hostname: "mysql.weave.local"
    dns: "172.17.0.1"
    dns_search: "weave.local"
    volumes:
      - "database:/var/lib/mysql"
volumes:
  uploads:
    driver: local
  database:
    driver: local
networks:
  default:
    driver: weave

內容解密:

  • version: '2':指定 Docker Compose 檔案版本。
  • services:定義了兩個服務:wordpressmysql
  • wordpress 服務使用 wordpress 映象,並將主機的 80 埠對映到容器的 80 埠。
  • environment:設定環境變數,例如資料函式庫連線資訊。
  • constraint:node==chapter04-01:指定該服務執行在特定的 Swarm 節點上。
  • dnsdns_search:組態 DNS 服務和搜尋域,這些值可以透過 weave dns-args 命令取得。
  • volumes:定義持久化儲存卷。
  • networks.default.driver: weave:指定使用 Weave 網路驅動。

執行以下命令啟動服務:

docker-compose up -d
docker-compose ps
docker ps

內容解密:

  • docker-compose up -d:在後台啟動服務。
  • docker-compose psdocker ps:檢查容器執行狀態。

Weave Scope 的安裝與使用

Weave Scope 是用於視覺化容器和主機的工具。我們可以在 Swarm 叢集上安裝 Scope 以監控容器狀態。首先,在 Swarm 主節點上執行:

docker-machine ssh chapter04-00 'curl -L git.io/scope -o /usr/local/bin/scope; chmod a+x /usr/local/bin/scope'
docker-machine ssh chapter04-00 scope launch

然後在其他兩個節點上執行:

docker-machine ssh chapter04-01 'curl -L git.io/scope -o /usr/local/bin/scope; chmod a+x /usr/local/bin/scope'
docker-machine ssh chapter04-01 scope launch $(docker-machine ip chapter04-00)

docker-machine ssh chapter04-02 'curl -L git.io/scope -o /usr/local/bin/scope; chmod a+x /usr/local/bin/scope'
docker-machine ssh chapter04-02 scope launch $(docker-machine ip chapter04-00)

內容解密:

  • 在每個節點上下載並安裝 Scope。
  • 在 Swarm 主節點上啟動 Scope,並在其他節點上將 Scope 連線到主節點。

最後,開啟瀏覽器存取 Scope 介面:

open http://$(docker-machine ip chapter04-00):4040/

你將看到 Swarm 叢集及其執行中的容器的視覺化表示。

關閉Swarm叢集並組態Weavemesh網路驅動程式

正如我們所見,Weave是一個相當強大的SDN(軟體定義網路),其組態過程相當直接。然而,Weave所提供的功能遠不止於此,它能夠實作Docker的多主機網路。

關閉Swarm叢集

在進一步探索Weavemesh網路驅動程式之前,我們先來關閉我們的Swarm叢集並終止相關的主機:

docker-machine stop chapter04-00 chapter04-01 chapter04-02 service-discovery
docker-machine rm chapter04-00 chapter04-01 chapter04-02 service-discovery

執行上述命令後,請登入您的DigitalOcean控制台,確認沒有任何標記為chapter04的機器正在執行。請記住,無論您是否正在使用這些機器,您都會被收取每小時的費用。

Weavemesh驅動程式

我們已經瞭解瞭如何將Weave Net與Docker Swarm叢集結合使用,以實作多主機網路。現在,讓我們來看看第二個Weave網路驅動程式——Weavemesh。

組態Weavemesh

首先,使用Docker Machine在不同的地區啟動兩個獨立的Docker主機。例如,我們可以在倫敦和紐約市各啟動一個主機:

docker-machine create \
  --driver digitalocean \
  --digitalocean-access-token sdnjkjdfgkjb345kjdgljknqwetkjwhgoih314rjkwergoiyu34rjkherglkhrg0 \
  --digitalocean-region lon1 \
  --digitalocean-size 1gb \
  mesh-london

docker-machine create \
  --driver digitalocean \
  --digitalocean-access-token sdnjkjdfgkjb345kjdgljknqwetkjwhgoih314rjkwergoiyu34rjkherglkhrg0 \
  --digitalocean-region nyc2 \
  --digitalocean-size 1gb \
  mesh-nyc

安裝和組態Weave

接下來,在這兩個主機上安裝和組態Weave:

docker-machine ssh mesh-london 'curl -L git.io/weave -o /usr/local/bin/weave; chmod a+x /usr/local/bin/weave'
docker-machine ssh mesh-london weave launch --password 3UnFh4jhahFC

docker-machine ssh mesh-nyc 'curl -L git.io/weave -o /usr/local/bin/weave; chmod a+x /usr/local/bin/weave'
docker-machine ssh mesh-nyc weave launch --password 3UnFh4jhahFC
docker-machine ssh mesh-nyc weave connect "$(docker-machine ip mesh-london)"

驗證Weave狀態

組態完成後,我們可以透過以下命令檢查Weave的狀態:

docker-machine ssh mesh-nyc weave status

從輸出結果中,我們可以看到加密功能已經啟用,並且我們的Weave網路中有兩個對等節點。

測試Weavemesh功能

現在,讓我們來測試一下Weavemesh的功能。首先,在紐約市的Docker主機上啟動一個NGINX容器:

docker $(docker-machine config mesh-nyc) run -itd \
  --name=nginx \
  --net=weave \
  --hostname="nginx.weave.local" \
  --dns="172.17.0.1" \
  --dns-search="weave.local" \
  russmckendrick/nginx

然後,從倫敦的Docker主機上檢查NGINX容器是否正常執行:

docker $(docker-machine config mesh-london) run -it \
  --rm \
  --net=weave \
  --dns="172.17.0.1" \
  --dns-search="weave.local" \
  russmckendrick/base wget -q -O- http://nginx.weave.local

docker $(docker-machine config mesh-london) run -it \
  --rm \
  --net=weave \
  --dns="172.17.0.1" \
  --dns-search="weave.local" \
  russmckendrick/base ping -c 3 nginx.weave.local

內容解密:

  1. 啟動NGINX容器:在紐約市的Docker主機上啟動了一個NGINX容器,並將其連線到Weave網路。
  2. DNS解析:透過Weave DNS服務進行網域名稱解析,使得在倫敦的主機上能夠存取紐約市主機上的NGINX容器。
  3. 網路連通性:驗證了不同地理位置的主機之間的網路連通性。

新增本地虛擬主機進行測試

為了進一步驗證Weavemesh的功能,我們可以新增一個本地虛擬主機:

docker-machine create -d virtualbox mesh-local

docker-machine ssh mesh-local 'sudo curl -L git.io/weave -o /usr/local/bin/weave; sudo chmod a+x /usr/local/bin/weave'
docker-machine ssh mesh-local sudo weave launch --password 3UnFh4jhahFC
docker-machine ssh mesh-local sudo weave connect "$(docker-machine ip mesh-london)"

docker $(docker-machine config mesh-local) run -it \
  --rm \
  --net=weave \
  --dns="172.17.0.1" \
  --dns-search="weave.local" \
  russmckendrick/base wget -q -O- http://nginx.weave.local

docker $(docker-machine config mesh-local) run -it \
  --rm \
  --net=weave \
  --dns="172.17.0.1" \
  --dns-search="weave.local" \
  russmckendrick/base ping -c 3 nginx.weave.local

圖表翻譯:

此圖示呈現了Weavemesh網路的架構,包括不同地理位置的主機之間的連線。

自定義 Docker 擴充套件的建立方法

Docker 除了提供核心工具外,也記錄了一套 API,讓核心 Docker 引擎能夠與第三方開發者編寫的外掛服務進行溝通。目前,這個 API 允許開發者將自定義的儲存和網路引擎整合到 Docker 中。

為何 Docker 限制擴充套件範圍?

雖然目前的 API 似乎限制了外掛的種類別,但 Docker 有其考量。讓我們來看看之前章節中安裝的一些外掛,並探討它們背後的運作機制。

已安裝的第三方擴充套件解析

在之前的章節中,我們介紹了幾個第三方擴充套件。現在,讓我們深入瞭解這些外掛背後的運作原理。

Convoy 擴充套件

Convoy 是第一個我們接觸到的第三方擴充套件。在安裝 Convoy 時,我們需要在 DigitalOcean 上啟動一個 Docker 主機,因為 Boot2Docker 作業系統的功能有限,無法滿足 Convoy 的需求。

# 在 DigitalOcean 上建立 Docker 主機
docker-machine create --driver digitalocean mesh-london

# 安裝 Convoy
curl -sSL https://github.com/rancher/convoy/releases/download/v0.5.0/convoy.tar.gz | tar xz -C /tmp
sudo mv /tmp/convoy/convoy /usr/local/bin/
sudo mv /tmp/convoy/convoy-pdata_tools /usr/local/bin/

內容解密:

  • 首先,我們需要在支援的作業系統上安裝 Convoy。由於 Boot2Docker 功能有限,我們選擇在 DigitalOcean 上建立 Docker 主機。
  • 下載並解壓縮 Convoy 的靜態二進位制檔案到適當的位置。
  • 建立 Docker 外掛資料夾並將 Convoy 的 socket 檔案連結到該資料夾中。

REX-Ray 擴充套件

接著,我們安裝了 REX-Ray。安裝過程涉及執行一個 bash 指令碼,該指令碼會根據作業系統下載並安裝正確的 DEB 或 RPM 套件。

# 安裝 REX-Ray
curl -sSL https://dl.bintray.com/emccode/rexray/install | sh -

內容解密:

  • REX-Ray 的安裝指令碼會自動偵測作業系統並下載對應的安裝套件。
  • 安裝完成後,REX-Ray 會註冊為系統服務,可以使用系統服務管理命令進行啟動和停止。

Flocker 擴充套件

Flocker 的安裝則是透過 AWS CloudFormation 範本來完成。這個範本負責啟動 Docker 主機、設定安全群組,並安裝和組態 Docker 和 Flocker。

# AWS CloudFormation 範本範例
Resources:
  DockerHost:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: 'ami-abcd1234'
      InstanceType: 't2.micro'

內容解密:

  • Flocker 使用 AWS CloudFormation 自動化佈署流程,簡化了安裝和組態步驟。
  • 範本定義了所需的資源,包括 EC2 例項及其屬性。