自定义容器工具扩展
容器工具扩展包含多个Visual Studio Code任务,用于控制Docker的构建和运行行为,并作为容器启动调试的基础。
这些任务允许玩家高度控制和自定义。最终配置是通用默认、平台特定默认(如Node.js、Python或.NET)和用户输入的组合。当用户输入与默认值冲突时,它会优先考虑。
Visual Studio Code 任务的所有常见功能(例如将任务分组为复合任务)均由容器工具扩展任务支持。有关常见任务功能和属性的更多信息,请参见Visual Studio Code自定义任务文档。
Docker 构建任务
该docker-build任务通过 Docker 命令行(CLI)构建镜像。该任务可以单独使用,也可以作为任务链的一部分,在容器内运行和/或调试应用程序。
最重要的配置设置docker-build任务如下docker构建以及平台:
- 该
docker构建object 指定了 Docker 构建命令的参数。该对象指定的值直接应用于 Docker 构建 CLI 调用中。 - 该
平台属性是一个改变docker-build任务决定了 Docker 构建的默认值。
有关所有任务属性的完整列表,请参见属性参考。
平台支持
虽然docker-build任务tasks.json可用于构建任何镜像,该扩展明确支持(并简化配置)支持 Node.js、Python 和 .NET Core。
Node.js (docker-build)
使用默认值的最小配置
基于Node.js的镜像没有特定平台选项,只需设置平台属性到节点:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build Node Image",
"type": "docker-build",
"platform": "node"
}
]
}
平台默认设置
对于基于Node.js的图像,以下docker-build任务推断出以下选项:
| 财产 | 推断价值 |
|---|---|
dockerBuild.context |
同一目录中package.json居住。 |
dockerBuild.dockerfile |
文件Dockerfile与package.json居住。 |
dockerBuild.tag |
应用的名称财产package.json(如果定义的话),否则为该文件夹的基名package.json居住。 |
dockerBuild.pull |
默认为 true,以便在构建前拉取新的基础图像。 |
Python(docker构建)
使用默认值的最小配置
一个基于Python、没有特定平台选项的镜像可以直接设置平台属性到派森:
{
"tasks": [
{
"type": "docker-build",
"label": "docker-build",
"platform": "python"
}
]
}
平台默认设置
对于基于Python的图像,docker-build任务推断出以下选项:
| 财产 | 推断价值 |
|---|---|
dockerBuild.context |
默认上下文是工作区文件夹。 |
dockerBuild.dockerfile |
默认Dockerfilepath会在工作区文件夹的根节点。 |
dockerBuild.tag |
root workspace 文件夹的基础名称。 |
dockerBuild.pull |
默认为 true,以便在构建前拉取新的基础图像。 |
.NET (docker-build)
使用默认值的最小配置
当你构建一个 .基于NET的镜像,你可以省略平台属性,并仅设网核对象(平台隐式设置为网络核心当网核物体存在)。注意app项目是必修属性:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build Node Image",
"type": "docker-build",
"netCore": {
"appProject": "${workspaceFolder}/project.csproj"
}
}
]
}
平台默认设置
对于 。基于NET的图像,docker-build任务推断出以下选项:
| 财产 | 推断价值 |
|---|---|
dockerBuild.context |
根工作区文件夹。 |
dockerBuild.dockerfile |
文件Dockerfile在根工作区文件夹里。 |
dockerBuild.tag |
root workspace 文件夹的基础名称。 |
dockerBuild.pull |
默认为 true,以便在构建前拉取新的基础图像。 |
构建任务参考
以下是所有可用于配置的属性docker-build任务。除非另有说明,所有属性均为可选。
| 财产 | 描述 |
|---|---|
docker构建 |
控制Docker 构建命令已执行(见下文)。除非 平台已设定。 |
平台 |
确定平台:.NET (网络核心)或Node.js(节点)以及默认设置Docker 构建指挥部。 |
节点 |
确定Node.js项目的具体选项(见下文)。 |
派森 |
Python 在docker-build任务。 |
网核 |
确定针对 .NET 项目的具体选项(见下文)。 |
dockerBuild 对象属性
| 财产 | 描述 | Docker 构建CLI等效 |
|---|---|---|
背景 |
通往构建上下文的路径。 必须,除非平台推断出。 |
路径 |
dockerfile |
通往 Dockerfile 的路径。 必须,除非平台推断出。 |
-f或——文件 |
Tab |
标签被应用到图片上。 必须,除非平台推断出。 |
-t或——标签 |
buildArgs |
将构建参数应用到命令行。这是键值对的列表。 | ——构建-arg |
唱片公司 |
图片上添加了标签。这是一个键值对的列表(一个 JSON 对象)。除了这里 指定的标签外,还有一个标签 com.microsoft.created-by,设为可视化-工作室-代码被添加到图像中。这种行为可以通过设置关闭包括默认的属性唱片公司反对 false。 |
——标签 |
目标 |
Docker文件中要构建的目标。 | ——目标 |
拉 |
是否应该在建造前拉取新的基础图像。 | ——拉 |
自定义选项 |
在上下文论述之前,有什么额外参数需要添加吗?没有尝试解决与其他选项的冲突或验证该选项。 | (任意) |
节点对象属性(docker-build任务)
| 财产 | 描述 | 默认 |
|---|---|---|
包装 |
通往package.json与 Dockerfile 关联的文件和docker-build任务。 |
文件package.json在根工作区文件夹里。 |
netCore 对象属性(docker-build任务)
| 财产 | 描述 |
|---|---|
app项目 |
.NET 项目文件(.csproj,.fsproj,等等)与 Dockerfile 关联,并且docker-build任务。必须始终如此。 |
Docker 运行任务
该docker-run任务tasks.json使用 Docker 命令行(CLI)创建并启动容器。该任务可以单独使用,也可以作为任务链的一部分,用于在容器内调试应用程序。
最重要的配置设置docker-run任务如下dockerRun以及平台:
- 该
dockerRunobject 指定了 Docker 运行命令的参数。该对象指定的值会直接应用到 Docker 运行 CLI 调用中。 - 该
平台属性是一个改变docker-run任务决定了 Docker 运行的默认值。
有关所有任务属性的完整列表,请参见属性参考。
Docker 运行平台支持
虽然docker-run任务可用于运行任何 Docker 镜像,该扩展对 Node.js、Python 和 .NET 有明确支持(并简化配置)。
Node.js (docker-run)
使用默认值的最小配置
基于Node.js的镜像没有特定平台选项,只需设置平台属性到节点.
{
"version": "2.0.0",
"tasks": [
{
"label": "Run Node Image",
"node": "docker-run",
"platform": "node"
}
]
}
平台默认设置
对于基于Node.js的图像,以下docker-run任务推断出以下选项:
| 财产 | 推断价值 |
|---|---|
dockerRun.command |
由 npm 生成开始在package.json(如果存在的话),否则由主要角色财产在package.json. |
dockerRun.containerName |
源自应用程序包名称。 |
dockerRun.image |
来自依赖项的标签docker-build任务(如果存在的话)或从应用包名称派生,而应用包本身又源自名称财产package.json或者它所在文件夹的基底名称。 |
Python(docker运行)
在构建基于Python的镜像时,你可以省略平台属性,并仅设派森对象(平台隐式设置为派森当派森物体存在)
Django Apps 的最小配置
{
"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-run任务推断出以下选项:
| 财产 | 推断价值 |
|---|---|
dockerRun.command |
由 Python 对象生成,并由 Python 调试器调用。 |
dockerRun.containerName |
来源于根工作区文件夹的基名。 |
dockerRun.image |
标签来自依赖的 docker-build 任务(如果存在的话),或者从 root workspace 文件夹的基础名称派生。 |
.NET (docker-run)
使用默认值的最小配置
构建 .基于NET的镜像,你可以省略平台属性,并仅设网核对象(平台隐式设置为网络核心当网核物体存在)。注意app项目是必修属性:
{
"version": "2.0.0",
"tasks": [
{
"label": "Run .NET Core Image",
"type": "docker-run",
"netCore": {
"appProject": "${workspaceFolder}/project.csproj"
}
}
]
}
平台默认设置
对于 。基于NET的图像,docker-run任务推断出以下选项:
| 财产 | 推断价值 |
|---|---|
dockerRun.containerName |
来源于根工作区文件夹的基名。 |
dockerRun.env |
根据需要添加以下环境变量:ASPNETCORE_ENVIRONMENT,ASPNETCORE_URLS, 和DOTNET_USE_POLLING_FILE_WATCHER. |
dockerRun.image |
来自依赖项的标签docker-build任务(如果存在的话)或是从根工作区文件夹的基名派生。 |
dockerRun.os |
Linux |
dockerRun.volumes |
根据需要添加以下卷:本地应用文件夹、源文件夹、调试器文件夹、NuGet 包文件夹和 NuGet 备用文件夹。 |
运行任务引用
以下是所有可用于配置的属性docker-run任务。除非另有说明,所有属性均为可选。
| 财产 | 描述 |
|---|---|
dockerRun |
控制Docker 运行命令已执行(见下文)。除非 平台已设定。 |
平台 |
确定平台:.NET (网络核心)或Node.js(节点)以及默认设置Docker 运行指挥部。 |
节点 |
对于Node.js项目,这控制着各种选项(见下文)。 |
派森 |
对于 Python 项目,这控制着各种选项(见下文)。 |
网核 |
对于 .NET 项目,这控制着各种选项(见下文)。 |
dockerRun 对象属性
| 财产 | 描述 | CLI等效 |
|---|---|---|
图片 |
要运行的图片名称(标签)。 除非平台推断,否则必须如此。 |
图片 |
指挥 |
启动容器时的运行命令。 必须,除非平台推断出。 |
指挥 [ARG...] |
容器名称 |
起始容器的名称。 必须,除非平台推断出。 |
——名字 |
环境 |
容器中设置的环境变量。这是键值对的列表。 | -e或——环境 |
envFiles |
以下是.env文件。 |
--环境文件 |
唱片公司 |
标签贴在起始容器上。这是键值对的列表。 | ——标签 |
网络 |
容器将连接的网络名称。 | ——网络 |
网络别名 |
启动容器的网络范围别名。 | --网络别名 |
作系统 |
默认是Linux,另一种选项是窗户.所使用的容器作系统。 |
无 |
移植版本 |
从容器发布到主机的端口(映射)。这是一份物体列表(见下文)。 | -p或——发布 |
portsPublishAll |
是否发布由 Docker 镜像暴露的所有端口。默认确实如此如果没有明确发布端口。 |
-P |
额外主持人 |
主机要添加到容器中用于DNS解析。这是一份物体列表(见下文)。 | --添加主机 |
卷数 |
要映射到起始容器的体积。这是一份物体列表(见下文)。 | -v或——体积 |
删除 |
是否应该在它停止后取出容器。 | ——rm |
自定义选项 |
在图像论证之前,有什么额外参数可以添加的吗?没有尝试解决与其他选项的冲突或验证该选项。 | (任意) |
端口对象属性
| 财产 | 描述 | 默认 |
|---|---|---|
集装箱港 |
集装箱上的港口编号。 必须。 |
|
hostPort |
主机绑定的端口号。 | (由Docker随机选择) |
协议 |
绑定协议(TCP或UDP). |
TCP |
extraHosts 对象属性
| 财产 | 描述 |
|---|---|
主机名 |
用于DNS解析的主机名。 必须。 |
知识产权 |
与上述主机名关联的IP地址。 必须。 |
volumes 对象属性
| 财产 | 描述 | 默认 |
|---|---|---|
localPath |
本地机器上将被映射的路径。 必须。 |
|
containerPath(容器路径) |
容器内的路径,本地路径将被映射到。 必须。 |
|
权限 |
容器在映射路径上的权限。可以是罗(只读)或右翼(读写)。 |
具体情况取决于容器。 |
节点对象属性(docker-run任务)
| 财产 | 描述 | 默认 |
|---|---|---|
包装 |
通往package.json与docker-run任务。 |
文件package.json在根工作区文件夹里。 |
enableDebugging |
是否要在容器内启用调试。 | 错误 |
inspectMode |
定义了应用程序与调试器之间的初始交互(默认或休息).价值 默认允许应用程序运行,直到调试器连接完成。价值 休息阻止应用程序运行,直到调试器连接。 |
默认 |
检查Port |
调试应使用的端口。 | 9229 |
Python 对象属性(docker-run任务)
| 财产 | 描述 | 默认 |
|---|---|---|
args |
参数传递给 Python 应用。 | 这取决于平台。上面所示的脚手架默认情况 |
debugPort |
调试器会监听的端口。 | 5678 |
等等 |
是否应该等待调试器连接。 | 确实如此 |
模块 |
运行的Python模块(只能选择模块或文件)。 | |
文件 |
运行的 Python 文件(只能选择模块或文件)。 |
netCore 对象属性(docker-run任务)
| 财产 | 描述 |
|---|---|
app项目 |
.NET 项目文件(.csproj,.fsproj,等等)与docker-run任务。必须。 |
configureSsl |
是否配置 ASP.NET 核心SSL证书及其他设置以在容器内的服务上启用SSL。 |
enableDebugging |
是否启用启动容器进行调试。这将推断出额外的体积映射和其他调试所需的选项。 |
Docker Compose 任务
该docker-compose任务tasks.json使用 Docker Compose 命令行(CLI)创建并启动容器。该任务可以单独使用,也可以作为任务链的一部分,用于在容器内调试应用程序。
最重要的配置设置docker-compose任务是dockerCompose:
- 该
dockerComposeobject 指定了 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"
]
}
}
]
}
Compose 任务引用
以下是所有可用于配置的属性docker-compose任务。除非另有说明,所有属性均为可选。
| 财产 | 描述 |
|---|---|
dockerCompose |
控制docker-compose命令已执行(见下文)。必须。 |
dockerCompose 对象属性
| 财产 | 描述 | CLI等效 |
|---|---|---|
上 |
运行一个docker-compose up指挥部。要么就是这个,要么 下去必须具体说明,但不能同时说明。 |
docker-compose up |
下去 |
运行一个docker-compose down指挥部。要么就是这个,要么 上必须具体说明,但不能同时说明。 |
docker-compose down |
文件 |
Docker Compose YAML 文件列表,用于docker-compose指挥部。如果未指定,Docker Compose CLI 会查找docker-compose.yml以及docker-compose.override.yml. |
-F <档案> |
envFile |
环境变量文件读取并应用到容器上。 | --环境文件<文件> |
项目名称 |
命名和标记 Docker 对象时使用的备用项目名称。如果在合成时使用替代项目名称,合成时必须指定相同的项目名称。 | --项目名<名> |
UP 对象属性
| 财产 | 描述 | CLI等效 | 默认 |
|---|---|---|---|
脱离 |
是否要保持距离。 | -d |
确实如此 |
建造 |
是否先建造再跑。 | ——建造 |
确实如此 |
比例 |
每个服务需要运行的实例数。这是键值对的列表。 | --scale SERVICE=NUM |
|
服务 |
从服务的子集开始。不能与简介. |
[服务......] |
(众人) |
简介 |
先从个人资料的子集开始。不能与服务. |
——画像<简介> |
(众人) |
自定义选项 |
在上争论。没有尝试解决与其他选项的冲突或验证该选项。 |
(任意) |
下对象属性
| 财产 | 描述 | CLI等效 | 默认 |
|---|---|---|---|
移除图片 |
是否删除图片,以及具体哪种。全部将移除任何服务使用的所有图片,本地只会移除没有自定义标签的图片。保持未设置不会移除任何图像。 |
——RMI |
|
移除卷册 |
是否应该移除命名卷。 | -v |
错误 |
自定义选项 |
在下去争论。没有尝试解决与其他选项的冲突或验证该选项。 |
(任意) |
命令定制
Container Tools 扩展在执行各种作时执行多个 Docker CLI 命令,比如构建镜像、运行容器、附加容器和查看容器日志。其中一些命令包含大量可选参数,通常用于非常特定的场景。作为上述Visual Studio Code任务的替代方案,当任务未被使用时,可以自定义若干命令。
例如,标记${serviceList}以及${profileList}在 Compose Up 命令中,允许你轻松启动 Docker Compose YAML 文件中的部分服务。
对于这些可定制的 Docker 命令,都提供了一个配置设置,用于设置执行的模板。或者,你也可以定义多个模板,可选地使用正则表达式,匹配后会提示模板的使用上下文。模板支持一些类似于的标记launch.json以及tasks.json,例如,${workspaceFolder}.
设置 JSON schema
你有两种配置模板的选项(如下所示)。第一种方案是一个覆盖默认行为的单一模板:
{
"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}” |
支持的代币:
| 代币 | 描述 |
|---|---|
${containerCommand} |
CLI命令/可执行文件用于执行容器命令。 |
${dockerfile} |
所选工作空间的相对路径Dockerfile. |
${tag} |
用户在调用构建命令时输入/确认的值。如果之前已建成,则默认为之前输入的值Dockerfile. |
${context} |
如果设,则containers.imageBuildContextPath配置设置。否则,工作区相关的文件夹Dockerfile居住。 |
注意:如果
containers.commands.build设置不包含${tag}用户不会被提示输入或确认标签。
注:该
比赛正则表达式将与所选的 Dockerfile 名称和工作区文件夹名称进行比较。
Docker 运行
| 配置设置 | 默认值 |
|---|---|
containers.commands.run |
${containerCommand} run --rm -d ${exposedPorts} ${tag} |
containers.commands.runInteractive |
${containerCommand} run --rm -it ${exposedPorts} ${tag} |
支持的代币:
| 代币 | 描述 |
|---|---|
${containerCommand} |
CLI命令/可执行文件用于执行容器命令。 |
${exposedPorts} |
从图像中暴露端口列表生成(最终来自Dockerfile),每个暴露端口映射到本地机器上的同一个端口。例如,“曝光5000 5001”将生成“-p 5000:5000 -p 5001:5001”. |
${tag} |
所选图片的完整标签。 |
注:该
比赛正则表达式将与所选图像的完整标签进行比较。
容器附着
| 配置设置 | 默认值 |
|---|---|
containers.commands.attach |
${containerCommand} exec -it ${containerId} ${shellCommand} |
支持的代币:
| 代币 | 描述 |
|---|---|
${containerCommand} |
CLI命令/可执行文件用于执行容器命令。 |
${containerId} |
要附着的容器ID。 |
${shellCommand} |
如果砰如果存在于容器中,则替换于此,否则嘘.在Windows容器中,指令长始终使用。 |
注:该
比赛正则表达式将与容器名称和容器图像的完整标签进行比较。
集装箱日志
| 配置设置 | 默认值 |
|---|---|
containers.commands.logs |
${containerCommand} logs -f ${containerId} |
支持的代币:
| 代币 | 描述 |
|---|---|
${containerCommand} |
CLI命令/可执行文件用于执行容器命令。 |
${containerId} |
用来查看日志的容器ID。 |
注:该
比赛正则表达式将与容器名称和容器图像的完整标签进行比较。
Docker 组合
| 配置设置 | 默认值 |
|---|---|
containers.commands.composeUp |
${composeCommand} ${configurationFile} up ${detached} ${build} |
支持的代币:
| 代币 | 描述 |
|---|---|
${configurationFile} |
设置为-f以及所选Docker Compose YAML文件的工作区相对路径。 |
${疏离} |
设置为-d如果配置设置containers.composeDetached设置为确实如此.否则,设为 。"" |
${build} |
设置为——建造如果配置设置containers.composeBuild设置为确实如此.否则,设为 。"" |
${serviceList} |
如有指定,执行命令时会提示启动部分服务。 |
${profileList} |
如果指定且Docker Compose YAML文件包含配置文件,执行命令时会提示部分配置文件启动。 |
${composeCommand} |
设为containers.composeCommand如果设置为 ,否则扩展将尝试自动判定要使用的命令 (Docker Compose或docker-compose). |
Docker 组合下降
| 配置设置 | 默认值 |
|---|---|
containers.commands.composeDown |
${composeCommand} ${configurationFile} down |
支持的代币:
| 代币 | 描述 |
|---|---|
${configurationFile} |
设置为-f以及所选Docker Compose YAML文件的工作区相对路径。 |
${composeCommand} |
设为containers.composeCommand如果设置为 ,否则扩展将尝试自动判定要使用的命令 (Docker Compose或docker-compose). |
其他支持的代币
除了命令专用支持的令牌外,以下令牌在所有命令模板中都支持:
| 代币 | 描述 |
|---|---|
${workspaceFolder} |
所选工作区文件夹路径。 |
${config:some.setting.identifier} |
任何配置设置的值,只要是字符串、数字或布尔值。这些设置标识符可以任意定义,不必属于Visual Studio Code或任何扩展。 |
${env:Name} |
环境变量的值。 |
${command:commandID} |
命令的字符串返回值。 |