定制容器工具扩展
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对象 (平台被隐式设置为Python当Python对象存在
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.yml和docker-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"
}
]
}
选择行为
所选择的命令模板是根据以下规则选择的:
- 如果未配置任何设置,则选择默认命令模板。
- 如果只配置了一个模板(上面的第一个示例),则选择该模板。
- 如果配置了多个模板:
- 受约束的模板会被检查。一个受约束的模板有
比赛。比赛正则表达式与上下文提示进行比较——例如,图像名称、容器名称等。 - 如果多个受限模板适用,系统将提示用户进行选择。如果只有一个适用,系统将不会提示用户。
- 如果没有适用的受限模板,则检查无约束模板。无约束模板没有
比赛,因此始终适用。 - 如果有多个无约束模板适用,系统将提示用户进行选择。如果只有一个适用,系统将不会提示用户。
- 受约束的模板会被检查。一个受约束的模板有
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 Compose或Docker Compose)。 |
Docker Compose 停止
| 配置设置 | 默认值 |
|---|---|
容器.命令.组合停止 |
${composeCommand} ${configurationFile} 停止 |
支持的代币:
| 代币 | 描述 |
|---|---|
${配置文件} |
设置为-输入:f加上所选Docker Compose YAML文件的工作区相对路径。 |
${编译命令} |
设置为该值容器.编译命令设置如果设置,否则扩展将尝试自动确定要使用的命令Docker Compose或Docker Compose)。 |
其他支持的代币
除了特定命令支持的标记外,所有命令模板还支持以下标记:
| 代币 | 描述 |
|---|---|
${工作区文件夹} |
所选的工作区文件夹路径。 |
${配置:某些设置标识符} |
任何配置设置的值,只要它是字符串、数字或布尔值。这些设置标识符可以任意定义,不需要属于Visual Studio Code或任何扩展。 |
${env:Name} |
环境变量的值。 |
${命令:命令ID} |
命令的字符串返回值。 |