原文:
towardsdatascience.com/getting-started-with-the-dev-containers-extension-a5ea49abfc34
我完全将我的开发工作流程迁移到 Visual Studio Code (VScode) 的一个主要原因是 Dev Containers 扩展。Dev Containers 扩展提供了 Docker 和容器与 VScode 的原生集成。它减少了设置 docker 化环境以及在使用容器框架时与他人协作的努力。本教程重点介绍如何“入门”使用 Dev Containers 扩展。我们将深入了解在您的开发工作流程中使用 Dev Containers 扩展(和 Docker)的动机。此外,我们还将回顾将 Dev Container 模板 添加到项目并启动它的步骤。
在接下来的教程中,我们将探索扩展的核心功能并审查自定义选项。
作者使用 Midjourney 创建的停靠在港口的货轮
在本教程结束时,您将了解如何:
-
安装 Dev Containers 扩展
-
将 Dev Containers 设置文件添加到项目中
-
在容器化的 VScode 会话中启动项目
动机
您不能不讨论使用 Dev Containers 的主要动机——Docker——就谈论 Dev Containers。
Docker
如果我需要用一个词来描述 Docker,那将是可重复性。
Docker 是一种 CI/CD 工具,它使代码能够在不同环境之间无缝部署(例如,从开发到生产等)。通过创建操作系统级别的虚拟化,应用程序及其依赖项可以打包到虚拟容器中,并在不同环境之间传输。在您的开发环境中使用 Docker 的主要优势包括:
-
可重复性 – Docker 使您能够无缝地将代码及其依赖项打包到单个容器中,并在此容器中开发代码、测试它、与他人分享,并以高度一致的方式部署它
-
协作 – 当一个开发团队共同在一个特定项目上工作时,Docker 解决了依赖混乱的问题。拥有统一的环境在开发步骤中节省了大量时间。例如,如果一个开发者遇到了一些错误,其他开发者很容易重现这个错误并帮助调试它
-
部署 – Docker 简化了从开发环境到生产环境的代码交付
虽然 Docker 的学习曲线较高,但它具有长期的好处,因为它简化了代码开发和部署过程。
VScode 和 Dev Containers 扩展
VScode 是由微软开发的一款通用免费代码编辑器。它可以在 Windows、macOS 和 Linux 操作系统上本地运行,也可以在云环境中运行。使用 VScode 作为您的 IDE 的主要优势包括:
-
多语言支持 – VScode 默认支持 JavaScript、TypeScript 和 Node.js,并拥有各种扩展,可以运行其他编程语言,如 Python、C++、C#、Go 等。
-
扩展 – VScode 拥有一个庞大的社区支持,他们构建并维护了各种扩展,这些扩展扩展了编辑器的功能和性能。这包括支持编程语言的扩展(例如 Python、R 和 Julia),以及允许连接到外部应用程序的插件(如 Docker、Postgres 等)以及其他应用程序
-
Git 集成 – VScode 内置了与 Git 的集成
-
Docker 集成 – VScode 支持在容器内进行开发
Dev Containers 扩展提供了容器与 VScode 的原生集成。它简化了设置 docker 化环境的流程,并使用户能够完全隔离开发环境与默认的 VScode 设置。
一般架构
当使用 Dev Containers 启动会话时,它将在容器内启动一个新的 VScode 会话,其中:
-
devcontainer.json文件定义了 VScode 环境设置。这包括容器详情、要安装的扩展列表、VScode 自定义设置等。 -
容器化的 VScode 会话与常规 VScode 设置完全隔离。
settings.json允许您修改已安装扩展的默认设置 -
默认情况下,Dev Containers 扩展将本地文件夹挂载到容器化会话中。
-
您可以使用
devcontainer.json文件挂载额外的文件夹
将主文件夹挂载到容器中是一个很棒的功能,它允许您在容器内编写和执行代码,同时将其保存在本地。
在接下来的教程中,我们将深入了解使用
devcontainer.json文件的不同自定义选项的更多细节,例如挂载额外的卷、设置扩展等。
下面的图示展示了扩展的一般架构。蓝色矩形代表常规的 VScode 会话。一旦我们使用扩展启动会话,它将使用 devcontainer.json 和 settings.json 来设置容器化的 VScode 会话,并将本地文件夹挂载到容器中(黄色矩形)。
Dev Containers 扩展的一般架构(来源:Rami Krispin)
新的会话(黄色矩形)的设置与主 VScode 设置(蓝色矩形)完全隔离,并且是可重复的。
先决条件
在开始之前,让我们回顾一下遵循本教程的一般要求。要设置 Dev Containers 扩展,您需要以下内容:
-
VScode
-
Docker Desktop
-
Docker Hub
如果你的机器上已经设置了这些要求,你可以跳到下一节。
如果你使用的是 macOS 或 Windows 操作系统,则需要 Docker Desktop,因为它提供了一个虚拟化层来运行 Docker 引擎。要安装 Docker Desktop,请访问 Docker 网站,并按照安装说明进行操作(见下面的截图)。
Docker Desktop 安装页面(作者截图)
Linux 操作系统可以原生运行 Docker 引擎,不需要 Docker Desktop。要在 Linux 操作系统上设置 Docker 引擎,请按照此 链接 上的说明进行操作。
VScode 是一个微软开源的集成开发环境(IDE)。要安装 VScode,请访问 VScode 网站,并按照安装说明进行操作(见下面的截图)。
VScode 安装页面(作者截图)
最后但同样重要的是,你需要设置一个 Docker Hub 账户,并从 CLI 登录。Docker Hub 是一个容器注册库,其功能与 GitHub 对于代码类似,用于存储和共享镜像。虽然还有其他容器注册库(大多数是企业级),但最常见的是 Docker Hub,它有一个免费版本。在整个教程中,我们将使用 Docker Hub 来拉取不同的镜像,并使用 Dev Container 扩展设置容器化环境。要注册并创建一个免费账户,请访问 Docker Hub 网站 并按照注册说明进行操作。
Docker Hub 页面(作者截图)
在安装 Docker Desktop 并在 Docker Hub 上设置账户后,打开 Docker Desktop 以启动 Docker 引擎,并在命令行中登录到 Docker Hub:
docker login
你将需要输入用户名和密码,如果登录成功,你应该会看到以下输出:
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: rkrispin
Password:
Login Succeeded
Logging in with your password grants your terminal complete access to your account.
For better security, log in with a limited-privilege personal access token. Learn more at https://docs.docker.com/go/access-tokens/
注意:Docker Hub 完全公开(对于免费层)。你推送到并存储在那里的任何镜像都将对所有其他用户可用。无论你的容器注册库是否公开,永远不要在 Docker 镜像上存储凭证、密码或其他敏感信息。
一旦我们安装了 Docker Desktop 和引擎,并登录到 Docker Hub,我们就可以启动 VScode 并开始设置 Dev Containers 扩展。
安装 Dev Containers 扩展
在 VScode 中安装 Dev Containers 非常简单。打开 VScode 扩展菜单(如下面的截图中用紫色标记),在搜索栏中搜索 Dev Containers。它应该作为第一个选项弹出(如下面的截图中用黄色标记)。打开扩展并点击安装按钮(如下面的截图中用绿色标记)。
安装开发容器扩展(作者截图)
一旦安装了扩展,点击左下角的打开远程窗口按钮时,应该会出现以下菜单(如上图以浅蓝色标记):
开发容器菜单(作者截图)
设置开发容器项目
向项目中添加开发容器设置主要有三种方法:
-
将具有环境设置的
devcontainer.json文件添加到项目中。该文件应放置在.devcontainer文件夹下 -
使用开发容器模板添加内置的
devcontainer.json并根据需要修改它 -
创建一个具有自定义设置的 GitHub 模板
在本教程中,我们将了解如何使用开发容器模板设置和启动容器化环境。在下一教程中,我们将深入了解devcontainer.json文件的功能,并了解如何自定义容器设置。最后但同样重要的是,如果您有具有相似环境设置的重叠项目,您应该考虑创建一个 GitHub 模板。例如,我创建了Python和 R 模板,这显著减少了设置新项目所需的时间。您可以在本文章中了解更多有关设置 GitHub 模板的信息。
Hello World!
我们将以以下**“Hello World!”**示例结束本教程 – 按照以下步骤将扩展设置文件添加到项目中使用模板:
-
使用打开文件夹…选项(位于文件菜单下)在 VScode 中打开项目文件夹
-
点击左下角的打开远程窗口按钮以打开扩展菜单并选择打开容器配置文件选项
- 由于我们想要将配置文件添加到项目中,请选择第二个选项 – 将配置添加到工作区
- 接下来,您将有一个容器模板列表可供选择,包括不同的 Linux 版本(例如,Ubuntu、Alpine 等)、具有编程语言设置的容器(例如,Python、Node.js、Java 等)、数据库(例如,Postgres 等)以及其他。完整的模板列表可在这里找到
- 让我们使用Jimmy版本选择Ubuntu模板
- 以下菜单允许您添加额外的功能,例如 CLI 工具、语言支持工具等。我们将跳过它,并点击右上角的“确定”按钮以完成过程。
这会将以下两个文件夹添加到项目文件夹中:
.
├── .devcontainer
│ └── devcontainer.json
└── .github
└── dependabot.yml
这包括以下 devcontainer.json 文件:
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
{
"name": "Ubuntu",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/base:jammy"
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "uname -a",
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
这包括两个参数:
-
name- 设置项目名称 -
image– 定义镜像详情,在这种情况下,指向 Microsoft Ubuntu 镜像 (mcr.microsoft.com/devcontainers/base:jammy)
最后但同样重要的是,要打开容器内的文件夹,请返回到 Dev Containers 菜单并选择“在容器中重新打开”选项:
这将在容器内打开文件夹 - 在这种情况下,我们上面选择的 Ubuntu 镜像。
摘要
本篇帖子回顾了 Dev Containers 扩展的核心功能以及设置它的一般要求。此外,我们看到了如何使用模板将 Dev Containers 设置文件添加到项目中。这只是 Dev Containers 扩展功能的冰山一角。在接下来的帖子中,我们将深入研究 devcontainer.json 文件的核心功能,并了解我们如何自定义容器和环境设置。这包括使用 Dockerfile、设置环境变量,以及使用 Docker Compose 启动多个容器。
资源
-
Dev Containers 文档:
code.visualstudio.com/docs/devcontainers/containers -
Dev Container 模板:
containers.dev/templates -
设置 GitHub 模板:
medium.com/@rami.krispin/setting-a-dockerized-python-development-environment-template-de2400c4812b
更多内容可在我的*数据科学频道*中找到。
2万+

被折叠的 条评论
为什么被折叠?



