diff --git a/containers/puppet/.devcontainer/Dockerfile b/containers/puppet/.devcontainer/Dockerfile
new file mode 100644
index 0000000000..ed27ad3922
--- /dev/null
+++ b/containers/puppet/.devcontainer/Dockerfile
@@ -0,0 +1,15 @@
+FROM ruby:2
+
+RUN gem install ruby-debug-ide
+RUN gem install debase
+
+ADD https://apt.puppetlabs.com/puppet6-release-xenial.deb /puppet6-release-xenial.deb
+RUN dpkg -i /puppet6-release-xenial.deb
+
+RUN apt-get update \
+ && apt-get -y install git procps pdk
+
+# Clean up
+RUN apt-get autoremove -y \
+ && apt-get clean -y \
+ && rm -rf /var/lib/apt/lists/*
diff --git a/containers/puppet/.devcontainer/devcontainer.json b/containers/puppet/.devcontainer/devcontainer.json
new file mode 100644
index 0000000000..c189e37c43
--- /dev/null
+++ b/containers/puppet/.devcontainer/devcontainer.json
@@ -0,0 +1,18 @@
+{
+ "name": "Puppet Development Kit - Dockerfile",
+ "dockerFile": "Dockerfile",
+
+ // Uncomment the next line if you want to publish any ports.
+ // "appPort": [],
+
+ // Uncomment the next line if you want to add in default container specific settings.json values
+ // "settings": { "workbench.colorTheme": "Quiet Light" },
+
+ // Uncomment the next line to run commands after the container is created.
+ // "postCreateCommand": "pdk --version",
+
+ "extensions": [
+ "jpogran.puppet-vscode",
+ "rebornix.Ruby"
+ ]
+}
diff --git a/containers/puppet/.npmignore b/containers/puppet/.npmignore
new file mode 100644
index 0000000000..1d72d293eb
--- /dev/null
+++ b/containers/puppet/.npmignore
@@ -0,0 +1,4 @@
+README.md
+test-project
+.vscode
+.npmignore
diff --git a/containers/puppet/README.md b/containers/puppet/README.md
new file mode 100644
index 0000000000..62cdde7131
--- /dev/null
+++ b/containers/puppet/README.md
@@ -0,0 +1,41 @@
+# Puppet Development Kit Docker Container
+
+## Summary
+
+*Develop Puppet based applications. Includes everything you need to get up and running.*
+
+| Metadata | Value |
+|----------|-------|
+| *Contributors* | Puppet |
+| *Definition type* | Dockerfile |
+| *Languages, platforms* | Puppet |
+
+## Description
+
+Develop Puppet manifests, modules, and code using VS Code without installing any extra tools: `puppet-development-in-a-box`!
+
+## Using this definition with an existing folder
+
+Just follow these steps:
+
+1. If this is your first time using a development container, please follow the [getting started steps](https://aka.ms/vscode-remote/containers/getting-started) to set up your machine.
+
+2. To use VS Code's copy of this definition:
+ 1. Start VS Code and open your project folder.
+ 2. Press F1 select and **Remote-Containers: Create Container Configuration File...** from the command palette.
+ 3. Select the `Puppet` definition.
+
+3. To use latest-and-greatest copy of this definition from the repository:
+ 1. Clone this repository.
+ 2. Copy the contents of this folder in the cloned repository to the root of your project folder.
+ 3. Start VS Code and open your project folder.
+
+4. After following step 2 or 3, the contents of the `.devcontainer` folder in your project can be adapted to meet your needs.
+
+5. Finally, press F1 and run **Remote-Containers: Reopen Folder in Container** to start using the definition.
+
+## License
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Licensed under the MIT License. See [LICENSE](https://github.com/Microsoft/vscode-dev-containers/blob/master/LICENSE).