使用WSL2在Windows 10 | Windows Server 2019上运行Podman

时间:2020-02-23 14:45:31  来源:igfitidea点击:

正如我们所知道的,因为Linux(WSL)的Windows子系统允许开发人员运行GNU/Linux环境 - 包括大多数命令行工具,实用程序和应用程序 - 直接在Windows上,未经修改,无需虚拟机的开销。

WSL 2是适用于Linux架构的Windows子系统的新版本,为Linux提供Windows子系统来运行Windows上的ELF64 Linux二进制文件。
其主要目标是提高文件系统性能,以及添加完整的系统调用兼容性。

第1节:为Linux安装Windows子系统

按照以下步骤安装WSL2并获得最喜欢的Linux分发和运行。
我将使用Ubuntu 20.04.

第1步:为Linux启用Windows子系统

在Windows上安装任何Linux发行版之前,必须启用"Windows子系统for Linux"可选功能。

以管理员身份打开PowerShell并运行:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

这将在Windows中具有WSL 1.
要具有WSL 2,我们必须如下一步所示更新它。

第2步:更新到WSL 2

要更新为WSL 2,Windows必须满足以下条件:运行Windows 10,更新为2004版,构建19041或者更高版本。
选中Windows版本通过选择Windows徽标键+ R,执行Winver,选择OK.enable"虚拟机平台"可选组件安装WSL 2之前,必须启用"虚拟机平台"可选功能。

请注意,如果未满足上述要求,请稍后任何工作。
更新Windows 10到2004,构建19041或者更高版本。

以管理员身份打开PowerShell并运行:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重新启动计算机以完成WSL安装并更新为WSL 2.

第3步:安装Linux发行版

在重新启动后返回计算机后,打开"Microsoft Store"应用程序并搜索我们喜欢的Linux发行版。
我要搜索并安装Ubuntu 20.04

搜索Ubuntu.

安装Ubuntu 20.04 LTS

在下载时要耐心等待。

如果安装以确认它是健康的,则可以启动。

在那里我们走了!

将要求我们输入用户名和密码。
亲切!

之后,一切都应该如下所示。
我们已登录并准备好下一步。

步骤4:将WSL 2设置为默认版本(可选)

在设置WSL 2版本时,我们有两个选项。

选项1:我们可以通过在PowerShell上运行以下命令,设置要通过任何版本的WSL备份的特定Linux发行版

wsl --set-version  <distribution name> <versionNumber>

确保将其替换为分发的实际名称,并使用"1"或者"2"的实际名称。
我们可以随时使用与上面的命令运行相同的命令来返回WSL 1,但用'1'替换'2'。

我们可以通过执行以下命令查看所有发行版:

wsl --list --all

选项2:通过在PowerShell上运行以下命令,我们可以将WSL 2设置为默认的全局体系结构。

wsl --set-default-version 2

我要去选择一个,但你可以自由选择。

wsl --set-version  Ubuntu-20.04 2

如果我们收到消息:"WSL 2需要更新到其内核组件。
有关信息,请访问https://aka.ms/wsl2kernel"

单击此链接以下载Linux内核更新包然后安装它。
我们可以在提供的URL上了解更多信息。
https://docs.microsoft.com/en-us/windows/wsl/wsl2-kernel.

安装包后,请再次发出命令。
完成几秒钟即可完成。

wsl --set-version  Ubuntu-20.04 2

完成转换后,我们可以通过在下面运行以下命令查看Linux Distras的WSL版本

wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         1
  Ubuntu-20.04    Stopped         2

正如我们所看到的,我们的Ubuntu 20.04在WSL版本2中,而另一个在WSL版本中。
我们可以根据需要将一个WSL版本转换为另一个WSL版本。

第2节:安装船长

一旦完成第1部分,就会启动我们希望安装Podman的发行版(我是Ubuntu-20.04),然后进入下面的步骤。

第1步:添加Podman PPA并安装Podman

开始在Ubuntu上安装Podman的最简单方法是使用Kubic项目。
Kubic项目为Ubuntu 18.04,19.04,19.10和20.04提供了封装。
我们可以轻松地将此包添加到Ubuntu分发中如下所示

. /etc/os-release
sudo sh -c "echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}//' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add 
sudo apt-get update -qq
sudo apt-get -qq -y install podman
sudo mkdir -p /etc/containers
echo -e "[registries.search]\nregistries = ['docker.io', 'quay.io']" | sudo tee /etc/containers/registries.conf

确认我们的Podman是否已成功安装

podman info
host:
  arch: amd64
  buildahVersion: 1.14.9
  cgroupVersion: v1
  conmon:
    package: 'conmon: /usr/libexec/podman/conmon'
    path: /usr/libexec/podman/conmon
    version: 'conmon version 2.0.16, commit: '
  cpus: 8
  distribution:
    distribution: ubuntu
    version: "20.04"
  eventLogger: file
  hostname: Kibet-pc
  idMappings:
    gidmap:
    - container_id: 0
      host_id: 1000
      size: 1
    - container_id: 1
      host_id: 100000
      size: 65536
    uidmap:
    - container_id: 0
      host_id: 1000
      size: 1
    - container_id: 1
      host_id: 100000
      size: 65536
  kernel: 4.19.104-microsoft-standard
  memFree: 12580970496
  memTotal: 13297381376
  ociRuntime:
    name: runc
    package: 'runc: /usr/sbin/runc'
    path: /usr/sbin/runc
    version: 'runc version spec: 1.0.1-dev'
  os: linux
  rootless: true
  slirp4netns:
    executable: /usr/bin/slirp4netns
    package: 'slirp4netns: /usr/bin/slirp4netns'
    version: |
      slirp4netns version 1.0.0
      commit: unknown
      libslirp: 4.2.0
  swapFree: 4294967296
  swapTotal: 4294967296
  uptime: 1h 36m 59.79s (Approximately 0.04 days)
registries:
  search:
  - docker.io
  - quay.io
store:
  configFile: /home/tech/.config/containers/storage.conf
  containerStore:
    number: 11
    paused: 0
    running: 1
    stopped: 10
  graphDriverName: vfs
  graphOptions: {}
  graphRoot: /home/tech/.local/share/containers/storage
  graphStatus: {}
  imageStore:
    number: 2
  runRoot: /tmp/run-1000/containers
  volumePath: /home/tech/.local/share/containers/storage/volumes

我们应该注意,Podman已更改为自动更改为不再自动在用户主目录中生成配置文件。
在这种情况下了解更多关于这个案例的内容。

第2步:拉动并运行示例 容器

运行以下命令以从docker.io中拉lepline

podman pull alpine
Trying to pull docker.io/library/alpine...
Getting image source signatures
Copying blob df20fa9351a1 done
Copying config a24bb40132 done
Writing manifest to image destination
Storing signatures
a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e

一旦拉,我们可以查看以下所有图像:

podman images
REPOSITORY                 TAG      IMAGE ID       CREATED       SIZE
docker.io/library/nginx    latest   2622e6cca7eb   8 days ago    136 MB
docker.io/library/alpine   latest   a24bb4013296   2 weeks ago   5.85 MB

让我们现在运行我们的Alpine 图像,看看它是否响应了恩典。

podman run -it --rm alpine /bin/sh
/# apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
v3.12.0-74-gb8f92cf12a [http://dl-cdn.alpinelinux.org/alpine/v3.12/main]
v3.12.0-76-ge6ea27f814 [http://dl-cdn.alpinelinux.org/alpine/v3.12/community]
OK: 12734 distinct packages available
/#

这很漂亮。
我们可以打开另一个终端/实例并检查我们的容器是否正在运行。

podman ps
CONTAINER ID  IMAGE                            COMMAND  CREATED        STATUS            PORTS  NAMES
d47342edeb3c  docker.io/library/alpine:latest  /bin/sh  2 minutes ago  Up 2 minutes ago         festive_shtern