创建 devcontainer 时如何获取 ARM Docker 图像是 VS 代码? (mac m1)
How to get ARM Docker images when creating devcontainer is VS Code? (mac m1)
购买新的 mac M1 后,我决定重新安装现有的 vscode devcontainer,使用 Clone Repository in container Volume 功能。
它有点工作,但后来,我立即注意到它非常慢,有问题,并且使用了 QEMU。
在 Docker M1 official Page 上阅读此文后:
However, attempts to run Intel-based containers on Apple M1 machines can crash as QEMU sometimes fails to run the container. Therefore, we recommend that you run ARM64 containers on M1 machines. These containers are also faster and use less memory than Intel-based containers.
我知道我是 运行 Intel 图像在仿真中,我不应该那样做。
为了构建这些容器,我从 MCR (here) 中挑选了镜像。
在所有这些上,我注意到一个“x86-64”标签,没有提到 ARM。这是否意味着 Microsoft 实际上没有提供官方 ARM 映像?
如果是这样,我应该怎么做才能使用 ARM 映像拥有干净的开发容器?我应该等待 MCR 更新吗?或者我应该选择其他图像,而不是 Microsoft 的图像?
我错过了什么吗?
我正在使用:
- VS 代码 1.54.1
- Docker 桌面预览版 3.1.0 (60984)
- Mac OS BigSur 11.2.1
如果您需要特定的 MCR 容器,您将需要等待它们可用于 arm64。
但是,如果您不需要特定图像,您有足够数量的 Docker 为 arm64 构建的图像,可以在 Docker HUB 中找到。您可以搜索arm64v8
或搜索图片并检查arm64
标签是否显示
在这两种情况下,您都可以尝试为 linux/arm64
平台架构提取任何图像,如下所示:
docker pull --platform linux/arm64 image
最后一个选项是让你建立自己的形象。这可能很耗时,因为您可能需要将一些库移植到 arm64v8。
关注 jordanvrtanoski 的回答,
我决定使用原生兼容 arm64 的官方 Docker 图像。
在此期间,我意识到 MCR 图像没有什么疯狂或无法复制的。他们提供用于图像的基本模板 here
因为我在我的容器中使用 root 用户,并且不需要很多额外的二进制文件,所以我从这些 MCR 图像中唯一选择的是 bashrc 文件的自定义,以获得自定义提示,ls
命令和别名。
一切都按预期工作,而且更清晰,因为我的 Docker 文件的每一行现在都是已知的,并且对我有用。
更新,现在有很多可供选择:
https://github.com/microsoft/vscode-dev-containers/issues/558#issuecomment-910369599
这不会过时,但我不想 post 什么都没有的答案。截至 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
购买新的 mac M1 后,我决定重新安装现有的 vscode devcontainer,使用 Clone Repository in container Volume 功能。
它有点工作,但后来,我立即注意到它非常慢,有问题,并且使用了 QEMU。
在 Docker M1 official Page 上阅读此文后:
However, attempts to run Intel-based containers on Apple M1 machines can crash as QEMU sometimes fails to run the container. Therefore, we recommend that you run ARM64 containers on M1 machines. These containers are also faster and use less memory than Intel-based containers.
我知道我是 运行 Intel 图像在仿真中,我不应该那样做。
为了构建这些容器,我从 MCR (here) 中挑选了镜像。 在所有这些上,我注意到一个“x86-64”标签,没有提到 ARM。这是否意味着 Microsoft 实际上没有提供官方 ARM 映像?
如果是这样,我应该怎么做才能使用 ARM 映像拥有干净的开发容器?我应该等待 MCR 更新吗?或者我应该选择其他图像,而不是 Microsoft 的图像? 我错过了什么吗?
我正在使用:
- VS 代码 1.54.1
- Docker 桌面预览版 3.1.0 (60984)
- Mac OS BigSur 11.2.1
如果您需要特定的 MCR 容器,您将需要等待它们可用于 arm64。
但是,如果您不需要特定图像,您有足够数量的 Docker 为 arm64 构建的图像,可以在 Docker HUB 中找到。您可以搜索arm64v8
或搜索图片并检查arm64
标签是否显示
在这两种情况下,您都可以尝试为 linux/arm64
平台架构提取任何图像,如下所示:
docker pull --platform linux/arm64 image
最后一个选项是让你建立自己的形象。这可能很耗时,因为您可能需要将一些库移植到 arm64v8。
关注 jordanvrtanoski 的回答,
我决定使用原生兼容 arm64 的官方 Docker 图像。 在此期间,我意识到 MCR 图像没有什么疯狂或无法复制的。他们提供用于图像的基本模板 here
因为我在我的容器中使用 root 用户,并且不需要很多额外的二进制文件,所以我从这些 MCR 图像中唯一选择的是 bashrc 文件的自定义,以获得自定义提示,ls
命令和别名。
一切都按预期工作,而且更清晰,因为我的 Docker 文件的每一行现在都是已知的,并且对我有用。
更新,现在有很多可供选择: https://github.com/microsoft/vscode-dev-containers/issues/558#issuecomment-910369599
这不会过时,但我不想 post 什么都没有的答案。截至 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