Customize the Docker extension
The Docker extension includes several Visual Studio Code tasks to control the behavior of Docker build and run, and form the basis of container startup for debugging.
The tasks allow for a great deal of control and customization. The final configuration is a combination of general defaults, platform-specific defaults (such as Node.js, Python, or .NET), and user input. User input takes precedence when it conflicts with defaults.
All common features of Visual Studio Code tasks (for example, grouping tasks into compound tasks) are supported by Docker extension tasks. For more information on common task features and properties, see the Visual Studio Code custom task documentation.
Docker build task
The docker-build
task builds Docker images using the Docker command line (CLI). The task can be used by itself, or as part of a chain of tasks to run and/or debug an application within a Docker container.
The most important configuration settings for the docker-build
task are dockerBuild
and platform
:
- The
dockerBuild
object specifies parameters for the Docker build command. Values specified by this object are applied directly to Docker build CLI invocation. - The
platform
property is a hint that changes how thedocker-build
task determines Docker build defaults.
See property reference for full list of all task properties.
Platform support
While the docker-build
task in tasks.json
can be used to build any Docker image, the extension has explicit support (and simplified configuration) for Node.js, Python, and .NET Core.
Node.js (docker-build)
Minimal configuration using defaults
A Node.js based Docker image with no specific platform options can just set the platform
property to node
:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build Node Image",
"type": "docker-build",
"platform": "node"
}
]
}
Platform defaults
For Node.js Docker images, the docker-build
task infers the following options:
Property | Inferred Value |
---|---|
dockerBuild.context | The same directory in which the package.json resides. |
dockerBuild.dockerfile | The file Dockerfile in the same directory as the package.json resides. |
dockerBuild.tag | The application's name property in package.json (if defined), else the base name of the folder in which package.json resides. |
Python (docker-build)
Minimal configuration using defaults
A Python based Docker image with no specific platform options can just set the platform
property to python
:
{
"tasks": [
{
"type": "docker-build",
"label": "docker-build",
"platform": "python"
}
]
}
Platform defaults
For Python Docker images, the docker-build
task infers the following options:
Property | Inferred Value |
---|---|
dockerBuild.context | The default context is the workspace folder. |
dockerBuild.dockerfile | The default Dockerfile path will be in the root of the workspace folder. |
dockerBuild.tag | The base name of the root workspace folder. |
dockerBuild.pull | Defaults to true in order to pull new base images before building. |
.NET (docker-build)
Minimal configuration using defaults
When you build a .NET-based Docker image, you can omit the platform
property and just set the netCore
object (platform
is implicitly set to netcore
when netCore
object is present). Note that appProject
is a required property:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build Node Image",
"type": "docker-build",
"netCore": {
"appProject": "${workspaceFolder}/project.csproj"
}
}
]
}
Platform defaults
For .NET-based images, the docker-build
task infers the following options:
Property | Inferred Value |
---|---|
dockerBuild.context | The root workspace folder. |
dockerBuild.dockerfile | The file Dockerfile in the root workspace folder. |
dockerBuild.tag | The base name of the root workspace folder. |
Build task reference
Here are all properties available for configuring docker-build
task. All properties are optional unless indicated otherwise.
Property | Description |
---|---|
dockerBuild | Options for controlling the docker build command executed (see below). Required unless platform is set. |
platform | Determines the platform: .NET (netcore ) or Node.js (node ) and default settings for docker build command. |
node | Determines options specific for Node.js projects (see below). |
python | There are no object properties for Python in the docker-build task. |
netCore | Determines options specific for .NET projects (see below). |
dockerBuild object properties
Property | Description | docker build CLI Equivalent |
---|---|---|
context | The path to the Docker build context. Required, unless inferred from the platform. | PATH |
dockerfile | The path to the Dockerfile. Required, unless inferred from the platform. | -f or --file |
tag | The tag applied to the Docker image. Required, unless inferred from the platform. | -t or --tag |
buildArgs | Build arguments applied to the command line. This is a list of key-value pairs. | --build-arg |
labels | Labels added to the Docker image. This is a list of key-value pairs (a JSON object). In addition to labels specified here, a label com.microsoft.created-by , set to visual-studio-code is added to the image. This behavior can be turned off by setting includeDefaults property of the labels object to false. | --label |
target | The target in the Dockerfile to build to. | --target |
pull | Whether or not to pull new base images before building. | --pull |
customOptions | Any extra parameters to add before the context argument. No attempt is made to resolve conflicts with other options or validate this option. | (any) |
node object properties (docker-build
task)
Property | Description | Default |
---|---|---|
package | The path to the package.json file associated with the Dockerfile and docker-build task. | The file package.json in the root workspace folder. |
netCore object properties (docker-build
task)
Property | Description |
---|---|
appProject | The .NET project file (.csproj , .fsproj , etc.) associated with the Dockerfile and docker-build task. Required always. |
Docker run task
The docker-run
task in tasks.json
creates and starts a Docker container using the Docker command line (CLI). The task can be used by itself, or as part of a chain of tasks to debug an application within a Docker container.
The most important configuration settings for the docker-run
task are dockerRun
and platform
:
- The
dockerRun
object specifies parameters for the Docker run command. Values specified by this object are applied directly to Docker run CLI invocation. - The
platform
property is a hint that changes how thedocker-run
task determines Docker run defaults.
See property reference for full list of all task properties.
Docker run platform support
While the docker-run
task can be used to run any Docker image, the extension has explicit support (and simplified configuration) for Node.js, Python, and .NET.
Node.js (docker-run)
Minimal configuration using defaults
A Node.js based Docker image with no specific platform options can just set the platform
property to node
.
{
"version": "2.0.0",
"tasks": [
{
"label": "Run Node Image",
"node": "docker-run",
"platform": "node"
}
]
}
Platform defaults
For Node.js-based Docker images, the docker-run
task infers the following options:
Property | Inferred Value |
---|---|
dockerRun.command | Generated from the npm start script in the package.json (if it exists), else generated from the main property in the package.json . |
dockerRun.containerName | Derived from the application package name. |
dockerRun.image | The tag from a dependent docker-build task (if one exists) or derived from the application package name, itself derived from the name property within package.json or the base name of the folder in which it resides. |
Python (docker-run)
When building a Python-based Docker image, you can omit the platform
property and just set the python
object (platform
is implicitly set to python
when python
object is present)
Minimal configuration for 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"
}
}
Minimal configuration for Flask Apps
{
"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"
}
}
Minimal configuration for General Apps
{
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": [
"docker-build"
],
"python": {
"file": "path_to/app_entry_point.py"
}
}
Platform defaults
For Python-based Docker images, the docker-run
task infers the following options:
Property | Inferred Value |
---|---|
dockerRun.command | Generated by the Python object and is called by the Python Debugger. |
dockerRun.containerName | Derived from the base name of the root workspace folder. |
dockerRun.image | The tag from a dependent docker-build task (if one exists) or derived from the base name of the root workspace folder. |