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

CSDN 2024-07-14 17:07:04 阅读 93

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. 概述2. 部署WSL2环境2.1 WSL2简介及其安装2.2 查找WSL2和安装支持的其它发行版2.3 关于WSL容器中的HTTP/HTTPS代理2.4 WSL的其它常用管理命令列出已安装的 WSL 发行版设置为默认使用系统版本关闭所有正在运行的 WSL 实例注销并删除一个 WSL 发行版更新 WSL 到最新版本显示 WSL 的状态,包括版本信息从 tar 文件导入 WSL 发行版将 WSL 发行版导出到 tar 文件终止指定的 WSL 发行版

3. 从deb包安装Docker3.1 关于apt repository的安装方式3.2 手动下载deb安装

4. WSL容器访问Windows位置以安装deb4.1 WSL容器中的卷绑定4.2 安装deb

5. 为Docker配置代理5.1 创建Docker配置文件(如果不存在)5.2 添加代理设置5.3 重新加载Docker服务配置并重启Docker


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或命令提示符中输入以下命令并按回车键:

<code>wsl --install

这个命令将启用运行WSL并安装Linux的Ubuntu发行版所需的功能。如果你想安装其他发行版,可以使用-d标志,例如:

wsl --install -d Debian

不过你也可以在后续查看安装各种发行版本。

命令执行完毕后,最好需要重启计算机以完成安装。

重启后,打开已安装的Linux发行版,它会自动打开一个控制台窗口。

2.2 查找WSL2和安装支持的其它发行版

之前提到-d Debian可以选择初始化时一个默认版本,如未选择就是使用默认的Ubuntu。实际上我们还可以继续安装其它发行版本,要了解当前WSL2支持的Linux发行版,可以使用这个命令:

wsl --list --online

它将搜索当前的支持列表并打印输出出来,例如:

PS C:\Users\jclee95> wsl --list --online

以下是可安装的有效分发的列表。

使用 'wsl.exe --install <Distro>' 安装。

NAME FRIENDLY NAME

Ubuntu Ubuntu

Debian Debian GNU/Linux

kali-linux Kali Linux Rolling

Ubuntu-18.04 Ubuntu 18.04 LTS

Ubuntu-20.04 Ubuntu 20.04 LTS

Ubuntu-22.04 Ubuntu 22.04 LTS

Ubuntu-24.04 Ubuntu 24.04 LTS

OracleLinux_7_9 Oracle Linux 7.9

OracleLinux_8_7 Oracle Linux 8.7

OracleLinux_9_1 Oracle Linux 9.1

openSUSE-Leap-15.5 openSUSE Leap 15.5

SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4

SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5

openSUSE-Tumbleweed openSUSE Tumbleweed

在这里插入图片描述

我们可以选择喜欢的版本通过下面的命令进行安装,例如安装<code>Ubuntu-24.04版本:

wsl --install Ubuntu-24.04

在已经被Windows集成到Windows 11上作为系统终端的,开发者神器 WIndows Terminal上,你可以找到你安装的发行版本:

在这里插入图片描述

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

在这里插入图片描述

你需要设置一个用户名和密码。

对于已经初始化完成的系统,切换终端后将直接执行其<code>/bin/bash、/bin/sh或类似项目,打开一个交互式环境:

在这里插入图片描述

Windows Termimal上,以后如果需要进入默认WSL系统(如未修改就是安装wsl时的Ubuntu),可以直接指定<code>bash命令:

bash

这会通过一个wsl的批处理激活对应的Linux交互环境,如果需要回退Windows终端,则执行exit即:

exit

例如:

在这里插入图片描述

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

这里可以看到一点小提示:

<code>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):

$Env:http_proxy="http://192.168.31.25:6666";$Env:https_proxy="http://192.168.31.25:6666"code>

你应该先在你的Windows终端上使用ipconmfig查询一下自己的IP地址,假设为192.168.31.25,那么,在你的WSLLinux容器中,就应该使用这样的格式来使用代理了:

export http_proxy="http://192.168.31.25:6666"code>

export https_proxy="http://192.168.31.25:6666"code>

另外,如果你希望默认使用这个代理,还可以在~/.bashrc中配置Bash启动运行:

vim ~/.bashrc

添加这两行命令:

export http_proxy="http://192.168.31.25:6666"code>

export https_proxy="http://192.168.31.25:6666"code>

注意,需要替换为你实际的代理服务器地址和端口。如果你喜欢这个配置文件的修改立刻生效则需要运行下面的命令:

source ~/.bashrc

另外,如果如果你使用的不是Bash Shell而是 Zsh shell,则运行:

source ~/.zshrc

现在,http_proxyhttps_proxy 环境变量已经设置好了。你可以使用以下命令来验证环境变量是否设置正确:

echo $http_proxy

echo $https_proxy

然后在你的对应WSL容器中curl特定的网站,看实际访问是否成功,如:

在这里插入图片描述

可见我这里是成功的。

另外,这种方法是在当前用户的 shell 配置文件中设置环境变量,因此只对当前用户生效。如果你想要为所有用户设置代理环境变量,可以将这两行内容添加到 <code>/etc/environment 文件中,并重新登录或重启系统以使更改生效。

2.4 WSL的其它常用管理命令

为了便于读者进行相关调试,这里顺便介绍一些WSL中常用的命令

列出已安装的 WSL 发行版

wsl -l

例如:

在这里插入图片描述

这里安装了2个wsl系统,都是Ubuntu,一个为<code>24.04版本的,另外一个为22.04版本的。

设置为默认使用系统版本

例如设置22.04的为默认版本:

wsl --set-default Ubuntu-22.04

关闭所有正在运行的 WSL 实例

wsl --shutdown

注销并删除一个 WSL 发行版

wsl --unregister <DistroName>

更新 WSL 到最新版本

wsl --update

显示 WSL 的状态,包括版本信息

wsl --status

从 tar 文件导入 WSL 发行版

wsl --import <DistroName> <InstallLocation> <FileName>

将 WSL 发行版导出到 tar 文件

wsl --export <DistroName> <FileName>

终止指定的 WSL 发行版

wsl --terminate <DistroName>

3. 从deb包安装Docker

3.1 关于apt repository的安装方式

安装过程与直接在Ubuntu物理机上安装是一样的。在WSL中通过apt包管理器仓库安装时,需要设置Dockerrepository,但是有时即使你正确使用了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 BeaverUbuntu 20.04: Focal FossaUbuntu 22.04: Jammy JellyfishUbuntu 22.10: Kinetic Kudu

这里,我想为 Ubuntu 22.04 下载 Docker 文件,因此选择 jammy/ 目录,来到了第2个页面:

在这里插入图片描述

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

<code>stable/: 这是 Docker 的稳定版本,推荐大多数用户使用。稳定版本经过了广泛的测试,可靠性高,并提供了长期支持。如果你正在生产环境中使用 Docker 或者不需要最新的功能,选择稳定版本是最佳选择。

test/: 这是 Docker 的测试版本,包含了新的功能和改进,但可能不如稳定版本可靠。如果你想尝试最新的功能并且可以容忍可能出现的问题,你可以选择测试版本。测试版本通常会在几周或几个月后成为新的稳定版本。

nightly/: 这是 Docker 的每夜构建版本,包含了最新的代码更改。每夜版本是自动构建的,没有经过广泛测试,因此可能不稳定。除非你是开发人员或者想测试最新的代码,否则不建议使用每夜版本。

pool/: 这不是一个特定的 Docker 版本,而是一个包含所有 Docker deb 包的目录。你通常不需要直接使用这个目录。

InRelease, Release, 和 Release.gpg: 这些是用于验证软件包完整性和真实性的文件,不代表特定的 Docker 版本。

现在我们使用deb包进行安装,因此访问pool/目录:

在这里插入图片描述

选择<code>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/ 是正确的选择。你可以使用以下命令来检查你的系统架构:

<code>dpkg --print-architecture

在这里插入图片描述

可以看到我这里是amd64,就打开<code>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宿主机上的文件。

当然,还有一个在写脚本实现的时候可以用的方法是通过<code>wget命令下载到指定的目录,这在Linux系统上还是很常见的,如:

wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/containerd.io_1.6.33-1_amd64.deb

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

wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce_26.1.4-1~ubuntu.22.04~jammy_amd64.deb

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

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

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文件系统的一部分,默认位置是:

\\wsl$\<DistroName>\home\<UserName>

其中<DistroName>是你的WSL发行版的名称,<UserName>是你的Linux用户名。

了解了WSL的卷绑定功能后,我们就可以方便地在WSL中安装之前下载到Windows中的Docker deb包了。

4.2 安装deb

假设你已经将Dockerdeb安装包下载到了WindowsD:\Downloads目录,现在我们可以在WSL中进行安装。首先,启动你的WSL发行版,然后切换到/mnt/d/Downloads目录:

cd /mnt/d/Downloads

然后,使用dpkg命令来安装这些deb包。注意要按照一定的顺序,因为有些包有依赖关系:

sudo dpkg -i containerd.io_1.6.33-1_amd64.deb

sudo dpkg -i docker-ce-cli_26.1.4-1~ubuntu.22.04~jammy_amd64.deb

sudo dpkg -i docker-ce_26.1.4-1~ubuntu.22.04~jammy_amd64.deb

sudo dpkg -i docker-buildx-plugin_0.14.1-1~ubuntu.22.04~jammy_amd64.deb

sudo dpkg -i docker-compose-plugin_2.27.1-1~ubuntu.22.04~jammy_amd64.deb

sudo dpkg -i docker-ce-rootless-extras_26.1.4-1~ubuntu.22.04~jammy_amd64.deb

安装完成后,Docker就已经安装到你的WSL系统中了。

你可以尝试启动Docker服务和在系统启动时自动启动:

sudo systemctl start docker

sudo systemctl enable docker

然后,检查Docker服务的状态和安装的版本:

sudo docker version

在这里插入图片描述

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

5. 为Docker配置代理

为了直接使用Docker官方仓库,可以设置Docker访问代理,前提是你自己已有代理服务器。关于代理服务器不在本文的介绍范围内。

这个部分是我的另外一篇笔记中的摘录:《简记:为Docker配置服务代理》,地址:https://blog.csdn.net/qq_28550263/article/details/139562987

5.1 创建Docker配置文件(如果不存在)

<code>sudo mkdir -p /etc/systemd/system/docker.service.d

sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf

5.2 添加代理设置

sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

在配置文件中,添加以下内容:

[Service]

Environment="HTTP_PROXY=http://服务端主机IP:VPN服务端口号"code>

Environment="HTTPS_PROXY=http://服务端主机IP:VPN服务端口号"code>

Environment="NO_PROXY=localhost,127.0.0.1"code>

例如:

[Service]

Environment="HTTP_PROXY=http://192.168.31.25:7890"code>

Environment="HTTPS_PROXY=http://192.168.31.25:7890"code>

Environment="NO_PROXY=localhost,127.0.0.1"code>

在这里插入图片描述

这里我使用的依然是192.168.31.25和端口7890。请将<code>http://192.168.31.25:7890替换为你实际的代理服务器地址和端口。

NO_PROXY环境变量指定了不应该通过代理访问的主机或域名,通常包括本地主机和回环地址。

5.3 重新加载Docker服务配置并重启Docker

重新加载Docker服务配置:

sudo systemctl daemon-reload

重启Docker服务:

sudo systemctl restart docker

然后再次尝试拉取镜像,现在拉取流量将通过代理隧道转发:

在这里插入图片描述

拉取结束后,可以再次查看一下你的镜像:

在这里插入图片描述

可见成功了。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。