Windows + WSL2 的 docker 安装方法,以及配置 python 环境、传输文件并执行 .py 脚本

文章目录

  • 1 写在前面
    • 1.1 docker 是什么 ?
    • 1.2 WSL2 是什么 ?
  • 2 安装
    • 2.1 检查 windows 的子系统功能是否开启
    • 2.2 更新 WSL2
    • 2.3 安装 Docker
  • 3 Docker 平台功能简介
    • 3.1 容器、镜像和数据卷
    • 3.2 从 Windows Powershell 控制 Docker
    • 3.3 正确的使用姿势
  • 4 复现一个自带 python 环境的容器并运行代码
    • 4.1 准备 python 镜像文件
    • 4.2 创建数据盘
    • 4.3 传输代码文件
    • 4.4 创建容器、安装镜像文件并挂载数据盘
    • 4.5 执行数据盘中的代码

1 写在前面

1.1 docker 是什么 ?

众所周知,代码复现最头疼的莫过于 运行环境 问题,明明按照 README 配置好了环境,却因为库版本、系统、硬件层面等的差异,出现一些莫名其妙的错误。

docker 平台的出现改变了这一现状,它通过创造一个容器 (container),技术人员在其中安装开发环境、完成代码开发并打包,使用者下载镜像 (image) 后即可复现这个自带开发环境的容器,从而顺利使用上程序,即口号 “build, share and run”。

1.2 WSL2 是什么 ?

WSL2 (Windows Subsystem for Linux 2) 是微软自带的 Linux 子系统,最早发布于 2021 年的 Windows 10 中,目前在 Windows 10 和 Windows 11 中都可以安装和运行。

docker 必须运行在 Linux 系统下,因此 Windows 系统需要调用 WSL2 来实现 docker。

2 安装

2.1 检查 windows 的子系统功能是否开启

  • 左下角搜索 “启用或关闭 windows 功能”
  • 找到 “适用于 Linux 的 Windows 子系统”
  • 确保前面的框打勾即可

2.2 更新 WSL2

  • 直通链接:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

  • 安装完毕后打开 powershell,输入:

wsl --set-default-version 2

更多关于 WSL2 的安装问题请见:

https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package

2.3 安装 Docker

  • 直通链接:https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe

更多关于 WSL2 的安装问题请见:

https://docs.docker.com/desktop/install/windows-install/

3 Docker 平台功能简介

3.1 容器、镜像和数据卷

打开 Docker Desktop,可以看到左侧有三个主要功能:

Windows + WSL2 的 docker 安装方法,以及配置 python 环境、传输文件并执行 .py 脚本_第1张图片

  • 容器 (Containers):正在运行的容器
  • 镜像 (Images):环境文件,可以通过右上角 Search 找到你所需要的环境
  • 数据卷 (Volumes):给容器挂载的硬盘,方便和 Windows 系统交换数据

3.2 从 Windows Powershell 控制 Docker

Docker Desktop 允许方便地查看和删除最近的活动,但是操作起来并不清晰和明确,因此更推荐在命令行执行指令,以下列举了最常见的指令:

  • 镜像:docker pull xxx (下载) / docker run xxx (安装) / docker image ls (列表)

  • 容器:docker start xxx (启动) / docker stop xxx (停止) / docker container ls (列表)

  • 数据卷:docker volume create xxx (创建) / docker volume ls (列表)

3.3 正确的使用姿势

  1. 下载所需的 image (环境,譬如 python 3)
  2. 准备一个 volume (数据盘)
  3. 把将要执行的代码和数据放在 volume 里面
  4. 创建 container (容器) ,安装环境,并挂载 volume
  5. 在容器复现的环境内运行代码

4 复现一个自带 python 环境的容器并运行代码

4.1 准备 python 镜像文件

回到 Docker Desktop,右上角搜索 python,然后选择所需的版本,再点击 Pull 即可

完成后,将看到 images 中多了一个 python

Windows + WSL2 的 docker 安装方法,以及配置 python 环境、传输文件并执行 .py 脚本_第2张图片

4.2 创建数据盘

打开 Windows Powershell,输入以下指令

完成后可以在 Docker Desktop 的 Volumes 中看到新增的数据盘

docker volume create --name disk

4.3 传输代码文件

该数据盘的实际位置可以通过 Windows 文件浏览器访问:

\wsl.localhost\docker-desktop-data\data\docker\volumes\disk_data

此时可以在该位置新建或者复制进来一个 test.py,内容如下:

print('Hello World!')

答疑:这个奇怪的路径是怎么回事?

请回忆一下 docker 平台的原理,它运行在 Windows 利用 WSL2 创建的 Linux 环境中, 换句话说,以上路径可以理解成:

  1. WSL2 创造了 Linux 系统,位于网络位置 \wsl.localhost
  2. docker 平台安装在该系统中,因此位于 docker-desktop-data 文件夹
  3. docker 创建了一个硬盘,因此位于 \data\docker\volumes 内

4.4 创建容器、安装镜像文件并挂载数据盘

打开 Windows Powershell,输入以下指令

docker run -it --name test -v disk:/mnt python

此时看到进入了容器的 python 环境中,容器的系统是 Linux 系统

Python 3.11.0 (main, Nov 15 2022, 19:58:01) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

答疑:run 里面的参数是怎么回事?

  • -it:以可交互形式创建容器,否则 Powershell 无法进入 Linux 子系统
  • –name test:容器的名字起作 test
  • -v disk:/mnt:把创建的 disk 硬盘挂载到容器的 /mnt 文件夹中
  • python:安装并进入 python 环境

4.5 执行数据盘中的代码

此时,我们已经为 Linux 子系统准备好了 Docker 带来的容器 test,该容器内安装好了 python 环境,同时该容器的 /mnt 文件夹挂载了系统的 disk 文件夹,内含有传输过来的代码,等待进一步执行。

我们首先进入这个容器:

Windows + WSL2 的 docker 安装方法,以及配置 python 环境、传输文件并执行 .py 脚本_第3张图片
接着和 Linux 一样,切换容器的工作目录到 /mnt 中,然后执行代码:

cd mnt
python test.py

大功告成:

Windows + WSL2 的 docker 安装方法,以及配置 python 环境、传输文件并执行 .py 脚本_第4张图片

你可能感兴趣的:(心得体会,docker,windows,python)