window安装Docker Desktop for Windows(基于WSL2)

2023-11-15


请添加图片描述

一 什么是Ducker

Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。

Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。

二 安装Ducker

1 window for Linux子系统环境搭建

1.1 打开系统虚拟机平台和WSL(适用于Linux的window子系统)

控制面板->程序->启用或关闭Windows功能->向下滑 勾选以下两项功能。请添加图片描述

在安装完成后系统会提示你重启计算机

开启以上功能后查看windows相关配置
打开任务管理器(CTRL+ALT+DELETE)-> 选择性能 -> CPU ->虚拟化,确认是否已启用

在这里插入图片描述

1.2安装WSL2

WSL,即Windows Subsystem on Linux,中文叫“适用于 Linux 的 Windows 子系统”。可以在windows里,直接启动一个linux系统。因为docker依赖linux内核,只能在linux下使用,windows就需要安装linux虚拟机来运行,而微软已经在win10内置了一个轻量级虚拟机,WSL2 便是运行在虚拟机上的一个完整的 linux 内核,所以需要利用WSL2安装docker。

微软要求 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11

设置->更新和安全->操作系统内部版本信息查询操作系统版本信息

1.3为什么用wsl2,不用wsl1

关于wsl2和wsl1的区别

1.4 下载集成支持linux内核的wsl2

网址: https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-kernel
点击下载最新的更新包,下好后双击运行安装即可。这时你的wsl就为wsl2了

1.5 设置WSL默认版本

打开cmd输入以下命令,指定wsl版本

wsl --set-default-version 2

二、安装Ubuntu20.04LTS

1 打开Microsoft Store安装Ubuntu —Linux发行版

在这里插入图片描述
找到Ubuntu 20.04LTS点击安装即可,直接点击启动就行
在这里插入图片描述
.打开后设置初始的用户名和密码即可,如果出现参考的对象类型不支持尝试的操作,请重置下网络net winsock reset
在这里插入图片描述
以后我们就可以直接在端口打开ubuntu使用Linux命令了
在这里插入图片描述
然后打开cmd窗口输入命令查看本机的Linux的发行版了

wsl -l -v
wsl -l -v 

Name   				STATE  			VERSION
Ubuntu-20.04        Running            2

2 常见问题解决

2.1 安装失败并出现错误 0x80070003
适用于 Linux 的 Windows 子系统只能在系统驱动器(通常是 C: 驱动器)中运行。 请确保分发版存储在系统驱动器上:打开“设置”->“系统”–>“存储”-> “更多存储设置”: 更改新内容的保存位置”

2.2 WslRegisterDistribution 失败并出现错误 0x8007019e
未启用“适用于 Linux 的 Windows 子系统”可选组件:

打开“控制面板” -> “程序和功能” -> “打开或关闭 Windows 功能”-> 选中“适用于 Linux 的 Windows 子系统”,或使用本文开头所述的 PowerShell cmdlet。

2.3 安装失败,出现错误 0x80070003 或错误 0x80370102
请确保在计算机的 BIOS 内已启用虚拟化。 有关如何执行此操作的说明因计算机而异,并且很可能在 CPU 相关选项下。WSL2 要求 CPU 支持二级地址转换 (SLAT) 功能,后者已在 Intel Nehalem 处理器(Intel Core 第一代)和 AMD Opteron 中引入。 即使成功安装了虚拟机平台,旧版 CPU(例如 Intel Core 2 Duo)也无法运行 WSL2。

2.4 尝试升级时出错:Invalid command line option: wsl --set-version Ubuntu 2
请确保已启用适用于 Linux 的 Windows 子系统,并且你使用的是 Windows 内部版本 18362 或更高版本。 若要启用 WSL,请在 PowerShell 提示符下以具有管理员权限的身份运行此命令:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux。

2.5 由于虚拟磁盘系统的某个限制,无法完成所请求的操作。虚拟硬盘文件必须是解压缩的且未加密的,并且不能是稀疏的
取消选中“压缩内容”(如果已选中“加密内容”,请一并取消选中),方法是打开 Linux 发行版的配置文件文件夹。 它应位于 Windows 文件系统上的一个文件夹中,类似于:USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited…
在此 Linux 发行版配置文件中,应存在一个 LocalState 文件夹。 右键单击此文件夹可显示选项的菜单。 选择“属性”>“高级”,然后确保未选择(未勾选)“压缩内容以节省磁盘空间”和“加密内容以保护数据”复选框。 如果系统询问是要将此应用到当前文件夹还是应用到所有子文件夹和文件,请选择“仅此文件夹”,因为你只是要清除压缩标志。 完成此操作后,wsl --set-version 命令应正常工作。
2.6 无法将词语“wsl”识别为 cmdlet、函数、脚本文件或可运行程序的名称
请确保已安装“适用于 Linux 的 Windows 子系统”可选组件。 此外,如果你使用的是 ARM64 设备,并从 PowerShell 运行此命令,则会收到此错误。 请改为从 PowerShell Core 或从命令提示符运行 wsl.exe。

2.7 错误:此更新仅适用于装有适用于 Linux 的 Windows 子系统的计算机
若要安装 Linux 内核更新 MSI 包,需要 WSL,应先启用它。 如果失败,将看到以下消息:This update only applies to machines with the Windows Subsystem for Linux。
出现此消息有三个可能的原因:
你仍使用旧版 Windows,不支持 WSL 2。 有关版本要求和要更新的链接,请参阅步骤 #2。
未启用 WSL。 需要返回到步骤 #1,并确保在计算机上启用了可选的 WSL 功能。
启用 WSL 后,需要重新启动才能使其生效,请重新启动计算机,然后重试。
2.8 错误:WSL 2 要求对其内核组件进行更新
如果 %SystemRoot%\system32\lxss\tools 文件夹中缺少 Linux 内核包,会遇到此错误。 若要解决此问题,请在安装说明的步骤 #4 中安装 Linux 内核更新 MSI 包。 可能会需要从添加或删除程序卸载 MSI,然后重新安装。

三 安装Ducker for window

安装Ducker之前建议先看下文章底部-------Windows中更改Docker默认安装路径方法(C盘够用可以直接忽略)
在这里插入图片描述

ducker官网访问较慢,这是中文官网:https://docker.p2hp.com/
下好后直接双击运行安装即可设置里勾选基于wsl2的引擎(我的默认勾选了)
在这里插入图片描述

安装docker后,docker会自动创建2个发行版:

docker-desktop docker-desktop-data

用PowerShell运行 wsl -l -v会发现已经创建了两个docker发行版了(这边我把docker已经停了,所以显示Stopper)
在这里插入图片描述

更改镜像源

在国内从官方的DockerHub拉取镜像经常会比较感人,所以我们需要利用国内的镜像源或者加速器

科大镜像:https://docker.mirrors.ustc.edu.cn/
网易:https://hub-mirror.c.163.com/

打开设置,修改镜像源
在这里插入图片描述

{
  "registry-mirrors": [
    "https://1nj0zren.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "http://f1361db2.m.daocloud.io",
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [],
  "debug": true,
  "experimental": false
}

更改数据存储位置

Windows下的docker默认安装在C盘,所以为了拯救我们可怜的C盘,就需要把数据存储到其他盘

1 打开cmd 关闭所有发行版
wsl --shutdown
打开cmd窗口。查看停止情况:
wsl --list -v

在这里插入图片描述

2.备份数据到另一个文件夹 PowerShell运行
要导出的文件夹可以提前建好
wsl --export docker-desktop-data E:\DockerData\docker-desktop-data.tar

在这里插入图片描述

3.删除原有数据

wsl --unregister docker-desktop-data

4.更改数据存储盘并恢复数据

wsl --import docker-desktop-data E:\DockerData E:\DockerData\docker-desktop-data.tar --version 2
		#		镜像名			 要导入的路径		存放镜像的路径						wsl2

即将备份数据导入到新的虚拟盘,且指定虚拟盘的存放路径为E:\DockerData,导入完成后在该目录下会存在一个ext4.vhdx的虚拟磁盘路径

然后启动docker就可以啦

Windows中更改Docker默认安装路径方法

一个docker 起码占用2G,跑起来5G多,安装C盘真来不了。。。
安装流程没有显示安装地址修改路径的,只能用这样软连接的方法了!!!~~~~

1、先创建 D:\Program Files\Docker 目录。
注意:如果C盘Program Files 如果有Docker,需要先删除

2、用管理员身份打开 cmd 窗口,然后,再运行如下命令:
mklink /j “C:\Program Files\Docker” “D:\Program Files\Docker”
运行结果:
在这里插入图片描述

为 C:\Program Files\Docker <<===>> D:\Program Files\Docker 创建的联接
3、现在去安装docker就可以了,docker默认安装路径已经更改成功了。

四 Ducker 简单使用

1 查看docker是否安装成功

docker -v   
# 查看docker版本号

2.docker 安装 redis

(1)拉取redis镜像

docker pull redis

(2)查看本地镜像

docker images

在这里插入图片描述

(3)运行容器

把子系统中的redis的端口6379映射到主机(本机)端口的6379 这样我们就能在本机访问到子系统中的redis了()
docker run -d --name myredis -p 6379:6379 redis
myredis:自定义的容器名 6379:6379 端口映射 redis 镜像名

(4)安装成功 查看容器的运行信息

docker ps

在这里插入图片描述

(5)连接测试进入redis终端

docker exec :在运行的容器中执行命令
# 语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# OPTIONS说明:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端

redis-cli表示运行一个redis客户端。
docker exec -it myredis redis-cli

在这里插入图片描述
然后我们就可以在本机上访问redis客户端了。

(6)退出

exit

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

window安装Docker Desktop for Windows(基于WSL2) 的相关文章

  • 导入错误:无法导入名称线程

    这是我第一次学习Python 我继续尝试线程这篇博文 http www saltycrane com blog 2008 09 simplistic python thread example 问题是它似乎已经过时了 import time
  • Windows7上python3.5无法安装BeautifulSoup4

    我已经从下载了 beautifulsoup4 4 5 3 tar gzhttps www crummy com software BeautifulSoup bs4 download 4 5 https www crummy com sof
  • 代码退出-1073741515 (0xc0000135)“未找到依赖的 dll”

    我正在尝试编写一个简单的程序 与 2019 年相比 Windows 10 64 位 调试 gt x64 遵循 将 Visual C 项目配置为面向 64 位平台 1 include
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • python+win32:检测窗口拖动

    有没有办法检测何时使用 python pywin32 在窗口中拖动不属于我的应用程序的窗口 我想对其进行设置 以便当我拖动标题与桌面边缘附近的图案匹配的窗口时 当松开鼠标时它会捕捉到边缘 我可以编写代码 以便在释放鼠标时将所有具有该标题的窗
  • 用于验证 IIS 设置的 Powershell 脚本

    是否可以使用 Power Shell 脚本获取 IIS 设置 我希望使用脚本获取 检查以下信息 检查 Windows 身份验证提供程序是否正确列出 协商 NTLM 检查是否启用了 Windows 身份验证 Windows 身份验证高级设置
  • Docker Hub API v2 令牌身份验证问题

    目前 我正在开发一个非常轻量级版本的 Docker 容器编排器 并且我必须能够从公共 Docker Hub 注册表获取图像摘要 我想使用 Docker Registry API v2 来实现此目的 我正在尝试使用以下 API 调用获取授权令
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • 以编程方式从 java 代码中查找 java.exe 的绝对路径

    如果我有一个由用户启动的 java jar 或类文件 假设在环境变量中设置了 java 路径 那么我如何从代码中找出 java exe javaw exe 的绝对路径文件正在启动 就像在 ubuntu 上一样 我们可以运行 which ja
  • 在没有 noexec 选项的情况下将卷挂载到 docker 容器中

    据我所知 docker 也包括 docker compose 使用 noexec 选项将卷安装到容器中 因此我无法从安装的目录中启动任何程序 services app build context dockerfile Dockerfile
  • Vim 在 Mingw 上表现异常

    我在 MinGW 4 6 2 上的 Vim 表现得很奇怪 例如 在插入模式下按 Backspace 会删除字符 但我必须用箭头键移动光标才能删除的字符消失 而且它也会使我退出插入模式 另一个例子 按 Del 删除字符有时会生成奇怪的字符 例
  • 经常提交 docker 容器是一个好习惯吗?

    我在里面使用WebSphere Liberty 由于 WebSphere Liberty 需要频繁的 xml 编辑 这对于 Dockerfile 命令来说是不可能的 我必须不时地对容器进行 docker commit 以便其他人可以使用我的
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 如何在批处理文件中回显换行符?

    如何从批处理文件输出中插入换行符 我想做类似的事情 echo hello nworld 这会输出 hello world Use echo hello echo echo world
  • C# 如何使用 WM_GETTEXT / GetWindowText API / 窗口标题

    我想获取应用程序的控件 句柄的内容 这是实验代码 Process processes Process GetProcessesByName Notepad foreach Process p in processes StringBuild
  • NodeJS Express Windows 最大连接数设置

    在哪里设置nodejs的最大连接数 用于使用express get 在 Windows 10 中 与linux中的最大文件 描述符 设置有关吗 有该设置的 Windows 版本吗 最好是在nodejs中进行设置 以便在迁移到unix时兼容
  • 如何在“Docker for Windows”中启用docker远程API

    I have 适用于 Windows 的 Docker 桌面1 12 1 stable 内部版本 7135 安装在我的 Windows 10 计算机上 我想使用以下方式访问 docker远程API https docs docker com
  • 非生产模式下的 Elasticsearch docker 容器可消除 vm.max_map_count=262144 要求

    如何配置 elasticsearch docker 容器 elasticsearch 7 5 0 以使用更少的资源并在非生产模式下运行 我想在 Jenkins 和我的桌面上运行容器 并且满足以下要求这个弹性文档 https www elas
  • 有没有计算Docker容器开销的公式?

    假设我想同时运行多个 Docker 容器 我可以使用任何公式来提前了解单个 Docker 主机可以同时运行多少个容器吗 即 有多少 CPU 内存等 我必须考虑容器本身吗 它本身不是一个公式 但您可以通过检查 Linux 控制组来收集有关容器

随机推荐