开始使用 WSL 容器

本分步指南将帮助你开始使用 WSL 随附的容器 CLI 在 Windows wslc.exe上生成和运行 Linux 容器。

wslc.exe 提供了一个熟悉的 CLI,用于生成、传送和运行容器化应用。

WSL 容器概述

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

先决条件

  • WSL 已安装。 运行 wsl --update 以确保你具有最新版本。
  • 安装 Visual Studio Code(可选)。 这将提供最佳体验,包括编写代码和调试连接到 Linux 分发版的容器化项目的功能。
  • 安装 Windows 终端(可选)。 这将提供最佳体验,包括在同一接口中自定义和打开多个终端(包括 Ubuntu、Debian、PowerShell、Azure CLI 或喜欢使用的任何终端)。

安装和验证 wslc

wslc.exe 包含在 WSL 中,因此没有单独的引擎要安装。 要确保你使用的 WSL 版本包含该功能:

  1. 安装 WSL(如果尚未安装),然后通过打开 PowerShell 并输入以下命令更新到最新版本:

    wsl --update
    
  2. 确认 wslc.exe 是否可用,并通过输入以下内容检查其版本:

    wslc version
    
  3. 通过运行简单的内置映像来测试一切是否正常工作。 如果映像尚未在本地存在,则会自动拉取该映像:

    wslc run --rm hello-world
    

    应会看到一条“Hello”消息,确认安装似乎正常工作。

小窍门

以下是一些实用的 wslc 命令:

  • 通过输入以下命令列出 CLI 中 wslc 可用的命令: wslc --help
  • 使用以下命令列出特定命令的信息:wslc <COMMAND> --help
  • 列出你机器上的映像,使用:wslc image list
  • 列出您计算机上正在运行的容器,使用:wslc container list;或列出所有容器(包括已停止的容器),使用:wslc container list --all
  • 显示正在运行的容器的资源使用情况统计信息,包括: wslc stats

运行第一个容器

通过 wslc.exe 拉取映像,在前台或后台运行容器、发布端口以及与正在运行的容器交互。 从 PowerShell 尝试以下几个命令:

# Run a command in a throwaway container
wslc run --rm -it ubuntu:latest bash -c "echo Hello world from WSL container!"

# Run a web server in the background and publish port 8080 to the container's port 80
wslc run -d --rm -p 8080:80 --name web nginx

# Request content from the running web server
curl localhost:8080

# List the running container
wslc container list

# Run an additional command inside the running container
wslc exec web cat /etc/os-release

# Stop the container
wslc container stop web

由于 nginx 容器是使用 --rm 启动的,因此它会在停止后被自动删除。

生成并运行自己的容器映像

若要开始使用 VS Code 开发应用 wslc.exe,建议使用 VS Code 以及 WSL 扩展 ,以便可以在 Linux 文件系统上编辑项目,并从集成终端运行 wslc 命令。

让我们为现有应用项目生成容器映像。

  1. 在本示例中,我们将使用 Python 开发环境设置文档中 Django Hello World 教程中的源代码。如果希望使用自己的项目源代码,可以跳过此步骤。 若要从GitHub下载 HelloWorld-Django Web 应用,请打开 WSL 终端(例如 Ubuntu),然后输入:

    git clone https://github.com/<username>/helloworld-django.git
    

    注释

    始终将代码存储在正在使用的工具所在的同一文件系统中。 这将导致文件访问性能更快。 在此示例中,我们使用 Linux 发行版(Ubuntu),并希望将项目文件存储在 WSL 文件系统 \\wsl$上。 使用 WSL 中的 Linux 工具访问这些文件时,在 Windows 文件系统上存储项目文件会显著降低速度。

  2. 在 WSL 终端中,切换到此项目的源代码目录:

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

    code .
    

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

    VS Code WSL 远程指示器

  4. 在项目根目录中添加一个 Containerfile,用于说明如何构建镜像。 对于 Django 示例,最小值 Containerfile 可能如下所示:

    FROM python:3
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    COPY . .
    EXPOSE 8000
    CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
    
  5. 从项目文件夹(即包含 Containerfile 的目录)中,使用 wslc build 构建镜像,并为其添加一个便于后续引用的名称:

    wslc build -t helloworld-django .
    
  6. 通过列出你的镜像来确认该镜像已创建:

    wslc image list
    
  7. 将新生成的映像作为容器运行,发布应用的端口,以便可以从Windows访问它:

    wslc run -d --rm -p 8000:8000 --name django helloworld-django
    
  8. 若要确认容器正在运行,请列出正在运行的容器并检查其日志:

    wslc container list
    wslc container logs django
    
  9. 打开Windows上的浏览器并导航到http://localhost:8000/查看在其容器中运行的应用。 还可以通过在容器内执行命令来确认应用在 Linux 上运行:

    wslc exec django uname
    

    uname“Linux”的结果确认容器在 WSL 2 Linux 内核上运行。

  10. 完成后,停止容器:

    wslc container stop django
    

你现在已成功使用 wslc.exe 在 Windows 上构建并运行了由 WSL 2 提供支持的 Linux 容器,还可以结合 VS Code 对其进行构建、运行、部署或调试!

故障排除

检查容器或映像

当容器出现异常时,inspectlogs 命令可提供详细信息,帮助你诊断问题:

wslc container inspect <container-id>
wslc container logs <container-id>
wslc image inspect <image>

回收磁盘空间

映像和停止的容器占用磁盘空间。 若要清理不再使用的资源,请执行以下操作:

# Remove all stopped containers
wslc container prune

# Remove unused images
wslc image prune

有关 WSL 中常规故障排除问题的更多帮助,请参阅 故障排除 文档。

其他资源