admin 管理员组

文章数量: 887021

背景:项目使用go来开发项目,需要docker。但是我的windows是家庭版,不仅没有hyper-v,而且安装完docker后只能使用wsl2(虽然说wsl2性能传说比较好,但是我的c盘容量实在台下,所以wsl更加适合我,能够自定义镜像存储位置

先安装docker

第一步:先确定windows虚拟化是否开启。任务管理器-性能-CPU如图位置

第二步:开启hyper-v服务

因为我的windows版本是家庭版的原因,所以这个功能默认是没有的,我需要自己手动去增加这个功能。创建一个hyper-v.bat文件,复制一下代码进去,用管理员身份打开

等待安装完成,输入Y自动重启电脑即可。

完成安装后,就可以使用了,点击确定即可。

pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

 第三步:

将系统伪装成专业版

创建一个change.bat文件,复制一下代码进去,用管理员身份打开

REG ADD "HKEY_LOCAL_MACHINE\software\Microsoft\Windows NT\CurrentVersion" /v EditionId /T REG_EXPAND_SZ /d Professional /F
pause

第四步:

到了这一步,如果直接安装docker,会报错Containers Windows Feature is not available   

意思是容器窗口功能不可用

新建一个containers.bat,内容如下:

pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*containers*.mum >containers.txt
for /f %%i in ('findstr /i . containers.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del containers.txt
Dism /online /enable-feature /featurename:Containers -All /LimitAccess /ALL

第五步:

这个后就可以直接安装docker for windows了,自己在官网下载。这个版本是基于wsl安装,所以家庭版也可以在advance里面修改镜像存储目录。

迁移docker

因为docker比较强势,默认只能安装在c盘,无奈我的c盘又太小,度娘了一圈,将一个行之有效的方法贴上来。

第一步:关闭服务,右键结束进程

windows管理工具-hyper-v管理器

第二步:移动文件并且修改路径

将 C:\Program Files\Docker 和 C:\ProgramData\DockerDesktop 剪切到你想放的磁盘下,我的是D:\go,

旧版本的 docker的根镜像存放目录会在C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks

删除源文件夹C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks

接着分别创建符号链接,省出C盘的空间不说,配置文件什么的都不用动

cmd /c mklink /D "C:\Program Files\Docker" "D:\go\Docker"
cmd /c mklink /D C:\ProgramData\DockerDesktop D:\go\DockerDesktop
cmd /c mklink "C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks" D:\go\DockerDesktop\vm-data\hyper-v

迁移完成,打开小鲸鱼如果出现问题

Net stop com.docker.service

Net start com.docker.service

卸载

如果是创建符号链接法迁移路径的话,卸载的时候,在正常删除的同时。需要手动删除我们创建的三个符号链接。否则我的情况会出现下一次正常安装docker后,想卸载的时候会一直卡在"removing vm and image"。

如果docker一直卸载不掉,有强制卸载法如下:

1.创建delete.ps1文件,写入以下代码

$ErrorActionPreference = "SilentlyContinue"
 
kill -force -processname 'Docker for Windows', com.docker.db, vpnkit, com.docker.proxy, com.docker.9pdb, moby-diag-dl, dockerd
 
try {
    ./MobyLinux.ps1 -Destroy
} Catch {}
 
$service = Get-WmiObject -Class Win32_Service -Filter "Name='com.docker.service'"
if ($service) { $service.StopService() }
if ($service) { $service.Delete() }
Start-Sleep -s 5
Remove-Item -Recurse -Force "~/AppData/Local/Docker"
Remove-Item -Recurse -Force "~/AppData/Roaming/Docker"
if (Test-Path "C:\ProgramData\Docker") { takeown.exe /F "C:\ProgramData\Docker" /R /A /D Y }
if (Test-Path "C:\ProgramData\Docker") { icacls "C:\ProgramData\Docker\" /T /C /grant Administrators:F }
Remove-Item -Recurse -Force "C:\ProgramData\Docker"
Remove-Item -Recurse -Force "C:\Program Files\Docker"
Remove-Item -Recurse -Force "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Docker"
Remove-Item -Force "C:\Users\Public\Desktop\Docker for Windows.lnk"
Get-ChildItem HKLM:\software\microsoft\windows\currentversion\uninstall | % {Get-ItemProperty $_.PSPath}  | ? { $_.DisplayName -eq "Docker" } | Remove-Item -Recurse -Force
Get-ChildItem HKLM:\software\classes\installer\products | % {Get-ItemProperty $_.pspath} | ? { $_.ProductName -eq "Docker" } | Remove-Item -Recurse -Force
Get-Item 'HKLM:\software\Docker Inc.' | Remove-Item -Recurse -Force
Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\Run -name "Docker for Windows" | Remove-Item -Recurse -Force
#Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | ForEach-Object {Get-ItemProperty $_.PSPath} | Where-Object { $_.ToString().Contains("Docker for Windows.exe") } | Remove-Item -Recurse -Force $_.PSPath
#Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | Where-Object { $(Get-ItemPropertyValue $_) -Contains "Docker" }

以管理员身份打开powershell:

cd 文件路径
.\delete.ps1

再用360清理一下垃圾,就完全卸载干净了。

本文标签: 家庭版 攻略 Windows docker WSL