mirror of
https://github.com/oneclickvirt/oneclickvirt.github.io.git
synced 2026-05-30 14:49:34 +08:00
27 lines
17 KiB
JavaScript
27 lines
17 KiB
JavaScript
import{_ as i,c as a,o as t,ag as n}from"./chunks/framework.CSeR4K32.js";const c=JSON.parse('{"title":"在Docker中开设Windows系统虚拟机","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/docker/docker_windows.md","filePath":"guide/docker/docker_windows.md","lastUpdated":1756121819000}'),e={name:"guide/docker/docker_windows.md"};function p(l,s,h,d,r,o){return t(),a("div",null,s[0]||(s[0]=[n(`<h1 id="在docker中开设windows系统虚拟机" tabindex="-1">在Docker中开设Windows系统虚拟机 <a class="header-anchor" href="#在docker中开设windows系统虚拟机" aria-label="Permalink to "在Docker中开设Windows系统虚拟机""></a></h1><h2 id="一键开设-通过vagrant" tabindex="-1">一键开设(通过vagrant) <a class="header-anchor" href="#一键开设-通过vagrant" aria-label="Permalink to "一键开设(通过vagrant)""></a></h2><ul><li>共享宿主机所有资源(CPU、内存、硬盘),基于docker所以只占用系统的大小,适合多开</li><li>共享IP,做了docker的NAT映射,可选择是否映射到外网或仅内网</li><li>设置的win系统默认最多占用为1核2G内存50G硬盘,实际占用看使用情况</li><li>无需iptables进行NAT映射,删除容器时自动删除了端口的映射,方便维护</li><li>需要考虑宿主机是否支持嵌套虚拟化,暂时只支持X86_64架构的系统</li></ul><p><strong>宿主机需要支持嵌套虚拟化,且暂时只支持X86_64架构的系统,否则不可开设</strong></p><p>执行</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>egrep -c '(vmx|svm)' /proc/cpuinfo</span></span></code></pre></div><p>结果需要大于或等于1,不能为0</p><p>然后需要先设置docker切换使用v1版cgroup启动</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>sed -i 's/GRUB_CMDLINE_LINUX="\\(.*\\)"/GRUB_CMDLINE_LINUX="\\1 systemd.unified_cgroup_hierarchy=0"/' /etc/default/grub</span></span>
|
||
<span class="line"><span>update-grub</span></span>
|
||
<span class="line"><span>ls</span></span></code></pre></div><p>如果执行都无报错,执行<code>reboot</code>重启系统以使得设置生效</p><p><strong>支持的镜像</strong></p><p>使用的自建的镜像:<a href="https://hub.docker.com/r/spiritlhl/wds" target="_blank" rel="noreferrer">https://hub.docker.com/r/spiritlhl/wds</a></p><table tabindex="0"><thead><tr><th>镜像名字</th><th>镜像大小</th></tr></thead><tbody><tr><td>10</td><td>20G</td></tr><tr><td>2022</td><td>17.5G</td></tr><tr><td>2019</td><td>17G</td></tr></tbody></table><p>创建出的容器大小会比镜像大小大一丢丢,但不多</p><p><strong>下载脚本</strong></p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>curl -L https://raw.githubusercontent.com/oneclickvirt/docker/main/scripts/onewindows.sh -o onewindows.sh && chmod +x onewindows.sh</span></span></code></pre></div><p><strong>使用方法</strong></p><p>开设前务必在screen窗口中执行,避免SSH长期链接造成掉线卡死</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>./onewindows.sh 容器名字 系统版本 RDP的端口 是否为外网映射(留空则默认是N,可选Y)</span></span></code></pre></div><p>开设前需要确认宿主机至少有镜像大小的两倍大小加10G硬盘的大小,因为docker在创建容器时得先将镜像拉到本地再创建</p><p>创建过程中,硬盘占用峰值为<code>宿主机系统+镜像大小+容器大小</code></p><p>比如开设容器名字为<code>test</code>,占用最低的<code>Windows 2019</code>系统的容器,映射外网RDP端口为<code>13389</code>,设置为<code>外网映射</code>(映射到你的服务器外网IPV4地址)</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>./onewindows.sh test 2019 13389 Y</span></span></code></pre></div><p>开设后默认的用户名是<code>Administrator</code>和<code>vagrant</code></p><p>默认的密码是<code>vagrant</code></p><p>如果你选择开设映射的外网端口,务必登录后修改对应账户的密码(两个账户都可能有,自行尝试),否则可能被人爆破滥用</p><p><strong>删除</strong></p><p>需要删除对应镜像和容器,先执行<code>docker ps -a</code>和<code>docker images</code>查询镜像是<code>spiritlhl/wds</code>的ID,然后对应使用</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>docker rm -f 容器的ID</span></span>
|
||
<span class="line"><span>docker rmi 镜像的ID</span></span></code></pre></div><p>删除后可开设别的版本的windows容器</p><p>(在宿主机上使用Docker安装Windows系统,好像绕过了某些商家不允许DD成Win系统的TOS限制)</p><h2 id="手动开设-通过-dockur-项目" tabindex="-1">手动开设(通过 Dockur 项目) <a class="header-anchor" href="#手动开设-通过-dockur-项目" aria-label="Permalink to "手动开设(通过 Dockur 项目)""></a></h2><p>本项目支持在宿主机<strong>不支持嵌套虚拟化</strong>的情况下,使用 QEMU 进行虚拟机创建。</p><h3 id="原始项目地址" tabindex="-1">原始项目地址 <a class="header-anchor" href="#原始项目地址" aria-label="Permalink to "原始项目地址""></a></h3><ul><li><a href="https://github.com/dockur/windows" target="_blank" rel="noreferrer">https://github.com/dockur/windows</a></li><li><a href="https://github.com/dockur/windows-arm" target="_blank" rel="noreferrer">https://github.com/dockur/windows-arm</a></li></ul><p><strong>注意事项:</strong></p><ul><li><p>原始项目仅为启动器,不包含 Windows 镜像;</p></li><li><p>使用时需下载镜像文件,<strong>在境内网络环境下首次启动容器需约 4 小时</strong>(含镜像下载和安装);</p></li><li><p>默认要求宿主机具备以下最低硬件资源(可通过修改脚本进行调整):</p><ul><li>CPU:至少 4 核</li><li>内存:至少 4G</li><li>硬盘:至少 64G</li></ul></li></ul><p>如需魔改启动脚本以减少资源占用或调整其他参数,可参考以下文章:</p><ul><li><a href="https://www.spiritysdx.top/20250405/" target="_blank" rel="noreferrer">https://www.spiritysdx.top/20250405/</a></li><li><a href="https://www.spiritysdx.top/20250315/" target="_blank" rel="noreferrer">https://www.spiritysdx.top/20250315/</a></li></ul><h3 id="对于-x86-64-架构用户" tabindex="-1">对于 x86_64 架构用户 <a class="header-anchor" href="#对于-x86-64-架构用户" aria-label="Permalink to "对于 x86_64 架构用户""></a></h3><p>提供一个已魔改的启动器(单文件版本),方便自行构建 Windows 镜像。该版本将系统文件和镜像直接写入 Docker 写入层中,<strong>无需额外挂载镜像文件</strong>:</p><p>下载链接: <a href="https://github.com/oneclickvirt/docker/releases/download/amd64_builder/builder.tar" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/docker/releases/download/amd64_builder/builder.tar</a></p><p>导入 Docker 镜像:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> load</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> builder.tar</span></span></code></pre></div><h4 id="使用自定义-windows-iso-镜像启动容器" tabindex="-1">使用自定义 Windows ISO 镜像启动容器 <a class="header-anchor" href="#使用自定义-windows-iso-镜像启动容器" aria-label="Permalink to "使用自定义 Windows ISO 镜像启动容器""></a></h4><p>首先从以下地址下载 Windows ISO 镜像: <a href="https://down.idc.wiki/ISOS/Windows/" target="_blank" rel="noreferrer">https://down.idc.wiki/ISOS/Windows/</a></p><p>启动容器示例命令:</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> RAM_SIZE="8G"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> CPU_CORES="4"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> win2022</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 8006:8006</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --device=/dev/kvm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --device=/dev/net/tun</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --cap-add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> NET_ADMIN</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -v</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "$(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">pwd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">)/Windows镜像文件.iso:/boot.iso"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --stop-timeout</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 120</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> windows:builder</span></span></code></pre></div><h3 id="使用内置镜像-推荐快速部署" tabindex="-1">使用内置镜像(推荐快速部署) <a class="header-anchor" href="#使用内置镜像-推荐快速部署" aria-label="Permalink to "使用内置镜像(推荐快速部署)""></a></h3><p>我们也提供一个<strong>已集成系统镜像和配置的成品镜像</strong>,特点如下:</p><ul><li>镜像大小约 26G(包含系统镜像与默认配置);</li><li>已集成自动磁盘扩容与开机任务;</li><li>下载后导入 Docker 即可使用;</li><li><strong>注意</strong>:合并下载路径需要约 60G 空间。</li></ul><h4 id="下载与合并切片" tabindex="-1">下载与合并切片 <a class="header-anchor" href="#下载与合并切片" aria-label="Permalink to "下载与合并切片""></a></h4><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/docker/refs/heads/main/extra_scripts/mergew.sh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mergew.sh</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">chmod</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> +x</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mergew.sh</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bash</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mergew.sh</span></span></code></pre></div><h4 id="启动容器" tabindex="-1">启动容器 <a class="header-anchor" href="#启动容器" aria-label="Permalink to "启动容器""></a></h4><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> load</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> win2022.tar</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -it</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> RAM_SIZE="4G"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -e</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> CPU_CORES="2"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> win2022</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 8006:8006</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --device=/dev/kvm</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --device=/dev/net/tun</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --cap-add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> NET_ADMIN</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --stop-timeout</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 120</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> windows:2022</span></span></code></pre></div><h3 id="注意事项" tabindex="-1">注意事项 <a class="header-anchor" href="#注意事项" aria-label="Permalink to "注意事项""></a></h3><p><strong>不建议</strong>在当前镜像基础上使用 <code>docker commit</code> 保存修改,因为写入层会不断叠加,导致二次生成的镜像体积可能超过 40G。</p><p>如需进行个性化配置或集成应用,请<strong>从 <code>builder</code> 镜像开始自行构建新镜像</strong>,以保持镜像整洁与可维护性。</p>`,58)]))}const g=i(e,[["render",p]]);export{c as __pageData,g as default};
|