步骤 #3:使用 Dockerfile 创建 VS Code 容器
现在我们已经验证了我们已通过 NGC 身份验证,我们可以使用 Dockerfile 构建一个可重用的容器镜像,其中包含 VS Code 和一些有用的扩展。
要创建 Dockerfile,请使用文本编辑器在本地目录中打开一个名为 “Dockerfile” 的新文件(确保使用大写 “D” 且没有扩展名)。有关 Dockerfile 语法和用法的更多信息,请参考 Docker 的官方文档。
首先,我们需要指定将要使用的基础镜像。我们将使用最新的 PyTorch 容器作为我们的基础容器。也可以使用其他容器,方法是从 NGC 使用适当的基础镜像来利用不同的框架。
FROM nvcr.io/nvidia/pytorch:22.10-py3
接下来,我们将使用 “RUN” 指令下载特定版本的 VS Code Server,安装软件包,并删除软件包,以使镜像大小保持最小。
RUN wget https://github.com/coder/code-server/releases/download/v4.8.3/code-server_4.8.3_amd64.deb && \
dpkg -i code-server_4.8.3_amd64.deb && \
rm -f code-server_4.8.3_amd64.deb
接下来,我们将添加一对 “RUN” 指令来安装 ms-python 扩展和 cpptools-linux 扩展,并清理任何下载的文件。
RUN code-server --install-extension ms-python.python
RUN wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.9.8/cpptools-linux.vsix && \
code-server --install-extension cpptools-linux.vsix && \
rm -f cpptools-linux.vsix
最后,通过 Web 浏览器导航到 Visual Studio Marketplace(位于您的开发环境本地),然后在此处下载 NSight 插件的 VS Code 版本。
对于此处记录的示例,我们使用了 2022.2.31663688 版本。导航到版本历史记录选项卡,然后单击该版本上的下载。

下载完成后,将软件包复制到与正在编辑的 Dockerfile 相同的目录。我们将添加 “COPY” 指令以将本地文件放入容器镜像中,并添加 “RUN” 指令以安装它,并在安装完成后删除软件包。
COPY NVIDIA.nsight-vscode-edition-2022.2.31663688.vsix NVIDIA.nsight-vscode-edition.vsix
RUN code-server --install-extension NVIDIA.nsight-vscode-edition.vsix && \
rm -f NVIDIA.nsight-vscode-edition.vsix
Dockerfile 的完整内容记录在下面。
FROM nvcr.io/nvidia/pytorch:22.10-py3
RUN wget https://github.com/coder/code-server/releases/download/v4.8.3/code-server_4.8.3_amd64.deb && \
dpkg -i code-server_4.8.3_amd64.deb && \
rm -f code-server_4.8.3_amd64.deb
RUN code-server --install-extension ms-python.python
RUN wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.9.8/cpptools-linux.vsix && \
code-server --install-extension cpptools-linux.vsix && \
rm -f cpptools-linux.vsix
COPY NVIDIA.nsight-vscode-edition-2022.2.31663688.vsix NVIDIA.nsight-vscode-edition.vsix
RUN code-server --install-extension NVIDIA.nsight-vscode-edition.vsix && \
rm -f NVIDIA.nsight-vscode-edition.vsix
现在我们的 Dockerfile 已完成,我们可以构建镜像,这将执行我们在文件中指定的步骤,并将镜像的副本保存到您的本地工作站。为此,运行以下命令,该命令将构建一个名为 “nvcr.io/lp-org-name/lp-team-name/vscode-server” 且标签为 “1.0” 的新镜像。完整的镜像名称在 “-t” 标志后指定,是第一个冒号之前的所有内容,标签是第一个冒号之后指定的所有内容。请注意,您的组织和团队名称(在本例中分别为 lp-org-name 和 lp-team-name)可能有所不同,应更新以反映从您的帐户访问的提供的组织和团队。否则,您可以随意更改镜像名称(在本例中为 “vscode-server”)和标签(不要忘记命令末尾的 “.”)。
docker build -t nvcr.io/lp-org-name/lp-team-name/vscode-server:1.0 .
如果您使用了与上面显示的 Dockerfile 相同的 Dockerfile,则将生成类似于以下内容的文本
[+] Building 74.5s (11/11) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 729B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for nvcr.io/nvidia/pytorch:22.10-py3 0.5s
=> CACHED [1/6] FROM nvcr.io/nvidia/pytorch:22.10-py3@sha256:7ad18fc3d2b9cdc35f9e5f0043987e8391fcf592c88177fdd9daa31b3b886be 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 248B 0.0s
=> [2/6] RUN wget https://github.com/coder/code-server/releases/download/v4.8.3/code-server_4.8.3_amd64.deb && dpkg -i 19.2s
=> [3/6] RUN code-server --install-extension ms-python.python 34.7s
=> [4/6] RUN wget https://github.com/microsoft/vscode-cpptools/releases/download/v1.9.8/cpptools-linux.vsix && code-ser 15.3s
=> [5/6] COPY NVIDIA.nsight-vscode-edition-2022.2.31663688.vsix NVIDIA.nsight-vscode-edition.vsix 0.0s
=> [6/6] RUN code-server --install-extension NVIDIA.nsight-vscode-edition.vsix && rm -f NVIDIA.nsight-vscode-edition.vsi 2.5s
=> exporting to image 2.2s
=> => exporting layers 2.1s
=> => writing image sha256:ef6c4eb75d04c292d2b27bc9cac93222c8c574df6db21b1c14a1d98293951ce5 0.0s
=> => naming to nvcr.io/lp-org-name/lp-team-name/vscode-server:1.0 0.0s
要验证镜像是否与预期的存储库和标签关联,请运行 docker image list,并查看输出的顶部行,列标签下方
REPOSITORY TAG IMAGE ID CREATED SIZE
nvcr.io/lp-org-name/lp-team-name/vscode-server 1.0 ef6c4eb75d04 2 minutes ago 17.7GB
现在我们已经在本地构建了所需的 VS Code Server 镜像,我们可以将其推送到 NGC,以便我们可以在其他机器上使用它并与队友协作。假设您已按照之前的步骤在本地登录 NGC,请运行以下命令,并根据需要更新镜像名称和标签
docker push nvcr.io/lp-org-name/lp-team-name/vscode-server:1.0
在推送镜像时,您将看到类似于以下的输出
The push refers to repository [nvcr.io/lp-org-name/lp-team-name/vscode-server]
5956863a580b: Pushed
ad459ea18ba1: Pushed
f733cb88d938: Pushed
3cfe55382f56: Pushed
588a40280de9: Pushed
...
1.0: digest: sha256:8cda8cd5a1b1d7f632027860f977cd35967793c66b1b950b16d1f51af0090894 size: 11699
镜像完全推送后,它应该可以在 NGC 上用于 Base Command,并允许镜像在不同的系统上本地拉取。