弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门 ...

打印 上一主题 下一主题

主题 676|帖子 676|积分 2028

Docker技术概论    在WSL2中玩转Docker之Docker Engine部署  
- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/139663032
HuaWei:https://bbs.huaweicloud.com/blogs/429017
   【先容】:本文先容基于WSL2的基础用于,以及基于WSL2,部署Docker Engine,实验环境为Windiws11,部署Docker Engine的Linux为Ubuntu发行版本。
  


   上一节:《 暂无    |   下一节:《 暂无   

  

  1. 概述

Docker是一种广泛使用的容器化平台,它答应开发者将应用程序及其依赖项打包到一个可移植的容器中,以便在任何地方都能够以相同的方式运行。在Windows操作系统上,Docker Desktop是一种盛行的Docker安装方式,它提供了一个用户友爱的图形界面,使得安装和管理Docker变得非常简单。
然而,尽管Docker Desktop在Windows上的安装和使用非常方便,但它仍然存在一些局限性和不完善的地方。例如,一些功能在Docker Desktop上可能无法完全发挥作用,大概仍处于试验阶段,这可能会影响到使用体验。
此外,Docker Desktop作为一个独立的应用程序,会占用肯定的系统资源,并且可能与其他应用程序产生辩论。对于一些对性能要求较高的开发者来说,这可能是一个问题。
为相识决这些问题,一种替代方案是在Windows Subsystem for Linux 2WSL2)中直接安装Docker EngineWSL2是微软推出的一项功能,它答应在Windows上运行Linux环境,并提供了更好的性能和兼容性。通过在WSL2中安装Docker Engine,开发者可以获得更原生的Docker体验,并且可以避免Docker Desktop的一些限制和问题。
在接下来的文章中,我们将具体先容如何在WSL2中安装Docker Engine,并探究这种方法相对于使用Docker Desktop的上风和留意事项。
  2. 部署WSL2环境

  2.1 WSL2简介及其安装

Windows Subsystem for Linux 2WSL2)是微软在Windows 10版本2004及更高版本中引入的一项功能,它是WSL的一个庞大更新。WSL2基于虚拟机技术,提供了一个完备的Linux内核,使得在Windows上运行Linux环境变得更加高效和兼容。
与第一代WSL相比,WSL2具有以下上风:

  • 更好的性能:WSL2使用虚拟机技术,可以实现接近原生Linux的性能表现。
  • 完备的系统调用兼容性:WSL2提供了一个完备的Linux内核,支持所有的Linux系统调用,使得更多的Linux应用程序可以在Windows上运行。
  • 更好的文件系统性能:WSL2引入了一个新的文件系统,称为VHDX,它提供了更快的文件读写性能。
要在Windows上安装WSL2,你须要按照以下步骤进行操作:

  • 确保你的Windows版本为2004或更高版本(内部版本19041及更高版本)或Windows 11。可以在设置->系统->关于中查察版本信息。
  • 以管理员身份打开PowerShell或Windows命令提示符,方法是右键单击并选择"以管理员身份运行"。

  • 在PowerShell或命令提示符中输入以下命令并按回车键:
  1. wsl --install
复制代码
这个命令将启用运行WSL并安装Linux的Ubuntu发行版所需的功能。如果你想安装其他发行版,可以使用-d标志,例如:
  1. wsl --install
  2. -d Debian
复制代码
不过你也可以在后续查察安装各种发行版本。

  • 命令执行完毕后,最好须要重启计算机以完成安装。
  • 重启后,打开已安装的Linux发行版,它会自动打开一个控制台窗口。
  2.2 查找WSL2和安装支持的其它发行版

之前提到-d Debian可以选择初始化时一个默认版本,如未选择就是使用默认的Ubuntu。实际上我们还可以继续安装其它发行版本,要相识当前WSL2支持的Linux发行版,可以使用这个命令:
  1. wsl --list --online
复制代码
它将搜索当前的支持列表并打印输出出来,例如:
  1. PS C:\Users\jclee95> wsl --list --online
  2. 以下是可安装的有效分发的列表。使用 'wsl.exe --install <Distro>' 安装。NAME                                   FRIENDLY NAMEUbuntu                                 UbuntuDebian                                 Debian GNU/Linuxkali-linux                             Kali Linux RollingUbuntu-18.04                           Ubuntu 18.04 LTSUbuntu-20.04                           Ubuntu 20.04 LTSUbuntu-22.04                           Ubuntu 22.04 LTSUbuntu-24.04                           Ubuntu 24.04 LTSOracleLinux_7_9                        Oracle Linux 7.9OracleLinux_8_7                        Oracle Linux 8.7OracleLinux_9_1                        Oracle Linux 9.1openSUSE-Leap-15.5                     openSUSE Leap 15.5SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5openSUSE-Tumbleweed                    openSUSE Tumbleweed
复制代码

我们可以选择喜欢的版本通过下面的命令进行安装,例如安装Ubuntu-24.04版本:
  1. wsl --install
  2. Ubuntu-24.04
复制代码
在已经被Windows集成到Windows 11上作为系统终端的,开发者神器 WIndows Terminal上,你可以找到你安装的发行版本:

如果系统是初次启动时,须要等待一段时间,让系统完成初始化并提示你创建一个新的Linux用户帐户和暗码。例如:

你须要设置一个用户名和暗码。
对于已经初始化完成的系统,切换终端后将直接执行其/bin/bash
、/bin/sh或雷同项目,打开一个交互式环境:

Windows Termimal上,以后如果须要进入默认WSL系统(如未修改就是安装wsl时的Ubuntu),可以直接指定bash
命令:
  1. bash
复制代码
这会通过一个wsl的批处理激活对应的Linux交互环境,如果须要回退Windows终端,则执行exit
即:
  1. exit
复制代码
例如:

  2.3 关于WSL容器中的HTTP/HTTPS代理

这里可以看到一点小提示:
  1. wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
复制代码
一般用户如果没有使用代理不须要关注。它表明,在 Windows 主机上设置了 localhost 代理(主要用于特定网络的访问),但 WSL 无法使用这个代理设置。在 WSLNAT 模式下,localhost 代理是不被支持的。
这个意思是,localhost一般在系统上是回环IP如127.0.0.1的本地host中指定的域名,而然WSL中的系统是独立的,两个系统都有自己的回环地址,因此如果你在你的Windows宿主机上使用的VPN代理是不会影响到WSL中安装的系统的回环地址。
如果你相识Docker网络就知道,Docker所管理的容器中雷同。实际上在Windows上,一个Docker容器也是一个WSL系统,只不过容器主要是由Docker软件所管理的。
如果你不须要在 WSL 中使用代理,可以在 Windows 的代理设置中禁用 localhost 代理。如许 WSL 就不会尝试使用这个代理设置了。
说了这么多要在你的WSL容器中使用代理,你就不因该将HTTP/HTTPS代理设置为127.0.0.1,虽然在Windows上可能如许做如(假设代理端口为6666):
  1. $Env:http_proxy="http://192.168.31.25:6666";$Env:https_proxy="http://192.168.31.25:6666"
复制代码
你应该先在你的Windows终端上使用ipconmfig查询一下自己的IP地址,假设为192.168.31.25,那么,在你的WSLLinux容器中,就应该使用如许的格式来使用代理了:
  1. export http_proxy="http://192.168.31.25:6666"
  2. export https_proxy="http://192.168.31.25:6666"
复制代码
另外,如果你盼望默认使用这个代理,还可以在~/.bash
rc中设置Bash启动运行:
  1. vim ~/.bash
  2. rc
复制代码
添加这两行命令:
  1. export http_proxy="http://192.168.31.25:6666"
  2. export https_proxy="http://192.168.31.25:6666"
复制代码
留意,须要替换为你实际的代理服务器地址和端口。如果你喜欢这个设置文件的修改立即见效则须要运行下面的命令:
  1. source ~/.bash
  2. rc
复制代码
另外,如果如果你使用的不是Bash Shell而是 Zsh shell,则运行:
  1. source ~/.zshrc
复制代码
现在,http_proxy 和 https_proxy 环境变量已经设置好了。你可以使用以下命令来验证环境变量是否设置精确:
  1. echo $http_proxy
  2. echo $https_proxy
复制代码
然后在你的对应WSL容器中curl特定的网站,看实际访问是否乐成,如:

可见我这里是乐成的。
另外,这种方法是在当前用户的 shell 设置文件中设置环境变量,因此只对当前用户见效。如果你想要为所有效户设置代理环境变量,可以将这两行内容添加到 /etc/environment 文件中,并重新登录或重启系统以使更改见效。
  2.4 WSL的其它常用管理命令

为了便于读者进行相关调试,这里顺便先容一些WSL中常用的命令
列出已安装的 WSL 发行版

  1. wsl -l
复制代码
例如:

这里安装了2个wsl系统,都是Ubuntu,一个为24.04版本的,另外一个为22.04版本的。
设置为默认使用系统版本

例如设置22.04的为默认版本:
  1. wsl --set-default Ubuntu-22.04
复制代码
关闭所有正在运行的 WSL 实例

  1. wsl --shutdown
复制代码
注销并删除一个 WSL 发行版

  1. wsl --unregister <DistroName>
复制代码
更新 WSL 到最新版本

  1. wsl --update
复制代码
表现 WSL 的状态,包括版本信息

  1. wsl --status
复制代码
从 tar 文件导入 WSL 发行版

  1. wsl --import <DistroName> <InstallLocation> <FileName>
复制代码
将 WSL 发行版导出到 tar 文件

  1. wsl --export <DistroName> <FileName>
复制代码
终止指定的 WSL 发行版

  1. wsl --terminate <DistroName>
复制代码
3. 从deb包安装Docker

  3.1 关于apt repository的安装方式

安装过程与直接在Ubuntu物理机上安装是一样的。在WSL中通过apt包管理器仓库安装时,须要设置Docker的repository,但是有时即使你精确使用了HTTP/HTTPS代理,也可能由于网络问题安装失败。如果你须要尝试这个安装方式,可以按照下面的步骤进行:
  3.2 手动下载deb安装

首先访问:https://download.docker.com/linux/ubuntu/dists/?_gl=1dzadrf_gcl_auMjAzNjIxNjkxMy4xNzE3OTE2MTA5_gaNjQ5MjUwNDYyLjE3MTc5MTYxMDk._ga_XJWPQMJYHQ*MTcxODI3NzgwNi43LjEuMTcxODI3ODUyNC41My4wLjA.,从这个网站中选择你的Ubuntu版本:

这个页面列举的是各个Ubuntu发行版本的版本代号,
每个 Ubuntu 版本都有一个代号,通常由一个形容词和一个动物名称组成,并按字母次序分列。例如:


  • Ubuntu 18.04: Bionic Beaver
  • Ubuntu 20.04: Focal Fossa
  • Ubuntu 22.04: Jammy Jellyfish
  • Ubuntu 22.10: Kinetic Kudu
这里,我想为 Ubuntu 22.04 下载 Docker 文件,因此选择 jammy/ 目次,来到了第2个页面:

这些是 Docker 提供的不同版本或发布渠道:

  • stable/: 这是 Docker 的稳固版本,推荐大多数用户使用。稳固版本经过了广泛的测试,可靠性高,并提供了恒久支持。如果你正在生产环境中使用 Docker 大概不须要最新的功能,选择稳固版本是最佳选择。
  • test/: 这是 Docker 的测试版本,包含了新的功能和改进,但可能不如稳固版本可靠。如果你想尝试最新的功能并且可以容忍可能出现的问题,你可以选择测试版本。测试版本通常会在几周或几个月后成为新的稳固版本。
  • nightly/: 这是 Docker 的每夜构建版本,包含了最新的代码更改。每夜版本是自动构建的,没有经过广泛测试,因此可能不稳固。除非你是开发人员大概想测试最新的代码,否则不建议使用每夜版本。
  • pool/: 这不是一个特定的 Docker 版本,而是一个包含所有 Docker deb 包的目次。你通常不须要直接使用这个目次。
  • InRelease, Release, 和 Release.gpg: 这些是用于验证软件包完备性和真实性的文件,不代表特定的 Docker 版本。
现在我们使用deb包进行安装,因此访问pool/目次:

选择stable稳固版,进入第4个页面:

这些目次包含了实用于不同 CPU 架构的 Docker deb 安装包。下面是一个表格,形貌了每个目次的用途:
目次形貌amd64/包含实用于 AMD64 (x86-64) 架构的 Docker deb 安装包。这是最常见的架构,用于大多数个人计算机和服务器。arm64/包含实用于 ARM64 (AArch64) 架构的 Docker deb 安装包。这种架构常用于嵌入式装备、移动装备和一些服务器。armhf/包含实用于 ARMHF (ARM hard float) 架构的 Docker deb 安装包。这种架构常用于 32 位 ARM 装备,如 Raspberry Pi。ppc64el/包含实用于 PowerPC 64 位小端 (ppc64el) 架构的 Docker deb 安装包。这种架构常用于 IBM POWER 系统。s390x/包含实用于 IBM System z (s390x) 架构的 Docker deb 安装包。这种架构常用于 IBM 大型机。 一般该根据你的系统 CPU 架构选择相应的目次。对于大多数个人计算机和服务器,amd64/ 是精确的选择。你可以使用以下命令来检查你的系统架构:
  1. dpkg --print-architecture
复制代码

可以看到我这里是amd64,就打开amd64目次,进入实际的下载页面:

须要留意下载版本的匹配,否则安装时可能会出错。这里我选择的是当前较新的一套版本:


  • containerd.io_1.6.33-1_amd64.deb
  • docker-ce-cli_26.1.4-1ubuntu.22.04jammy_amd64.deb
  • docker-ce_26.1.4-1ubuntu.22.04jammy_amd64.deb
  • docker-buildx-plugin_0.14.1-1ubuntu.22.04jammy_amd64.deb
  • docker-compose-plugin_2.27.1-1ubuntu.22.04jammy_amd64.deb
  • docker-ce-rootless-extras_26.1.4-1ubuntu.22.04jammy_amd64.deb
我是直接点击下载到我的Windows主机上的,在下面一章将先容如何直接在WLS容器上找到你的Windows宿主机上的文件。
固然,尚有一个在写脚本实现的时间可以用的方法是通过wget命令下载到指定的目次,这在Linux系统上还是很常见的,如:
  1. wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/containerd.io_1.6.33-1_amd64.deb
  2. wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-cli_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
  3. wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
  4. wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-buildx-plugin_0.14.1-1~ubuntu.22.04~jammy_amd64.deb
  5. wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-compose-plugin_2.27.1-1~ubuntu.22.04~jammy_amd64.deb
  6. wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-rootless-extras_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
复制代码
4. WSL容器访问Windows位置以安装deb

  4.1 WSL容器中的卷绑定

在WSL2中,Microsoft引入了一个非常方便的功能,答应在WSL容器中直接访问Windows文件系统。这意味着你可以在WSL的Linux环境中,使用熟悉的Linux命令和工具来操作Windows上的文件和目次。
当你启动一个WSL发行版时,它会自动将Windows文件系统中的某些位置挂载到WSL的文件系统中。默认环境下,会发生以下挂载:


  • C:盘会被挂载到/mnt/c
  • D:盘会被挂载到/mnt/d
其他盘符也以此类推,如E:盘会被挂载到/mnt/e等。
例如,如果你在Windows的D:\Downloads目次中有一些文件,你可以在WSL中通过/mnt/d/Downloads路径来访问它们。
这个功能非常强大,它答应你在WSL中无缝地使用Windows文件系统,而不须要复制文件或在两个系统之间切换。你可以在WSL中使用ls,cd,cp,mv等命令来欣赏和操作这些文件。
须要留意的是,虽然你可以在WSL中访问整个Windows文件系统,但反过来并不创建。从Windows中,你只能访问WSL的Linux文件系统的一部分,默认位置是:
  1. \\wsl$\<DistroName>\home\<UserName>
复制代码
此中<DistroName>是你的WSL发行版的名称,<UserName>是你的Linux用户名。
相识了WSL的卷绑定功能后,我们就可以方便地在WSL中安装之前下载到Windows中的Docker deb包了。
  4.2 安装deb

假设你已经将Dockerdeb安装包下载到了Windows的D:\Downloads目次,现在我们可以在WSL中进行安装。首先,启动你的WSL发行版,然后切换到/mnt/d/Downloads目次:
  1. cd /mnt/d/Downloads
复制代码
然后,使用dpkg命令来安装这些deb包。留意要按照肯定的次序,因为有些包有依赖关系:
  1. sudo dpkg -i containerd.io_1.6.33-1_amd64.deb
  2. sudo dpkg -i docker-ce-cli_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
  3. sudo dpkg -i docker-ce_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
  4. sudo dpkg -i docker-buildx-plugin_0.14.1-1~ubuntu.22.04~jammy_amd64.deb
  5. sudo dpkg -i docker-compose-plugin_2.27.1-1~ubuntu.22.04~jammy_amd64.deb
  6. sudo dpkg -i docker-ce-rootless-extras_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
复制代码
安装完成后,Docker就已经安装到你的WSL系统中了。
你可以尝试启动Docker服务和在系统启动时自动启动:
  1. sudo systemctl start docker
  2. sudo systemctl enable docker
复制代码
然后,检查Docker服务的状态和安装的版本:
  1. sudo docker version
复制代码

从这个截图可以看出,Docker已经乐成在WSL容器中部署了,但拉取镜像却失败了,因此下一章先容如何设置代理,这对于网络访问加速Docker拉取很有效。
  5. 为Docker设置代理

为了直接使用Docker官方仓库,可以设置Docker访问代理,前提是你自己已有代理服务器。关于代理服务器不在本文的先容范围内。
   这个部分是我的另外一篇条记中的摘录:《简记:为Docker设置服务代理》,地址:https://blog.csdn.net/qq_28550263/article/details/139562987
   5.1 创建Docker设置文件(如果不存在)

  1. sudo mkdir -p /etc/systemd/system/docker.service.d
  2. sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf
复制代码
5.2 添加代理设置

  1. sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
复制代码
在设置文件中,添加以下内容:
  1. [Service]
  2. Environment="HTTP_PROXY=http://服务端主机IP:VPN服务端口号"
  3. Environment="HTTPS_PROXY=http://服务端主机IP:VPN服务端口号"
  4. Environment="NO_PROXY=localhost,127.0.0.1"
复制代码
例如:
  1. [Service]
  2. Environment="HTTP_PROXY=http://192.168.31.25:7890"
  3. Environment="HTTPS_PROXY=http://192.168.31.25:7890"
  4. Environment="NO_PROXY=localhost,127.0.0.1"
复制代码

这里我使用的依然是192.168.31.25和端口7890。请将http://192.168.31.25:7890替换为你实际的代理服务器地址和端口。
NO_PROXY环境变量指定了不应该通过代理访问的主机或域名,通常包括本田主机和回环地址。
  5.3 重新加载Docker服务设置并重启Docker


  • 重新加载Docker服务设置:
  1. sudo systemctl daemon-reload
复制代码

  • 重启Docker服务:
  1. sudo systemctl restart docker
复制代码
然后再次尝试拉取镜像,现在拉取流量将通过代理隧道转发:

拉取竣过后,可以再次查察一下你的镜像:

可见乐成了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

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

本版积分规则

怀念夏天

金牌会员
这个人很懒什么都没写!

标签云

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