說明
Docker Swarm 是 Docker 的一個原生的叢集管理工具,可以把多個Docker主機(節點)組織成一個叢集,使得容器可以組成跨主機的子網網路,此外,Docker Swarm 還內建了部署和管理叢集的API、服務發現和高可用等功能。
這裡在 Windows10 環境下,先使用 Docker machine 命令工具建立多個虛擬機器(3 個 manager 和 2 個 worker),並用 Docker swarm 來搭建一個叢集。
新增一個虛擬交換機
關於如何在 Windows10 安裝 docker,到官網下載 Docker for Window,按說明安裝就是了(注意開啟Hyper-V),這裡略過。Docker for Window 已經內建了 docker-machine 工具,不用再另外安裝。
Docker for Window 安裝完成後。開啟window選單搜尋‘hyper’,選擇Hyper管理器開啟:
點選右側的虛擬交換機管理器
,將會開啟視窗:
點選新建虛擬網路交換機
,在右側視窗中選中外部
,並點選建立虛擬交換機
按鈕。接下來在右側新出的視窗中,填寫名稱,比如這裡填寫:Primary Virtual Switch
,選擇連線型別為外部網路
,最後點選確定
。一個虛擬交換機就建立完成了。
建立虛擬主機
到 boot2docker頁面上下載boot2docker.iso
檔案,放置到C:\Users\<your-name>\.docker\machine\cache
(注意 \<your-name> 替換為你的PC上的使用者名稱稱,當然也可以不用這一步,直接執行虛擬機器建立命令,但這樣速度較慢)。
接在建立一個虛擬機器:
docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" manager1
命令列輸出如下:
C:\WINDOWS\system32>docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" manager1
Running pre-create checks...
Creating machine...
(manager1) Unable to get the latest Boot2Docker ISO release version: Get https://api.github.com/repos/boot2docker/boot2
docker/releases/latest: EOF
(manager1) Copying C:\Users\hugh\.docker\machine\cache\boot2docker.iso to C:\Users\<your-name>\.docker\machine\machines\manager1\boot2docker.iso...
(manager1) Creating SSH key...
(manager1) Creating VM...
(manager1) Using switch "Primary Virtual Switch"
(manager1) Creating VHD
(manager1) Starting VM...
(manager1) Waiting for host to start...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env manager1
大概1-2分鐘就建立完成了。接著,以同樣地方式建立其他的虛擬機器,命令列依次執行:
docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" manager2
docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" manager3
docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" worker1
docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" worker2
這樣,我們就建立了5臺虛擬主機。執行docker-machine ls
檢視建立的虛擬機器,結果如下:
記住每個節點的IP地址,後面會有用。
檢視 manager1 虛擬主機環境:
docker-machine env manager1
輸出結果大概如下:
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.3.106:2376
SET DOCKER_CERT_PATH=C:\Users\hugh\.docker\machine\machines\manager1
SET DOCKER_MACHINE_NAME=manager1
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
REM Run this command to configure your shell:
REM @FOR /f "tokens=*" %i IN ('docker-machine env manager1') DO @%i
建立Swarm叢集
初始化一個Swarm叢集
我們可以使用 docker-machine 的 ssh 工具連線到虛擬機器。需要登入哪個虛擬機器執行命令,可以在命令列前面新增docker-machine ssh <host-name>
,表示連線到哪個主機。所以可以這樣執行命令初始化一個Swarm:
docker-machine ssh manager1 docker swarm init --advertise-addr 192.168.3.106:2377 --listen-addr 192.168.3.106:2377
--advertise-addr
指定了其他節點連線到當前節點的IP和埠,--listen-addr
指定監聽地址,預設為TCP的2377埠(0.0.0.0:2377)。執行後輸出結果如下:
Swarm initialized: current node (yxsk9zdj5n5u1k73rts861r03) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-cixvg4yoz9h7u4m8jgq5178il 192.168.3.106:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
檢視剛剛建立的節點:
docker-machine ssh manager1 docker node ls
結果如下:
這是一個Leader管理者節點。
新增worker節點
-
執行:
docker-machine ssh manager1 docker swarm join-token worker
,將會輸出:To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-cixvg4yoz9h7u4m8jgq5178il 192.168.3.106:2377
結果中包含了一個token,這在後面新增worker節點時會用到。
-
將 worker1 節點新增到叢集,執行以下命令:
docker-machine ssh worker1 docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-cixvg4yoz9h7u4m8jgq5178il 192.168.3.106:2377 --advertise-addr 192.168.3.109:2377 --listen-addr 192.168.3.109:2377
--advertise-addr
和--listen-addr
選項是可選的,但添上為佳。
同理,新增 worker2 節點到叢集(注意 worker2 節點的IP地址為:192.168.3.110)。
新增manager節點
與新增worker節點的過程基本一致。
-
執行:
docker-machine ssh manager1 docker swarm join-token manager
生成token。輸出結果如下:To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-66hrkcz0y8k8c5bpy8if6zzm6 192.168.3.106:2377
-
新增剩下的兩個管理者節點,分別執行:
# 新增manager2 docker-machine ssh manager2 docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-66hrkcz0y8k8c5bpy8if6zzm6 192.168.3.106:2377 --advertise-addr 192.168.3.107:2377 --listen-addr 192.168.3.107:2377 # 新增manager3 docker-machine ssh manager3 docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-66hrkcz0y8k8c5bpy8if6zzm6 192.168.3.106:2377 --advertise-addr 192.168.3.108:2377 --listen-addr 192.168.3.108:2377
至此,所有節點均建立完成。執行
docker-machine ssh manager1 docker node ls
檢視建立成果: