本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

定制容器工具扩展

Container Tools 扩展包括几个 Visual Studio Code 任务来控制 Docker 的行为构建运行,并为调试提供容器启动的基础。

这些任务允许进行大量的控制和自定义。最终配置是默认设置、特定平台的默认设置(如 Node.js、Python 或 .NET)和用户输入的组合。当用户输入与默认设置冲突时,用户输入优先。

Visual Studio Code 任务的所有常见功能(例如,将任务分组到复合任务中)都由 Container Tools 扩展任务支持。有关常见任务功能和属性的详细信息,请参阅 Visual Studio Code 自定义任务 文档。

Docker 构建任务

Docker 构建任务使用Docker命令行(CLI)构建镜像。该任务可以单独使用,或者作为链式任务的一部分,在容器内运行和/或调试应用程序。

最重要的配置设置Docker 构建任务是docker构建平台输入:

  • docker构建对象指定Docker build命令的参数。此对象指定的值将直接应用于Docker build命令行界面调用。
  • 平台属性是一个提示,改变了Docker 构建任务确定Docker构建默认设置。

参见属性参考以获取所有任务属性的完整列表。

平台支持

虽然Docker 构建任务在任务.json可以用来构建任何镜像,该扩展明确支持(并简化了配置)Node.js、Python 和 .NET Core。

Node.js (docker建)

使用默认设置的最小配置

一个基于Node.js的镜像,没有特定的平台选项,可以直接设置平台属性到节点输入:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "构建节点镜像",
      "type": "docker建镜像",
      "平台": "节点"
    }
  ]
}

平台默认设置

对于基于Node.js的镜像,Docker 构建任务推断出以下选项:

财产 推断值
dockerBuild.上下文 在相同的目录中package.json居住。
dockerBuild.dockerfile 文件Dockerfile在与之相同的目录中package.json居住。
dockerBuild.tag 应用程序的名字物业在package.json(如果定义),否则为该文件夹的文件名package.json居住。
dockerBuild.拉取 默认为 true,以便在构建之前拉取新的基础镜像。

Python (docker建)

使用默认设置的最小配置

一个基于Python的图像,没有特定的平台选项,只需设置平台属性到Python输入:

{
  "tasks": [
    {
      "type": "docker建镜像",
      "标签": "docker建镜像",
      "平台": "python"
    }
  ]
}

平台默认设置

对于基于Python的图像,Docker 构建任务推断出以下选项:

财产 推断值
dockerBuild.上下文 默认上下文是工作区文件夹。
dockerBuild.dockerfile 默认Dockerfile路径将位于工作区文件夹的根目录。
dockerBuild.tag 根工作区文件夹的基名称。
dockerBuild.拉取 默认为 true,以便在构建之前拉取新的基础镜像。

.NET (docker建)

使用默认设置的最小配置

当您构建一个基于 .NET 的镜像时,您可以省略平台属性并仅设置网核对象 (平台被隐式设置为网核网核对象存在)。请注意应用程序项目是一个必需的属性:

{
  "版本": "2.0.0",
  "任务": [
    {
      "标签": "构建节点图像",
      "类型": "docker建镜像",
      "netCore": {
        "应用程序项目": "${workspaceFolder}/project.csproj"
      }
    }
  ]
}

平台默认设置

对于基于 .NET 的图像,Docker 构建任务推断出以下选项:

财产 推断值
dockerBuild.上下文 根工作区文件夹。
dockerBuild.dockerfile 文件Dockerfile在根工作区文件夹中。
dockerBuild.tag 根工作区文件夹的基名称。
dockerBuild.拉取 默认为 true,以便在构建之前拉取新的基础镜像。

构建任务参考

以下是所有可用的配置属性Docker 构建任务。所有属性都是可选的,除非另有说明。

财产 描述
docker构建 选项用于控制docker 构建 命令已执行 (见下文)。
除非 平台已设置。
平台 确定平台:.NET (网核) 或 Node.js (节点) 和默认设置docker 构建命令。
节点 确定特定于Node.js项目的选项 (见下文)。
Python 没有为Python定义对象属性Docker 构建任务。
网核 确定特定于 .NET 项目的选项 (见下文)。

dockerBuild 对象属性

财产 描述 docker 构建CLI 等效命令
上下文 构建上下文的路径。
除非从平台推断出,否则是必需的。
路径
Dockerfile Dockerfile 的路径。
必需,除非从平台推断出来。
-输入:f--文件
Tab 应用于图像的标签。
必填,除非从平台推断出。
输入:-t--标签
构建参数 构建应用于命令行的参数。这是一个键值对列表。 --构建参数
Tab 图像上添加的标签。这是一个键值对列表(JSON 对象)。
除了这里指定的标签外,还有一个标签 微软创建者,设置为视觉工作室代码添加到图像。此行为可以通过设置关闭。包含默认值属性Tab对象 false。
--标签
目标 Dockerfile中用于构建的目标。 --目标
是否在构建之前拉取新的基础镜像。 --拉取
自定义选项 在 context 参数之前添加的任何额外参数。不会尝试解决与其他选项的冲突或验证此选项。 (任何)

节点对象属性 (Docker 构建任务)

财产 描述 默认
包裹 通往package.json文件与Dockerfile相关联并且Docker 构建任务。 文件package.json在根工作区文件夹中。

netCore 对象属性 (Docker 构建任务)

财产 描述
应用程序项目 .NET 项目文件 (.csproj.fsproj,与Dockerfile相关的等)和Docker 构建 任务。
始终需要。

Docker 运行任务

docker运行任务在任务.json使用Docker命令行(CLI)创建并启动一个容器。该任务可以单独使用,或者作为调试容器内应用程序的任务链的一部分。

最重要的配置设置docker运行任务是docker运行平台输入:

  • docker运行对象指定Docker run命令的参数。此对象指定的值将直接应用于Docker run命令行界面调用。
  • 平台属性是一个提示,改变了docker运行任务确定Docker运行默认设置。

参见属性参考以获取所有任务属性的完整列表。

Docker运行平台支持

虽然docker运行任务可以用来运行任何Docker镜像,该扩展明确支持(并简化了配置)Node.js、Python和.NET。

Node.js (docker-run)

使用默认设置的最小配置

一个基于Node.js的镜像,没有特定的平台选项,可以直接设置平台属性到节点输入:.

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "运行节点镜像",
      "node": "docker-run",
      "platform": "node"
    }
  ]
}

平台默认设置

对于基于Node.js的镜像,docker运行任务推断出以下选项:

财产 推断值
dockerRun.command 生成自npm开始脚本在package.json(如果存在),否则从生成主要物业在package.json输入:.
dockerRun.容器名称 源自应用包名。
dockerRun.镜像 来自依赖项的标签Docker 构建任务(如果存在)或从应用包名派生,自身从名字物业内package.json或其所在的文件夹的基名。

Python (docker-run)

在构建基于Python的镜像时,你可以省略平台属性并仅设置Python对象 (平台被隐式设置为PythonPython对象存在

Django 应用的最小配置

{
  "type": "docker-run",
  "label": "docker-run: debug",
  "dependsOn": ["docker-build"],
  "python": {
    "args": ["runserver", "0.0.0.0:8000", "--nothreading", "--noreload"],
    "file": "path_to/manage.py"
  }
}

Flask 应用程序的最小配置

{
  "type": "docker-run",
  "label": "docker-run: debug",
  "dependsOn": ["docker-build"],
  "dockerRun": {
    "env": {
      "FLASK_APP": "path_to/flask_entry_point.py"
    }
  },
  "python": {
    "args": ["run", "--no-debugger", "--no-reload", "--host", "0.0.0.0", "--port", "5000"],
    "module": "flask"
  }
}

通用应用程序的最低配置

{
  "type": "docker-run",
  "label": "docker-run: debug",
  "dependsOn": ["docker-build"],
  "python": {
    "file": "path_to/app_entry_point.py"
  }
}

平台默认设置

对于基于Python的图像,docker运行任务推断出以下选项:

财产 推断值
dockerRun.command 由Python对象生成,并由Python调试器调用。
dockerRun.容器名称 从根工作区文件夹的基本名称派生。
dockerRun.镜像 来自依赖的docker建模范例(如果存在)或从根工作区文件夹的基名称派生的标签。

.NET (docker-run)

使用默认设置的最小配置

构建基于 .NET 的镜像时,您可以省略平台属性并仅设置网核对象 (平台被隐式设置为网核网核对象存在)。请注意应用程序项目是一个必需的属性:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "运行 .NET Core 图像",
      "type": "docker-run",
      "netCore": {
        "appProject": "${workspaceFolder}/project.csproj"
      }
    }
  ]
}

平台默认设置

对于基于 .NET 的图像,docker运行任务推断出以下选项:

财产 推断值
dockerRun.容器名称 从根工作区文件夹的基本名称派生。
dockerRun.env 根据需要添加以下环境变量:ASPNETCORE_环境ASPNETCORE_URLS,和DOTNET 使用轮询文件监视器输入:.
dockerRun.镜像 来自依赖项的标签Docker 构建任务(如果存在)或从根工作区文件夹的基名称派生。
dockerRun.os Linux
dockerRun.volumes 根据需要添加以下卷:本地应用文件夹、源文件夹、调试器文件夹、NuGet 包文件夹和 NuGet 备份文件夹。

运行任务参考

以下是所有可用的配置属性docker运行任务。所有属性都是可选的,除非另有说明。

财产 描述
docker运行 选项用于控制docker 运行 命令已执行 (见下文)。
除非 平台已设置。
平台 确定平台:.NET (网核) 或 Node.js (节点) 和默认设置docker 运行命令。
节点 对于 Node.js 项目,这控制各种选项(见下文)。
Python 对于Python项目,这控制了各种选项(见下文)。
网核 对于 .NET 项目,此选项控制各种选项(见下文)。

dockerRun 对象属性

财产 描述 CLI 等效命令
图像 要运行的镜像名称(标签)。
除非从平台推断出,否则是必需的。
图像
命令 启动容器时要运行的命令。
除非从平台推断出,否则是必需的。
命令 [参数...]
容器名称 给启动的容器指定的名称。
除非从平台推断出,否则是必需的。
--名称
环境 容器中设置的环境变量。这是一个键值对列表。 - e--环境
环境文件 这是一个列表环境变量文件文件。 --环境文件
Tab 分配给已启动容器的标签。这是一个键值对列表。 --标签
网络 将要连接到容器的网络名称。 --网络
网络别名 网络范围内的已启动容器的别名。 --网络别名
操作系统 默认是Linux另一个选择是Windows所使用的容器操作系统。 不适用
港口 容器到主机发布的端口(映射)。这是一个对象列表(见下文)。 - p--发布
ports发布所有 是否发布Docker镜像暴露的所有端口。默认为如果未明确发布端口。 输入:-P
额外主机 添加到容器用于DNS解析的主机。这是一个对象列表(见下文)。 --添加主机
映射到已启动容器的卷。这是一个对象列表(见下文)。 -版本--音量
移除 容器停止后是否移除。 --移除
自定义选项 在图像参数之前添加的任何额外参数。不会尝试解决与其他选项的冲突或验证此选项。 (任何)

端口对象属性

财产 描述 默认
容器端口 容器绑定的端口号。
必需。
主机端口 主机上绑定的端口号。 (由Docker随机选择)
协议 协议用于结合 (传输控制协议用户数据报协议)。 传输控制协议

额外主机对象属性

财产 描述
主机名 用于DNS解析的主机名。
必需。
IP 与上述主机名关联的IP地址。
必填。

卷对象属性

财产 描述 默认
本地路径 本地机器上将要映射的路径。
必填。
容器路径 容器中将映射本地路径的路径。
必需。
权限 容器在映射路径上的权限。可以是(只读) 或输入:rw(读写)。 容器依赖。

节点对象属性 (docker运行任务)

财产 描述 默认
包裹 通往package.json文件与docker运行任务。 文件package.json在根工作区文件夹中。
启用调试 是否在容器内启用调试。
检查模式 定义了应用程序与调试器之间的初始交互默认中断)。
默认 允许应用程序运行,直到附加调试器。
中断防止应用程序运行,直到调试器附加。
默认
检查端口 进行调试的端口。 9229

Python 对象属性 (docker运行任务)

财产 描述 默认
参数 传递给Python应用程序的参数。 依赖于平台。默认的支架显示在上面
调试端口 调试器将监听的端口。 5678
等待 是否等待调试器附加。
模块 要运行的 Python 模块(只能选择模块文件)。
文件 要运行的Python文件(只能选择模块文件)。

netCore 对象属性 (docker运行任务)

财产 描述
应用程序项目 .NET 项目文件 (.csproj.fsproj, 等等与 docker运行 任务。
必需。
配置SSL 是否配置 ASP.NET Core SSL 证书和其他设置以在容器中的服务上启用 SSL。
启用调试 是否启用已启动的容器进行调试。这将推断出调试所需的附加卷映射和其他选项。

Docker Compose 任务

Docker Compose任务在任务.json使用Docker Compose命令行界面(CLI)创建并启动容器。该任务可以单独使用,或者作为调试容器内应用程序的任务链的一部分。

最重要的配置设置为Docker Compose任务是Docker Compose输入:

  • Docker Compose对象指定用于Docker Compose命令的参数。此对象指定的值将直接应用于Docker Compose CLI调用。

参见属性参考以获取所有任务属性的完整列表。

示例配置

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Run docker-compose up",
      "type": "docker-compose",
      "dockerCompose": {
        "up": {
          "detached": true,
          "build": true,
          "services": ["myservice"]
        },
        "files": [
          "${workspaceFolder}/docker-compose.yml",
          "${workspaceFolder}/docker-compose.debug.yml"
        ]
      }
    }
  ]
}

编排任务参考

以下是所有可用的配置属性Docker Compose任务。所有属性都是可选的,除非另有说明。

财产 描述
Docker Compose 选项用于控制Docker Compose 命令已执行 (见下文)。
必需。

dockerCompose 对象属性

财产 描述 CLI 等效命令
向上 运行docker-compose 启动 命令。
这个或者 必须指定其中一个,但不能同时指定两者。
docker-compose 启动
运行docker-compose 停止 命令。
这个或者 向上必须指定其中一个,但不能同时指定两者。
docker-compose 停止
文件 用于的Docker Compose YAML文件列表Docker Compose命令。如果未指定,Docker Compose CLI 会寻找docker-compose.ymldocker-compose.override.yml输入:. -f <文件>
环境文件 环境变量文件被读取并应用于容器。 --env-file
项目名称 在命名和标记Docker对象时使用的备用项目名称。如果在向上编排时使用了备用项目名称,则在向下编排时必须指定相同的项目名称。 --项目名称 <名称>

向上对象属性

财产 描述 CLI 等效命令 默认
分离的 是否以分离模式运行。 输入:-d
构建 是否在运行之前构建。 --构建
刻度 每个服务运行的实例数量。这是一个键值对列表。 --扩展服务=数量
服务 开始使用的服务子集。不能与组合。个人资料输入:. [服务...] (全部)
个人资料 开始使用的配置文件子集。不能与 服务输入:. --配置文件 <配置文件> (全部)
自定义选项 在之后添加的任何额外参数向上参数。不尝试解决与其他选项的冲突或验证此选项。 (任何)

向下对象属性

财产 描述 CLI 等效命令 默认
移除图片 是否删除图片,以及删除哪些图片。全部将移除所有由任何服务使用的图像,本地将仅删除没有自定义标签的图像。不设置此选项将不会删除任何图像。 --rmi
移除卷 是否删除命名卷。 -版本
自定义选项 在之后添加的任何额外参数参数。不尝试解决与其他选项的冲突或验证此选项。 (任何)

命令定制

Container Tools 扩展在执行各种操作时(例如构建镜像、运行容器、附加到容器和查看容器日志)会执行一些 Docker CLI 命令。其中一些命令具有大量可选参数,通常用于非常特定的场景。作为上述 Visual Studio Code 任务的替代方案,当任务不使用时,可以自定义一些命令。

例如,这些代币${服务列表}${profileList}Compose Up 命令允许轻松启动你的Docker Compose YAML文件中的一组服务。

对于这些可定制的Docker命令,有一个配置设置可以设置要执行的模板。或者,您可以定义多个模板,可选地使用正则表达式,当匹配时,提示模板应使用的上下文。模板支持类似于的一些令牌launch.json任务.json例如,${工作区文件夹}输入:.

设置 JSON 模式

您有两个选项来配置每个模板(如下所示)。第一个选项是一个单独的模板,它覆盖了默认行为:

{
  "containers.commands.build": "docker build --rm -f \"${dockerfile}\" -t ${tag} \"${context}\""
}

第二个选项是多个模板,将根据比赛正则表达式以及用户输入。

例如,在以下示例中展示了三个模板:

{
  "containers.commands.build": [
    {
      "label": "Default build command",
      "template": "docker build --rm -f \"${dockerfile}\" -t ${tag} \"${context}\""
    },
    {
      "label": "Alpine-specific build command",
      "template": "docker build -p 1234:1234 -f \"${dockerfile}\" -t ${tag} \"${context}\"",
      "match": "alpine"
    }
  ]
}

选择行为

所选择的命令模板是根据以下规则选择的:

  1. 如果未配置任何设置,则选择默认命令模板。
  2. 如果只配置了一个模板(上面的第一个示例),则选择该模板。
  3. 如果配置了多个模板:
    1. 受约束的模板会被检查。一个受约束的模板有比赛比赛正则表达式与上下文提示进行比较——例如,图像名称、容器名称等。
    2. 如果多个受限模板适用,系统将提示用户进行选择。如果只有一个适用,系统将不会提示用户。
    3. 如果没有适用的受限模板,则检查无约束模板。无约束模板没有比赛,因此始终适用。
    4. 如果有多个无约束模板适用,系统将提示用户进行选择。如果只有一个适用,系统将不会提示用户。

Docker 构建

配置设置 默认值
docker.commands.build ${containerCommand} build --rm -f "${dockerfile}" -t ${tag} "${context}"

支持的代币:

代币 描述
${容器命令} 用于执行容器命令的 CLI 命令/可执行文件。
${dockerfile} 所选内容的相对于工作区的路径Dockerfile输入:.
${tag} 用户在调用构建命令时输入/确认的值。如果之前已经构建过,则默认为之前为此输入的值。Dockerfile输入:.
${上下文} 如果设置,该值为容器.镜像构建上下文路径配置设置。否则,工作区相对的文件夹中Dockerfile居住。

注意:如果容器.命令.构建设置不包含${tag} 代币,用户将被提示输入/确认标签。

注意:该比赛正则表达式将与所选的Dockerfile名称和工作区文件夹名称进行比较。

Docker 运行

配置设置 默认值
容器.命令.运行 ${containerCommand} run --rm -d ${exposedPorts} ${tag}
容器.命令.运行交互式 ${containerCommand} run --rm -it ${exposedPorts} ${tag}

支持的代币:

代币 描述
${容器命令} 用于执行容器命令的 CLI 命令/可执行文件。
${暴露端口} 生成自镜像中列出的暴露端口(最终来自Dockerfile),其中每个暴露的端口映射到本地机器上的相同端口。例如,"EXPOSE 5000 5001"将生成"-p 5000:5000 -p 5001:5001"输入:.
${tag} 所选图像的完整标签。

注意:该比赛正则表达式将与所选图像的完整标签进行比较。

容器附加

配置设置 默认值
容器.命令.附加 ${containerCommand} 执行 -it ${containerId} ${shellCommand}

支持的代币:

代币 描述
${容器命令} 用于执行容器命令的 CLI 命令/可执行文件。
${容器ID} 要附加到的容器的 ID。
${shellCommand} 如果巴什如果容器中存在,则在此处替换,否则输入:sh在 Windows 容器中,命令总是被使用。

注意:该比赛正则表达式将与容器名称和容器镜像的完整标签进行比较。

容器日志

配置设置 默认值
容器.命令.日志 ${containerCommand} 日志 -f ${containerId}

支持的代币:

代币 描述
${容器命令} 用于执行容器命令的 CLI 命令/可执行文件。
${容器ID} 要查看日志的容器ID。

注意:该比赛正则表达式将与容器名称和容器镜像的完整标签进行比较。

Docker Compose 启动

配置设置 默认值
容器.命令.组合启动 ${编译命令} ${配置文件} 启动 ${分离} ${构建}

支持的代币:

代币 描述
${配置文件} 设置为-输入:f加上所选Docker Compose YAML文件的工作区相对路径。
${分离} 设置为输入:-d如果配置设置容器. 组成分离设置为否则,设置为"输入:.
${构建} 设置为--构建如果配置设置容器.编译构建设置为否则,设置为"输入:.
${服务列表} 如果指定,将在运行命令时提示启动一组服务。
${profileList} 如果指定并且Docker Compose YAML文件包含配置文件,则在运行命令时提示选择要启动的配置文件子集。
${编译命令} 设置为该值容器.编译命令设置如果设置,否则扩展将尝试自动确定要使用的命令Docker ComposeDocker Compose)。

Docker Compose 停止

配置设置 默认值
容器.命令.组合停止 ${composeCommand} ${configurationFile} 停止

支持的代币:

代币 描述
${配置文件} 设置为-输入:f加上所选Docker Compose YAML文件的工作区相对路径。
${编译命令} 设置为该值容器.编译命令设置如果设置,否则扩展将尝试自动确定要使用的命令Docker ComposeDocker Compose)。

其他支持的代币

除了特定命令支持的标记外,所有命令模板还支持以下标记:

代币 描述
${工作区文件夹} 所选的工作区文件夹路径。
${配置:某些设置标识符} 任何配置设置的值,只要它是字符串、数字或布尔值。这些设置标识符可以任意定义,不需要属于Visual Studio Code或任何扩展。
${env:Name} 环境变量的值。
${命令:命令ID} 命令的字符串返回值。