荣耀之链论坛

 找回密码
 立即注册
搜索
查看: 352|回复: 2

用docker安装windows系统 需要开启嵌套虚拟化

[复制链接]

1325

主题

2372

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10262
发表于 2024-3-15 12:46 | 显示全部楼层 |阅读模式
  1. 安装KVM
  2. yum install libvirt qemu-kvm
  3. systemctl enable --now libvirtd
  4. systemctl enable --now virtlogd
  5. echo 1 | tee /sys/module/kvm/parameters/ignore_msrs
  6. modprobe kvm



  7. 拉取镜像
  8. docker pull dockurr/windows

  9. 创建容器
  10. docker run -it --rm \
  11. --name windows_XP_10 \
  12. -p 8006:8006 \
  13. -v /root/docker/windows_XP:/storage \
  14. --network=docker_bridge_192_168_21 --ip=192.168.21.10 \
  15. -e TZ=Asia/Shanghai \
  16. -e VERSION=winxp \
  17. -e RAM_SIZE=2G \
  18. -e CPU_CORES=2 \
  19. -e DISK_SIZE=8G\
  20. --device=/dev/kvm \
  21. --stop-timeout 120 \
  22. dockurr/windows

  23. --cap-add NET_ADMIN\ #这个不要
复制代码

教程:
https://www.cnblogs.com/gaoyanbing/p/18072111

官网:
https://github.com/dockur/windows

另外一个更大型的:
https://github.com/sickcodes/Docker-OSX


这个有点鸡肋了
这个需要CPU支持虚拟化
而云服务器都是不支持的
  1. egrep -c '(vmx|svm)' /proc/cpuinfo
复制代码
上面的命令 数字大于0才表示支持虚拟化 我测试过了几台云服务器 都不支持

只有直接用物理机装的系统才支持虚拟化,但是我都有物理机了,我为什么不用hyper-v呢




用hyper-v安装的rockylinux8
为这个虚拟机开启了嵌套虚拟化
命令是(用管理员权限运行)
  1. Set-VMProcessor -VMName "Rockylinux-Docker 11.157" -ExposeVirtualizationExtensions $true
复制代码

然后我在docker里面安装了个XP 试试效果


回复

使用道具 举报

1325

主题

2372

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10262
 楼主| 发表于 2024-8-5 16:48 | 显示全部楼层
嵌套虚拟化 第二层虚拟机使用NAT模式上网
https://learn.microsoft.com/zh-c ... sted-virtualization
回复 支持 反对

使用道具 举报

1325

主题

2372

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10262
 楼主| 发表于 2025-5-3 09:43 | 显示全部楼层
  1. https://github.com/dockur/windows
  2. docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 dockurr/windows

  3. https://hub.docker.com/r/dockurr/windows


  4. https://www.ryzl.com.cn/bbs/forum.php?mod=viewthread&tid=1166&extra=page%3D1

  5. 安装KVM
  6. yum install libvirt qemu-kvm
  7. systemctl enable --now libvirtd
  8. systemctl enable --now virtlogd
  9. echo 1 | tee /sys/module/kvm/parameters/ignore_msrs
  10. modprobe kvm

  11. 拉取镜像
  12. docker pull dockurr/windows
  13. docker save dockurr/windows:latest | gzip > /root/docker/docker-image/dockurr-windows.tar.gz

  14. docker load < /root/docker/docker-image/dockurr-windows.tar.gz

  15. 创建容器
  16. docker run -it -d \
  17. --name windows_server_2003_200 \
  18. -p 8006:8006 \
  19. -p 11389:3389 \
  20. -v /root/docker/windows_server_2003/windows:/storage \
  21. --network=docker_bridge_192_168_21 --ip=192.168.21.200 \
  22. -e TZ=Asia/Shanghai \
  23. -e VERSION=2003 \
  24. -e RAM_SIZE=2G \
  25. -e CPU_CORES=2 \
  26. -e DISK_SIZE=8G \
  27. --device=/dev/kvm \
  28. --stop-timeout 120 \
  29. dockurr/windows

  30. 然后网页访问8006端口
  31. 会显示正在下载2003
  32. 下载完毕就会开始安装

  33. 我没有设置--cap-add NET_ADMIN和--device=/dev/net/tun不知道是否可以

  34. 安装的过程中9900K单核使用率25% 感觉不是很快啊
  35. 显示倒计时的时候提示需要37分钟
  36. 我晕下载的2003是64位的
  37. 然后配置好了IP 结果没网,关了防火墙也没网,可能是没加上面2个参数的原因








  38. 也可以跳过下载iso,直接指定本地的iso
  39. -v /root/docker/windows_server_2003/2003.iso:/boot.iso \


  40. By default, a user called Docker is created during installation and its password is admin.
  41. 也可以用环境变量
  42. environment:
  43.   USERNAME: "bill"
  44.   PASSWORD: "gates"
  45. -e USERNAME="bill" \
  46. -e PASSWORD="gates" \
  47. 修改语言
  48. LANGUAGE: "French"
  49. -e LANGUAGE="Chinese" \

  50. 增加额外的硬盘
  51. environment:
  52.   DISK2_SIZE: "32G"
  53.   DISK3_SIZE: "64G"
  54. volumes:
  55.   - ./example2:/storage2
  56.   - ./example3:/storage3
  57. -e DISK2_SIZE=8G \
  58. -v /root/docker/windows_xp_201/DISK2:/storage2 \

















  59. #################################################试试在我本地安装2016

  60. docker run -it -d \
  61. --name windows_server_2016_201 \
  62. -p 8006:8006 \
  63. -p 11389:3389 \
  64. -v /root/docker/windows_server_2016_201/windows:/storage \
  65. -v /root/docker/iso/2016.iso:/boot.iso \
  66. --network=docker_bridge_192_168_21 --ip=192.168.21.201 \
  67. --cap-add NET_ADMIN \
  68. -e TZ=Asia/Shanghai \
  69. -e RAM_SIZE=2G \
  70. -e CPU_CORES=2 \
  71. -e DISK_SIZE=16G \
  72. --device=/dev/kvm \
  73. --device=/dev/net/tun \
  74. -e LANGUAGE=Chinese \
  75. -e USERNAME=it \
  76. -e PASSWORD=aaaAAA111 \
  77. --stop-timeout 120 \
  78. dockurr/windows

  79. ok,用这个在泉州的那台4H8G的9900K上装成功了 tracert都正常
  80. 然后单核378 多核684 相比于物理机的单核510 多核5300
  81. 相当于单核74%
  82. 磁盘真实占用了9.4G
  83. 还剩下14.6G
  84. 还能复制一个虚拟机
  85. 但是日志就不能记录太多了
  86. 奇怪,为什么关机就占用11G了

  87. 试试不要虚拟内存
  88. docker run -it -d \
  89. --name windows_server_2016_201 \
  90. -p 8006:8006 \
  91. -p 11389:3389 \
  92. -v /root/docker/windows_server_2016_201/windows:/storage \
  93. --network=docker_bridge_192_168_21 --ip=192.168.21.201 \
  94. --cap-add NET_ADMIN \
  95. -e TZ=Asia/Shanghai \
  96. -e RAM_SIZE=2G \
  97. -e CPU_CORES=2 \
  98. -e DISK_SIZE=16G \
  99. --device=/dev/kvm \
  100. --device=/dev/net/tun \
  101. -e LANGUAGE=Chinese \
  102. -e USERNAME=it \
  103. -e PASSWORD=aaaAAA111 \
  104. --stop-timeout 120 \
  105. dockurr/windows

  106. 然后把磁盘复制一份 同时添加几个端口映射
  107. docker run -it -d \
  108. --name windows_server_2016_202 \
  109. -p 8007:8006 \
  110. -p 11390:3389 \
  111. -p 7000:7000 \
  112. -p 7100:7100 \
  113. -p 7200:7200 \
  114. -v /root/docker/windows_server_2016_201/windows:/storage \
  115. --network=docker_bridge_192_168_21 --ip=192.168.21.202 \
  116. --cap-add NET_ADMIN \
  117. -e TZ=Asia/Shanghai \
  118. -e RAM_SIZE=2G \
  119. -e CPU_CORES=2 \
  120. -e DISK_SIZE=16G \
  121. --device=/dev/kvm \
  122. --device=/dev/net/tun \
  123. -e LANGUAGE=Chinese \
  124. -e USERNAME=it \
  125. -e PASSWORD=aaaAAA111 \
  126. --stop-timeout 120 \
  127. dockurr/windows

  128. nfs有去重
  129. 直接复制一份以后这2个虚拟机不能同时启动
  130. 第二个提示磁盘锁定了.............
  131. 看来必须要重装
  132. 原来是我弄错了,我创建新的docker的时候映射的还是之前的目录,怪不得提示文件被占用




  133. firewall-cmd --permanent --zone=public --add-port=8006/tcp
  134. firewall-cmd --zone=public --add-port=8006/tcp

  135. firewall-cmd --permanent --zone=public --add-port=11389/tcp
  136. firewall-cmd --zone=public --add-port=11389/tcp

  137. 成功了
  138. 我通过mstsc也登录进去了
  139. 速度还可以
  140. 但是IP不对,不是我设置的21.201
  141. 而是20.20.20.21/24 网关是20.20.20.1 DHCP是20.20.20.1 DNS是20.20.20.3
  142. 然后我tracert任何IP都是直接到
  143. 用netstat -ano查看连接
  144. 发现远程还是能显示正确ip的

  145. 然后直接关机,docker就自动关闭了

  146. 试试用这个img能否直接启动

  147. 算了,没介绍,那直接重装一个试试

  148. 试试不要--cap-add NET_ADMIN \ --device=/dev/net/tun \

  149. 装之前磁盘用了31G
  150. 装好以后用了41G

  151. docker run -it -d \
  152. --name windows_server_2016_202 \
  153. -p 8007:8006 \
  154. -p 11390:3389 \
  155. -v /root/docker/windows_server_2016_202/windows:/storage \
  156. -v /root/docker/windows_server_2016_201/2016.iso:/boot.iso \
  157. --network=docker_bridge_192_168_21 --ip=192.168.21.202 \
  158. -e TZ=Asia/Shanghai \
  159. -e RAM_SIZE=2G \
  160. -e CPU_CORES=2 \
  161. -e DISK_SIZE=16G \
  162. --device=/dev/kvm \
  163. -e LANGUAGE=Chinese \
  164. -e USERNAME=it \
  165. -e PASSWORD=aaaAAA111 \
  166. --stop-timeout 120 \
  167. dockurr/windows



  168. firewall-cmd --permanent --zone=public --add-port=8007/tcp
  169. firewall-cmd --zone=public --add-port=8007/tcp

  170. firewall-cmd --permanent --zone=public --add-port=11390/tcp
  171. firewall-cmd --zone=public --add-port=11390/tcp


  172. 把两个docker关机
  173. 然后重启虚拟机
  174. 然后再同时启动这2个docker容器
  175. 再看结果就只用了35G了

  176. 重启以后都能正常连接
  177. 然后都提示CDPUSER的错误
  178. 我直接把这个服务停止了,无法禁用

  179. 最后看看磁盘占用
  180. 实测我设置的C盘16G
  181. 然后du -sh看到的是9.4G
  182. 进虚拟机查看好像也是可用5.6G
  183. 说明磁盘还是没问题的



  184. ------------------------------------------------------------------试试删掉docker,然后不指定ISO用这个目录的文件是否可以使用
  185. docker rm windows_server_2016_201

  186. docker run -it -d \
  187. --name windows_server_2016_201 \
  188. -p 8006:8006 \
  189. -p 11389:3389 \
  190. -v /root/docker/windows_server_2016_201/windows:/storage \
  191. --network=docker_bridge_192_168_21 --ip=192.168.21.201 \
  192. --cap-add NET_ADMIN \
  193. -e TZ=Asia/Shanghai \
  194. -e RAM_SIZE=2G \
  195. -e CPU_CORES=2 \
  196. -e DISK_SIZE=16G \
  197. --device=/dev/kvm \
  198. --device=/dev/net/tun \
  199. -e LANGUAGE=Chinese \
  200. -e USERNAME=it \
  201. -e PASSWORD=aaaAAA111 \
  202. --stop-timeout 120 \
  203. dockurr/windows

  204. 我擦,果然可以,直接就进去了

  205. 那我再把文件夹复制一份试试
  206. docker run -it -d \
  207. --name windows_server_2016_203 \
  208. -p 8008:8006 \
  209. -p 11391:3389 \
  210. -v /root/docker/windows_server_2016_203/windows:/storage \
  211. --network=docker_bridge_192_168_21 --ip=192.168.21.203 \
  212. --cap-add NET_ADMIN \
  213. -e TZ=Asia/Shanghai \
  214. -e RAM_SIZE=2G \
  215. -e CPU_CORES=2 \
  216. -e DISK_SIZE=16G \
  217. --device=/dev/kvm \
  218. --device=/dev/net/tun \
  219. -e LANGUAGE=Chinese \
  220. -e USERNAME=it \
  221. -e PASSWORD=aaaAAA111 \
  222. --stop-timeout 120 \
  223. dockurr/windows

  224. firewall-cmd --permanent --zone=public --add-port=8008/tcp
  225. firewall-cmd --zone=public --add-port=8008/tcp

  226. firewall-cmd --permanent --zone=public --add-port=11391/tcp
  227. firewall-cmd --zone=public --add-port=11391/tcp

  228. 我擦果然可以快速复制
  229. 这2个docker同时存在
  230. 然后计算机名和IP还有MAC都是重复的
  231. 实测好像没有互相影响到














  232. #################################################
  233. OK
  234. 我试试用泉州的4H8G的装2003

  235. docker run -it -d \
  236. --name windows_server_2003_200 \
  237. -p 8006:8006 \
  238. -p 11389:3389 \
  239. -v /root/docker/windows_server_2003_200/windows:/storage \
  240. -v /root/docker/iso/win2003r2.iso:/boot.iso \
  241. --network=docker_bridge_192_168_21 --ip=192.168.21.200 \
  242. -e TZ=Asia/Shanghai \
  243. -e RAM_SIZE=2G \
  244. -e CPU_CORES=2 \
  245. -e DISK_SIZE=8G \
  246. --device=/dev/kvm \
  247. --device=/dev/net/tun \
  248. --cap-add NET_ADMIN \
  249. -e LANGUAGE=Chinese \
  250. -e USERNAME=it \
  251. -e PASSWORD=aaaAAA111 \
  252. --stop-timeout 120 \
  253. dockurr/windows

  254. #-e VERSION=2003 \ #直接用iso了

  255. 不行,这样指定本地iso会一直卡在解包iso
  256. 可能是下载的iso不能这样吧
  257. 等以后有机会试试我的iso

  258. #################################################

  259. docker run -it -d \
  260. --name windows_xp_201 \
  261. -p 8006:8006 \
  262. -p 11389:3389 \
  263. -v /root/docker/windows_xp_201/windows:/storage \
  264. -v /root/docker/iso/xpsp3.iso:/boot.iso \
  265. --network=docker_bridge_192_168_21 --ip=192.168.21.201 \
  266. -e TZ=Asia/Shanghai \
  267. -e RAM_SIZE=2G \
  268. -e CPU_CORES=2 \
  269. -e DISK_SIZE=8G \
  270. --device=/dev/kvm \
  271. --device=/dev/net/tun \
  272. --cap-add NET_ADMIN \
  273. -e LANGUAGE=Chinese \
  274. -e USERNAME=it \
  275. -e PASSWORD=aaaAAA111 \
  276. --stop-timeout 120 \
  277. dockurr/windows

  278. 用我这个就瞬间进去了
  279. 说明上面的2003有问题
  280. 就是装的太慢了
  281. QC986-27D34-6M3TY-JJXP9-TBGMD
  282. 没想到都快18年了,还能用到这个密钥  ............貌似我这个版本没法激活,算了

  283. #################################################
  284. 试试添加新映射
  285. docker rm windows_xp_201

  286. docker run -it -d \
  287. --name windows_xp_201 \
  288. -p 8006:8006 \
  289. -p 11389:3389 \
  290. -v /root/docker/windows_xp_201/windows:/storage \
  291. -v /root/docker/windows_xp_201/data:/data \
  292. --network=docker_bridge_192_168_21 --ip=192.168.21.201 \
  293. -e TZ=Asia/Shanghai \
  294. -e RAM_SIZE=2G \
  295. -e CPU_CORES=2 \
  296. -e DISK_SIZE=8G \
  297. --device=/dev/kvm \
  298. --device=/dev/net/tun \
  299. --cap-add NET_ADMIN \
  300. -e LANGUAGE=Chinese \
  301. -e USERNAME=it \
  302. -e PASSWORD=aaaAAA111 \
  303. --stop-timeout 120 \
  304. dockurr/windows

  305. 设置互通文件
  306. -v /root/docker/windows_xp_201/data:/data \
  307. \\host.lan\Data
  308. 用cpu-z测试了一下,感觉XP的性能极低
  309. 一会装个2016试试
  310. 装了2016
  311. 然后测试了CPU-Z看上面
  312. #################################################
复制代码


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

荣耀之链

GMT+8, 2025-6-18 02:52 , Processed in 0.014913 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表