自定义容器工具扩展

容器工具扩展包含多个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 文件Dockerfilepackage.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随机选择)
协议 绑定协议(TCPUDP). TCP

extraHosts 对象属性

财产 描述
主机名 用于DNS解析的主机名。
必须。
知识产权 与上述主机名关联的IP地址。
必须。

volumes 对象属性

财产 描述 默认
localPath 本地机器上将被映射的路径。
必须。
containerPath(容器路径) 容器内的路径,本地路径将被映射到。
必须。
权限 容器在映射路径上的权限。可以是(只读)或右翼(读写)。 具体情况取决于容器。

节点对象属性(docker-run任务)

财产 描述 默认
包装 通往package.jsondocker-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"
    }
  ]
}

选择行为

选择执行的命令模板基于以下规则:

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

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 Composedocker-compose).

Docker 组合下降

配置设置 默认值
containers.commands.composeDown ${composeCommand} ${configurationFile} down

支持的代币:

代币 描述
${configurationFile} 设置为-f以及所选Docker Compose YAML文件的工作区相对路径。
${composeCommand} 设为containers.composeCommand如果设置为 ,否则扩展将尝试自动判定要使用的命令 (Docker Composedocker-compose).

其他支持的代币

除了命令专用支持的令牌外,以下令牌在所有命令模板中都支持:

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