当前位置: 首页 > 工具软件 > nanoserver > 使用案例 >

TP5 NanoServer 物理机部署脚本 + docker 部署

琴正初
2023-12-01

注意:本教程 docker 部署部分已经过期,将于近期进行修改。可到 https://msdn.microsoft.com/en-us/virtualization/windowscontainers/deployment/deployment_nano 查看 nt docker 的新的部署方案。


声明:
    微软官方给出的部署步骤都是基于 PowerShell 的,如果要在上面部署 Docker,需要对原命令进行修改,否则不支持 docker 工作目录的软连接。
    本工具仅使用 cmd 进行部署,并且没有“域”相关操作。
    docker 服务,依照官方 TP5 (Windows Server 2016 Technical Preview 5 )教程,使用的是开机启动的“计划任务”来实现,
    之前尝试过 sc.exe 来进行,但是因为 dockerd.exe 无 MainServer 函数,会在服务启动 30 秒后挂掉。
    而其他的基于 cmd 和 PowerShell 的多线程方案,都会在连接 session 关闭后 kill 掉……
    而单纯使用 schtasks 命令,无法指定计划任务的工作路径,将导致计划任务启动失败。(在脚本中 cd 到工作路径方式无效。)
    使用官网提供 PowerShell 命令定制计划任务,没有处理电池问题(使用笔记本搭建会有印象),所以采用 schtasks 读取 xml 的方式。
    注意:此工具建立的 docker 服务默认是开放的,没有限制客户端连接,如果想要使用安全连接,请将生成的密钥放入 %ProgramData%\docker\certs.d 文件夹中。


脚本:
    代码整理好放到 github 上了,会不定期更新,地址: https://github.com/nidnil/extcmd/blob/master/nano.cmd


准备:
    注意,此脚本需要TP5  iso 镜像,
    如果使用 pkg 命令,脚本本身会遍历所有光驱寻找 TP5 文件。


快速建立可使用的 nanoserver vhd 文件:
    nano.cmd nanovhd [TP 5文件路径] [工作路径] [nanoserver 计算机名称] [虚拟磁盘大小,建议使用 30GB] [nanoserver 登录密码] [扩展命令]


操作说明:
    直接执行 nano.cmd 或 nano.cmd /?  可以列出所有支持的方法。
    nano.cmd [方法名] /?  可以查看方法的用法。


    其中 nanowim 和 nanovhd 会执行微软官方博客上的创建 wim 或 vhd 的脚本,并自动下载 docker 文件和配置首次启动脚本。
    详细参数使用 nano.cmd nanovhd /? 查看。
    使用 pkg 命令可以使用基于 dism 的组件安装。


基础 docker 镜像:
    使用 down 命令可以额外下载 docker 文件和基础镜像文件。基础镜像文件便于离线安装。
    详细参数使用 nano.cmd down /? 查看。


首次启动脚本:
    * 电源选项 “合上盖子操作” 设置为 无动作(需重启,笔记本有效)
    * 显示由 DHCP 获得的 IPv4 地址 15 秒,(请在第一次使用时,务必在开机前连接网络,并记录 ip 地址)
    * 开启 SMB 共享。
    注意:如果错过了 ip 的显示,从第三次启动开始,会在 C:\Windows\Logs\ipconfig.log 中覆盖本次的 ipconfig 信息,可以关机后进入查看。


docker 命令:
    首次执行 docker 命令时,会自动部署 docker 服务并进行初始化操作。
    如果需要拉取 docker 镜像,先登录远端 NanoServer  PowerShell,(使用生成的 rs.cmd 执行 rs.cmd ps 命令,需要按照下文配置 ip 和密码)
    然后执行
    Install-ContainerOSImage -WimPath D:\NanoServer.wim -Force
    其中 nanoserver.wim 基础镜像文件可以使用 down 命令进行下载,并使用 smb 文件共享复制到远端 NanoServer 设备上。
    完成后如果执行 docker images 命令没有看到对应的镜像,需要使用 shutdown /r /t 5 命令进行重新启动。
    (倒计时 5 秒时让你使用 exit 指令退出连接,否则会 cmd 会卡死)




注意:
    如果使用 pkg 命令制作的 NanoServer ,第一次启动后需要 F11 修改密码,否则远程连接无法使用。
    (nanowim 或 nanovhd 命令则会直接嵌入密码,无需 F11。)
    可以在设置密码后查看 NanoServer 的 ip 地址(貌似就这一次机会)。
    如果使用 pkg 命令,不要画蛇添足的在 SetupComplete.cmd 中加入启动 docker 计划任务的命令,
    会导致 NanoServer 切换到守护进程的标准输出界面,造成无法进入密码修改流程。




关于共享:
    访问 NanoServer 的 C 盘,需要在 访问路径根目录后面加上 c$,D盘 则是 d$ (注意大小写敏感)。密码与 NanoServer 的密码相同。e.g. \\192.168.1.10\c$\Windows 




连接 NanoServer 服务端:


    rs.cmd:
        可使用脚本所在目录生成链接客户端脚本 rs.cmd。需要编辑其中的默认密码 Tuva 为你设置的密码,将 ip 变更为Nanoserver 的ip。
        使用 rs.cmd cmd 或 rs.cmd ps 分别进入远程 cmd 或远端 powershell。
        也支持其他的命令,如 rs.cmd ipconfig


    手动 cmd:
        客户端需要开启 WinRM,
        在 cmd 上执行 
        winrm quickconfig
        winrm set winrm/config/client @{TrustedHosts="*"}
        如果使用 cmd 手动进行连接,每次连接执行
        chcp 65001
        winrs.exe -r:127.0.0.1 -u:Administrator -p:Tuva cmd


        即可,其中 Tuva 替换成你自己设置的 密码。127.0.0.1 替换成 NanoServer 的 ip 。
        最后的 cmd 可以换成其他命令,比如 ipconfig。
        但是注意:
        不要在这加上 PowerShell,你会看到你不愿意看到的效果
        (PowerShell 的界面会跑到 NanoServer 上,并且使用 NanoServer 的键盘来操作,看样子无头系统只是限制)
        ……想使用 PowerShell 进行远程连接,请看下面。


    手动 PowerShell:
        如果使用 PowerShell 作为客户端连接,可以在 cmd 中使用以下命令,其中  Tuva 替换成你自己设置的 密码,127.0.0.1 替换成 NanoServe 的 ip。
        PowerShell.exe -NoExit -Command "$password = ConvertTo-SecureString \"Tuva\" -AsPlainText -Force" ; "$cred= New-Object System.Management.Automation.PSCredential (\"Administrator\", $password )" ; "Enter-PSSession -ComputerName 127.0.0.1 -Credential $cred"
        或者使用微软推荐的 PowerShell 命令 https://technet.microsoft.com/en-us/library/mt126167.aspx,需要每次输入密码。




建议:
    使用 nanovhd 的方式进行部署。使用 bcdboot 命令进行启动配置。它可以自动处理 vhd 的启动问题,用来代替 bcdedit 繁杂的命令。
    详情在 cmd 中使用
    bcdboot /?


开机启动配置:
    配置文件位置:C:\Windows\System32\config\systemprofile\.onstart
    会在开机时,将其中的命令逐行执行。
    注意:执行 docker 服务的 runDockerDaemon.cmd 必须放到最后一行,进程会在此处卡住,其后面的命令都不会执行。


参考资料:
https://msdn.microsoft.com/en-us/virtualization/windowscontainers/deployment/docker_windows?f=255&MSPPError=-2147217396#nano-server
https://technet.microsoft.com/en-us/library/mt126167.aspx#bkmk_ManageRemote
https://blogs.msdn.microsoft.com/cciccat/2015/05/26/nano-server/
https://thecloudgeek.net/category/windows-server/

 类似资料: