环境:
角色 | 机器名称 | 操作系统 | IP | 备注 |
Mater | Web30 | Windows Server 2016 GUI | 192.168.2.30 | 安装最新推荐补丁 |
Node | Web31 | Windows Server 2016 Core | 192.168.2.31 | 安装最新推荐补丁 |
Node | Web32 | Windows Server 2016 Core | 192.168.2.32 | 安装最新推荐补丁 |
第一坑:Windows Server 2016 Core
1.操作系统分区坑
由于我们使用的Windows镜像都是基于microsoft/windowsservercore大小都在10G左右,还需要安装IIS、aspnet等等,另外如果涉及到镜像导出也会占用C盘空间,如果是做Docker的话建议C盘空间不小于60G,或者干脆只分C盘。
踩坑解决办法:在硬盘还有大量富余空间的情况下,可采用挂载文件夹的形式,挂载C:\ProgramData\docker\windowsfilter文件夹
2.命令行如何设置机器IP及机器名称及开启远程桌面
在CMD命令提示符下执行sconfig即可,建议开启远程桌面方面命令输入
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,
1
2
|
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 用于覆盖网络通信
1
2
3
4
5
|
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上执行
1
|
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执行)
在上面提示输入
1
2
3
|
docker swarm
join
\
--token SWMTKN-1-1lbjx00s1qsjbjfuoq92f6d95mf41arbhwbkkigmo1smjqs38r-8i0bdakwhc3lvbbog8fnmvgmw \
192.168.2.30:2377
|
即可加入集群,注意此处需要修改为一行
1
|
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节点上执行
1
|
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端口访问
目前是通过
1
|
docker service create -name iis -p mode=host,target=80,published=80,protocol=tcp microsoft
/iis
|
然后通过docker service ps iis
1
2
3
|
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启动参数
1
|
C:\Program Files\Docker\dockerd.exe --run-service -D -H tcp:
//0
.0.0.0:2375 -H npipe:
//
|
方法二:修改Docker daemon.json配置文件
1
2
3
|
{
"hosts"
: [
"tcp://0.0.0.0:2376"
,
"npipe://"
]
}
|