Windows利用Swarm原生Docker集羣踩坑總結

環境:

角色機器名稱操作系統IP備註
MaterWeb30Windows Server 2016 GUI192.168.2.30安裝最新推薦補丁
NodeWeb31Windows Server 2016 Core192.168.2.31安裝最新推薦補丁
NodeWeb32Windows Server 2016 Core192.168.2.32安裝最新推薦補丁


第一坑:Windows Server 2016 Core

1.操作系統分區坑

   由於我們使用的Windows鏡像都是基於microsoft/windowsservercore大小都在10G左右,還需要安裝IIS、aspnet等等,另外如果涉及到鏡像導出也會佔用C盤空間,如果是做Docker的話建議C盤空間不小於60G,或者乾脆只分C盤。

  踩坑解決辦法:在硬盤還有大量富餘空間的情況下,可採用掛載文件夾的形式,掛載C:\ProgramData\docker\windowsfilter文件夾

wKioL1lfLpmzYXVfAAIbUUyH2k8544.jpg


2.命令行如何設置機器IP及機器名稱及開啓遠程桌面

在CMD命令提示符下執行sconfig即可,建議開啓遠程桌面方面命令輸入

wKiom1lfLqfAxUXTAACuVt1f56k440.jpg 

3.安裝Docker之前一定需要安裝最新的Windows補丁

方法:sconfig--->6)下載並安裝更新--->R)僅搜索推薦的更新---->A)安裝所有


4.文件如何複製到Windows Server Core下,在命令行下

打開可寫共享

cd \

mkdir share

net share share=c:\share /grant:everyone,full

連接共享

net use z: \\192.168.2.30\share password /user:administrator

於是就映射共享到Z盤,進入Z盤即可操作文件

刪除共享

net share c:\share /del /y


5.在Windows命令行如何查看文件

type filename.txt

追加文件

echo 127.0.0.1 web30 >>\windows\system32\drivers\etc\hosts


6.查看Windows進程

tasklist


7.殺死進程

tskill


第二坑:Windows 2016原生Docker

1.Windows安裝Docker

在命令提示符出入powershell,

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider

如果第二部提示未安裝補丁,則需要安裝最新Windows補丁,輸入sconfig第6步

安裝完成之後重啓服務器


2.配置所有服務器的防火牆規則

TCP 端口 2377 用於羣集管理通信

TCP 和 UDP 端口 7946 用於節點間通信

TCP 和 UDP 端口 4789 用於覆蓋網絡通信

netsh advfirewall firewall add rule name="swm 2377" dir=in action=allow protocol=TCP localport=2377 
netsh advfirewall firewall add rule name="swm 7946" dir=in action=allow protocol=TCP localport=7946
netsh advfirewall firewall add rule name="swm 7946udp" dir=in action=allow protocol=UDP localport=7946
netsh advfirewall firewall add rule name="swm 4789" dir=in action=allow protocol=TCP localport=4789
netsh advfirewall firewall add rule name="swm 4789udp" dir=in action=allow protocol=UDP localport=4789


3.初始化羣集模式

在Master上執行

C:\> docker swarm init --advertise-addr=192.168.2.30 --listen-addr 192.168.2.30:2377

坑:在Linux上執行docker swarm init即可初始化集羣,但是在Windows上會卡住不動,在windows上需要指定IP及端口


4.加入集羣(在Web31和Web32執行)

在上面提示輸入

docker swarm join \
    --token SWMTKN-1-1lbjx00s1qsjbjfuoq92f6d95mf41arbhwbkkigmo1smjqs38r-8i0bdakwhc3lvbbog8fnmvgmw \
    192.168.2.30:2377

即可加入集羣,注意此處需要修改爲一行

docker swarm join --token SWMTKN-1-1lbjx00s1qsjbjfuoq92f6d95mf41arbhwbkkigmo1smjqs38r-8i0bdakwhc3lvbbog8fnmvgmw 192.168.2.30:2377

坑1:加入集羣命令只可以用一行,不可以使用\來進行換行

坑2:一定要在防火牆打開相應的規則,打開2377/TCP、7946/TCP、7946/UDP、4789/TCP、4789/UDP端口

坑3:目前測試Linux可以加入Windows Swarm集羣,Windows也可以加入Linux Swarm集羣,經過測試我將Linux節點加入Windows Swarm集羣是正常工作的,但是Linux Swarm Master管理Windows節點報錯,不知是否跟版本存在關係


在Windows Swarm Master節點上執行

docker service create --name=ping --constraint "Node.Platform.OS==Linux" --network=myspace centos ping 127.0.0.1


注意:--constraint "Node.Platform.OS==Linux"一定是雙引號,不能是單引號,否則報Error response from daemon: rpc error: code = 2 desc = key ''node.Platform.OS' is invalid



5.服務端口映射問題

在Linux環境下我們可以通過

docker service create -name web -p 80:80 nginx

在執行之後各個節點都可以通過80端口進行服務,但是在Windows是不行的

docker service create -name iis -p 80:80 microsoft/iis執行之後是無法通過80端口訪問

目前是通過

docker service create -name iis -p mode=host,target=80,published=80,protocol=tcp microsoft/iis


然後通過docker service ps iis

C:\Users\Administrator>docker service ps iis
ID            NAME   IMAGE                 NODE   DESIRED STATE  CURRENT STATE        ERROR  PORTS
e118tf9vu15l  iis.2  microsoft/iis:latest  Web32  Running        Running 2 hours ago         *:8090->80/tcp

 可以看到容器在Web32上,這個時候訪問192.168.2.32:8090即可正常訪問,但是訪問主機的8090端口是無法使用的


6.Docker私有倉庫配置

配置私有倉庫

方法1:更改註冊表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Docker]

修改爲C:\Program Files\Docker\dockerd.exe --run-service --insecure-registry "192.168.2.234:5000"

方法2:修改Docker配置文件,建議修改配置文件

C:\ProgramData\docker\config\daemon.json

{

  "insecure-registries" : ["192.168.2.234:5000"]

}

如果沒有該文件可以創建以ASSIC形式


7.Windows Docker開啓遠程端口訪問

方法一:註冊表修改Docker啓動參數

C:\Program Files\Docker\dockerd.exe --run-service -D -H tcp://0.0.0.0:2375 -H npipe://

方法二:修改Docker daemon.json配置文件

{
    "hosts": ["tcp://0.0.0.0:2376", "npipe://"]
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章