当前位置: 首页 > news >正文

使用VSCode在WSL和Docker中开发

通过WSL,开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需使用传统虚拟机或设置成双启动系统。借助 Docker Desktop for Windows 中支持的 WSL 2 后端,可以在基于 Linux 的开发环境中工作并生成基于 Linux 的容器,同时使用 Visual Studio Code 进行代码编辑和调试。

安装WSL

通过WSL,开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需使用传统虚拟机或设置成双启动系统。

安装WSL2

在Windows11或Windows10(更新至新版)中,可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符,方法是右键单击并选择“以管理员身份运行”,输入 wsl --install 命令,此命令将启用运行 WSL2 并安装 Linux 的 Ubuntu 发行版所需的功能。。

如果不使用默认的Ubuntu发行版,也可以进行更改。

  • 若要更改安装的发行版,请输入:wsl --install -d <Distribution Name>。 将 <Distribution Name> 替换为要安装的发行版的名称。

设置 Linux 用户信息

安装 WSL 后,需要为新安装的 Linux 发行版创建用户帐户和密码。

检查正在运行的 WSL 版本

可列出已安装的 Linux 发行版,并通过在 PowerShell 或 Windows 命令提示符中输入以下命令来检查每个发行版的 WSL 版本:wsl -l -v

D:\>wsl -l -vNAME              STATE           VERSION
* Ubuntu            Running         2docker-desktop    Running         2

应确保使用WSL2,以便利的使用Docker、VScode等软件进行开发。

使用 WSL 运行多个 Linux 发行版的方法

WSL 支持运行想要安装的任意数量的不同 Linux 发行版。 这可能包括从 Microsoft Store 选择发行版、导入自定义发行版或生成自己的自定义发行版。

可以使用命令wsl -l -o查看可安装的Linux发行版。

D:\>wsl -l -o
以下是可安装的有效分发的列表。
使用“wsl.exe --install <Distro>”安装。NAME                            FRIENDLY NAME
AlmaLinux-8                     AlmaLinux OS 8
AlmaLinux-9                     AlmaLinux OS 9
AlmaLinux-Kitten-10             AlmaLinux OS Kitten 10
AlmaLinux-10                    AlmaLinux OS 10
Debian                          Debian GNU/Linux
FedoraLinux-42                  Fedora Linux 42
SUSE-Linux-Enterprise-15-SP5    SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6    SUSE Linux Enterprise 15 SP6
Ubuntu                          Ubuntu
Ubuntu-24.04                    Ubuntu 24.04 LTS
archlinux                       Arch Linux
kali-linux                      Kali Linux Rolling
openSUSE-Tumbleweed             openSUSE Tumbleweed
openSUSE-Leap-15.6              openSUSE Leap 15.6
Ubuntu-18.04                    Ubuntu 18.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Ubuntu-22.04                    Ubuntu 22.04 LTS
OracleLinux_7_9                 Oracle Linux 7.9
OracleLinux_8_7                 Oracle Linux 8.7
OracleLinux_9_1                 Oracle Linux 9.1

安装后,有几种方法可以运行 Linux 发行版:

  • 安装 Windows 终端(推荐):使用 Windows 终端支持你想要安装的任意数量的命令行,并允许你在多个标签或窗口窗格中打开它们并在多个 Linux 发行版或其他命令行(PowerShell、命令提示符、Azure CLI 等)之间快速切换。 可使用独特的配色方案、字体样式、大小、背景图像和自定义键盘快捷键来完全自定义终端。 了解详细信息。
  • 通过访问 Windows“开始”菜单并键入已安装的发行版的名称,可以直接打开 Linux 发行版。 例如:“Ubuntu”。 这会在其自己的控制台窗口中打开 Ubuntu。
  • 在 Windows 命令提示符或 PowerShell 中,可以输入已安装的发行版的名称。 例如:ubuntu
  • 在 Windows 命令提示符或 PowerShell 中,可以在当前命令行中打开默认的 Linux 发行版,方法是输入:wsl.exe
  • 在 Windows 命令提示符或 PowerShell 中,可以在当前命令行中使用默认的 Linux 发行版,而无需输入新的发行版名称,方法是输入:wsl [command]。 将 [command] 替换为 WSL 命令,例如,替换为 wsl -l -v 以列出已安装的发行版,或 wsl pwd 以查看当前目录路径在 WSL 中的装载位置。 在 PowerShell 中,命令 get-date 将提供 Windows 文件系统中的日期,而 wsl date 将提供 Linux 文件系统中的日期。

WSL2上的Docker 远程容器

Docker 容器概述

Docker 是一种工具,用于创建、部署和运行应用程序(通过使用容器)。 容器使开发人员可以将应用与需要的所有部件(库、框架、依赖项等)打包为一个包一起交付。 使用容器可确保此应用的运行与之前相同,而不受任何自定义设置或运行该应用的计算机上先前安装的库的影响(运行应用的计算机可能与用于编写和测试应用代码的计算机不同)。 这使开发人员可以专注于编写代码,而无需关心将运行代码的系统。

Docker 容器与虚拟机类似,但不会创建整个虚拟操作系统。 相反,Docker 允许应用使用与运行它的系统相同的 Linux 内核。 这使得应用包能够仅要求主计算机上尚未安装的部件,从而降低包大小以及提高性能。

将 Docker 容器与 Kubernetes 等工具结合使用以实现持续可用性是容器普及的另一个原因。 这样就可以在不同的时间创建应用容器的多个版本。 每个容器(及其特定的微服务)均可以动态更换,而无需停止整个系统来进行更新或维护。 你可以准备一个包含所有更新的新容器,将该容器设置用于生产,并在新容器准备就绪后直接指向该容器。 你还可以使用容器对不同版本的应用进行存档,如有需要,还可将其作为安全回退保持运行。

安装 Docker Desktop

借助 Docker Desktop for Windows 中支持的 WSL 2 后端,可以在基于 Linux 的开发环境中工作并生成基于 Linux 的容器,同时使用 Visual Studio Code 进行代码编辑和调试,并在 Windows 上的 Microsoft Edge 浏览器中运行容器。

在已安装WSL之后,安装Docker Desktop.

  1. 下载 Docker Desktop 并按照安装说明进行操作。(https://docs.docker.com/docker-for-windows/wsl/#download)
  2. 安装后,从 Windows 开始菜单启动 Docker Desktop,然后从任务栏的隐藏图标菜单中选择 Docker 图标。 右键单击该图标以显示 Docker 命令菜单,然后选择“设置”。
  3. 确保在“设置”>“常规”中选中“使用基于 WSL 2 的引擎”。
  4. 通过转到“设置”>“资源”>“WSL 集成”,从要启用 Docker 集成的已安装 WSL 2 发行版中进行选择。
  5. 若要确认已安装 Docker,请打开 WSL 发行版(例如 Ubuntu),并通过输入 docker --version 来显示版本和内部版本号
  6. 通过使用 docker run hello-world 运行简单的内置 Docker 映像,测试安装是否正常工作。(如果$ docker run hello-world
    Unable to find image ‘hello-world:latest’ locally
    docker: Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers),需要配置国内镜像源)
  7. 一些需要了解的有用 Docker 命令:
  • 通过输入以下命令列出 Docker CLI 中可用的命令:docker
  • 使用以下命令列出特定命令的信息:docker <COMMAND> --help
  • 使用以下命令列出计算机上的 docker 映像(此时仅为 hello-world 映像):docker image ls --all
  • 使用以下命令列出计算机上的容器:docker container ls --alldocker ps -a(如果没有 -a 显示全部标志,则仅显示正在运行的容器)
  • 使用以下命令列出有关 Docker 安装的系统范围的信息,包括 WSL 2 上下文中你可使用的统计信息和资源(CPU 和内存):docker info

使用 VS Code 在远程容器中开发

安装VS Code扩展

若要开始使用 Docker 和 WSL 2 开发应用,建议使用 VS Code 以及 WSL、Dev Containers 和 Docker 扩展。

  • 安装 VS Code WSL 扩展。 此扩展使你能够在 VS Code 中打开在 WSL 上运行的 Linux 项目(无需担心路径问题、二进制兼容性或其他跨 OS 的难题)。
  • 安装 VS Code Dev Containers 扩展。 此扩展使你能够打开容器内的项目文件夹或存储库,并利用 Visual Studio Code 的完整功能集在容器中执行开发工作。
  • 安装 VS Code Docker 扩展。 此扩展添加了从 VS Code 内生成、管理和部署容器化应用程序的功能。 (需要 Dev Containers 扩展才能使用容器作为你的开发环境。)

使用 Docker 为现有应用项目创建开发容器

  1. 对于此示例,我将在 Python 开发环境设置文档中使用适用于 Django 的 Hello World 教程中的源代码。如果想要使用自己的项目源代码,可以跳过此步骤。 若要从 GitHub 下载 HelloWorld-Django Web 应用,请打开 WSL 终端(例如 Ubuntu)并输入:git clone https://github.com/mattwojo/helloworld-django.git

  2. 在 WSL 终端中,将目录更改为此项目的源代码文件夹:

    Bash

    cd helloworld-django
    
  3. 通过输入以下内容,在本地 WSL 扩展服务器上运行的 VS Code 中打开项目:

    Bash

    code .
    

    通过检查 VS Code 实例左下角的绿色远程指示器,确认已连接到 WSL Linux 发行版。(WSL: Unbutu-24.04)

  4. 从 VS Code 命令面板 (Ctrl + Shift + P),输入:开发容器: 在容器中重新打开,因为我们使用的是已使用 WSL 扩展打开的文件夹。 也可使用“开发容器: 在容器中打开文件夹…”,以使用本地 \\wsl$ 共享(从 Windows 端)选择 WSL 文件夹。 有关更多详细信息,请参阅 Visual Studio Code 快速入门:在容器中打开现有文件夹。 如果这些命令在你开始键入时未显示,请检查并确保你已安装上面链接的 Dev Containers 扩展。VS Code 开发容器命令

  5. 选择要容器化的项目文件夹。 在我的示例中,它是 \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\VS Code 开发容器文件夹

  6. 将显示容器定义列表,因为项目文件夹(存储库)中还没有 dev container 配置。 显示的容器配置定义列表将根据项目类型进行筛选。 对于 Django 项目,我将选择 Python 3。VS Code 开发容器配置定义

  7. 系统将打开新的 VS Code 实例,开始生成新映像,生成完成后,将启动容器。 将看到出现新的 .devcontainer 文件夹,其中 Dockerfiledevcontainer.json 文件中包含容器配置信息。VS Code .devcontainer 文件夹

  8. 若要确认项目仍然连接到 WSL 和容器中,请打开 VS Code 集成终端 (Ctrl + Shift + ~)。 通过输入 uname 检查操作系统,并通过 python3 --version 检查 Python 版本。 可以看到,uname 返回为“Linux”,因此你仍然连接到 WSL 2 引擎,Python 版本号将基于容器配置,该配置可能不同于 WSL 发行版上安装的 Python 版本。

  9. 若要使用 Visual Studio Code 在容器内运行和调试应用,请首先打开“运行”菜单(Ctrl+Shift+D 或选择最左侧菜单栏上的选项卡)。 然后选择“运行和调试”以选择调试配置,并选择最适合项目的配置(在我的示例中,这将是“Django”)。 这会在项目的 launch.json 文件夹中创建一个 .vscode 文件,其中包含有关如何运行应用的说明。

    VS Code 运行调试配置

  10. 在 VS Code 中,选择“运行”>“开始调试”(或只按 F5 键)。 这会在 VS Code 中打开终端,并且你应会看到如下所示的结果:“正在 http://127.0.0.1:8000/ 启动开发服务器。使用 CONTROL-C 退出服务器。”按住 Control 键并选择显示的地址,以在默认 Web 浏览器中打开应用,并查看在其容器中运行的项目。

    运行 docker 容器的 VS Code

现在,已使用 Docker Desktop 成功配置了远程开发容器,该容器由 WSL 2 后端提供支持,可以使用 VS Code 对该容器进行编码、生成、运行、部署或调试。

Docker 镜像源设置

在Windows中,docker desktop – settings --docker engine中增加镜像源,例如:

{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors":["https://docker.xuanyuan.me"]
}

然后点击"Apply & restart",之后,就可以在WSL中查看设置和拉取镜像了。

$ docker info
Client:Version:    28.0.4Context:    defaultDebug Mode: falsePlugins:
......Registry Mirrors:https://docker.xuanyuan.me/Live Restore Enabled: false

运行docker image测试:

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
Digest: sha256:0b6a027b5cf322f09f6706c754e086a232ec1ddba835c8a15c6cb74ef0d43c29
Status: Downloaded newer image for hello-world:latestHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

查看docker image

$ docker image ls
REPOSITORY                               TAG       IMAGE ID       CREATED        SIZE
hello-world                              latest    74cc54e27dc4   4 months ago   10.1kB

相关文章:

  • 小程序使用npm包的方法
  • 【HTML】基础学习【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • LeetCode - 21. 合并两个有序链表
  • Correlations氛围测试:文本或图像的相似度热图
  • [面试精选] 0206. 反转链表
  • 二叉搜索树——AVL
  • Redisson学习专栏(四):实战应用(分布式会话管理,延迟队列)
  • 机器视觉2D定位引导一般步骤
  • C++基础算法————深度优先搜索(DFS)
  • 高考加油!UI界面生成器!
  • B3623 枚举排列(递归实现排列型枚举)
  • python魔法函数
  • 【基础算法】模拟算法
  • @PathVariable注解-补充
  • Python实现P-PSO优化算法优化卷积神经网络CNN分类模型项目实战
  • 【Java实战】低侵入的线程池值传递
  • PostgreSQL的扩展 dblink
  • python学习打卡day40
  • FreeCAD源码分析: 串行化工具
  • 记一次idea中lombok无法使用的解决方案
  • wordpress cpu飙升/兰州网络推广关键词优化
  • 滨海做网站的/网上如何推广自己的产品
  • 新闻网站传播力建设/网页设计可以自学吗
  • 天津网站策划/郑州搜狗关键词优化顾问
  • 周末游做的好的网站/应用商店关键词优化
  • 怎样查看别人的网站是怎么建设/seo流量