1

购买新的 mac M1 后,我决定使用容器卷中的克隆存储库功能重新安装现有的 vscode 开发容器。

它有点工作,但随后,我立即注意到它非常慢,有问题,并且使用了 QEMU。

Docker M1 官方页面上阅读此内容后:

但是,尝试在 Apple M1 机器上运行基于 Intel 的容器可能会崩溃,因为 QEMU 有时无法运行容器。因此,我们建议您在 M1 机器上运行 ARM64 容器。与基于 Intel 的容器相比,这些容器也更快且使用更少的内存。

我知道我在仿真下运行英特尔映像,我不应该那样做。

为了构建这些容器,我从 MCR(这里)中挑选了图像。在所有这些上,我注意到一个“x86-64”标签,没有提到 ARM。这是否意味着微软实际上没有提供官方的 ARM 映像?

如果是这样,我应该如何使用 ARM 映像拥有干净的开发容器?我应该等待 MCR 更新吗?或者我应该选择其他图像,而不是微软的图像?我错过了什么吗?


我在用着:

  • VS 代码 1.54.1
  • Docker 桌面预览版 3.1.0 (60984)
  • Mac OS BigSur 11.2.1
4

3 回答 3

2

如果您需要特定的 MCR 容器,则需要等待它们可用于 arm64。

但是,如果您不需要特定的镜像,您有大量为 arm64 构建的 Docker 镜像,可以在 Docker HUB 中找到。您可以搜索arm64v8或搜索图像并检查arm64标签是否显示

在这两种情况下,您都可以尝试为linux/arm64平台架构拉取任何图像,如下所示:

docker pull --platform linux/arm64 image

最后的选择是让你建立自己的形象。这可能会很耗时,因为您可能需要将一些库移植到 arm64v8。

于 2021-03-05T15:15:34.477 回答
2

更新,现在有很多可供选择: https ://github.com/microsoft/vscode-dev-containers/issues/558#issuecomment-910369599

这不会很好,但我不想一无所有地发布答案。截至 21 年 9 月 9 日:

Base images

mcr.microsoft.com/vscode/devcontainers/base:dev-bullseye (Debian 11) - Released in v0.194.2
mcr.microsoft.com/vscode/devcontainers/base:dev-stretch (Debian 9) - Released in v0.194.2
mcr.microsoft.com/vscode/devcontainers/base:dev-hirsute (Ubuntu 21.04) - Released in v0.194.2
mcr.microsoft.com/vscode/devcontainers/base:dev-bionic (Ubuntu 18.04) - Released in v0.194.2
Node

mcr.microsoft.com/vscode/devcontainers/javascript-node:dev-16-bullseye - Released in v0.194.2
mcr.microsoft.com/vscode/devcontainers/javascript-node:dev-14-bullseye - Released in v0.194.2
mcr.microsoft.com/vscode/devcontainers/javascript-node:dev-12-bullseye - Released in v0.194.2
mcr.microsoft.com/vscode/devcontainers/typescript-node:dev-16-bullseye - Released in v0.194.2
mcr.microsoft.com/vscode/devcontainers/typescript-node:dev-14-bullseye - Released in v0.194.2
mcr.microsoft.com/vscode/devcontainers/typescript-node:dev-12-bullseye - Released in v0.194.2
Python

mcr.microsoft.com/vscode/devcontainers/python:dev-3-bullseye
mcr.microsoft.com/vscode/devcontainers/python:dev-3.9-bullseye
mcr.microsoft.com/vscode/devcontainers/python:dev-3.8-bullseye
mcr.microsoft.com/vscode/devcontainers/python:dev-3.7-bullseye
mcr.microsoft.com/vscode/devcontainers/python:dev-3.6-bullseye
PHP

mcr.microsoft.com/vscode/devcontainers/php:dev-8-bullseye
mcr.microsoft.com/vscode/devcontainers/php:dev-8.0-bullseye
mcr.microsoft.com/vscode/devcontainers/php:dev-7-bullseye
mcr.microsoft.com/vscode/devcontainers/php:dev-7.4-bullseye
mcr.microsoft.com/vscode/devcontainers/php:dev-7.3-bullseye
Go

mcr.microsoft.com/vscode/devcontainers/go:dev-1-bullseye
mcr.microsoft.com/vscode/devcontainers/go:dev-1.17-bullseye
mcr.microsoft.com/vscode/devcontainers/go:dev-1.16-bullseye
Ruby

mcr.microsoft.com/vscode/devcontainers/go:dev-1-bullseye
mcr.microsoft.com/vscode/devcontainers/go:dev-1.17-bullseye
mcr.microsoft.com/vscode/devcontainers/go:dev-1.16-bullseye
Ruby, Jekyll

mcr.microsoft.com/vscode/devcontainers/ruby:dev-3.0-bullseye
mcr.microsoft.com/vscode/devcontainers/ruby:dev-2.7-bullseye
mcr.microsoft.com/vscode/devcontainers/ruby:dev-2.6-bullseye
mcr.microsoft.com/vscode/devcontainers/jekyll:dev-bullseye
于 2021-09-09T19:59:04.570 回答
1

在 jordanvrtanoski 回答之后,

我决定使用与 arm64 原生兼容的官方 Docker 镜像。在这期间,我意识到 MCR 图像没有任何疯狂或不可能重现的东西。他们在此处提供用于图像的基本模板

由于我在容器中使用 root 用户,并且不需要很多额外的二进制文件,因此我从这些 MCR 映像中选择的唯一内容是 bashrc 文件的自定义,以具有自定义提示、lscmd 上的颜色和别名。

一切都按预期工作,而且更干净,因为我的 Dockerfile 的每一行现在都是已知的,并且对我有用。

于 2021-03-16T08:31:04.560 回答