diff --git a/samples/MicroserviceDemo/.dockerignore b/samples/MicroserviceDemo/.dockerignore
new file mode 100644
index 0000000000..e694ae215f
--- /dev/null
+++ b/samples/MicroserviceDemo/.dockerignore
@@ -0,0 +1,12 @@
+.dockerignore
+.env
+.git
+.gitignore
+.vs
+.vscode
+docker-compose.yml
+docker-compose.*.yml
+*/bin
+*/obj
+!obj/Docker/publish/*
+!obj/Docker/empty/
diff --git a/samples/MicroserviceDemo/MicroserviceDemo.Web/Dockerfile b/samples/MicroserviceDemo/MicroserviceDemo.Web/Dockerfile
new file mode 100644
index 0000000000..20a7e8868c
--- /dev/null
+++ b/samples/MicroserviceDemo/MicroserviceDemo.Web/Dockerfile
@@ -0,0 +1,20 @@
+FROM microsoft/aspnetcore:2.0 AS base
+WORKDIR /app
+EXPOSE 80
+
+FROM microsoft/aspnetcore-build:2.0 AS build
+WORKDIR /src
+COPY *.sln ./
+COPY MicroserviceDemo.Web/MicroserviceDemo.Web.csproj MicroserviceDemo.Web/
+RUN dotnet restore
+COPY . .
+WORKDIR /src/MicroserviceDemo.Web
+RUN dotnet build -c Release -o /app
+
+FROM build AS publish
+RUN dotnet publish -c Release -o /app
+
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app .
+ENTRYPOINT ["dotnet", "MicroserviceDemo.Web.dll"]
diff --git a/samples/MicroserviceDemo/MicroserviceDemo.Web/MicroserviceDemo.Web.csproj b/samples/MicroserviceDemo/MicroserviceDemo.Web/MicroserviceDemo.Web.csproj
new file mode 100644
index 0000000000..13859357c5
--- /dev/null
+++ b/samples/MicroserviceDemo/MicroserviceDemo.Web/MicroserviceDemo.Web.csproj
@@ -0,0 +1,16 @@
+
+
+
+ netcoreapp2.0
+ ..\docker-compose.dcproj
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/MicroserviceDemo/MicroserviceDemo.Web/Program.cs b/samples/MicroserviceDemo/MicroserviceDemo.Web/Program.cs
new file mode 100644
index 0000000000..483fab51ee
--- /dev/null
+++ b/samples/MicroserviceDemo/MicroserviceDemo.Web/Program.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+
+namespace MicroserviceDemo.Web
+{
+ public class Program
+ {
+ public static void Main(string[] args)
+ {
+ BuildWebHost(args).Run();
+ }
+
+ public static IWebHost BuildWebHost(string[] args) =>
+ WebHost.CreateDefaultBuilder(args)
+ .UseStartup()
+ .Build();
+ }
+}
diff --git a/samples/MicroserviceDemo/MicroserviceDemo.Web/Properties/launchSettings.json b/samples/MicroserviceDemo/MicroserviceDemo.Web/Properties/launchSettings.json
new file mode 100644
index 0000000000..a9ae94e883
--- /dev/null
+++ b/samples/MicroserviceDemo/MicroserviceDemo.Web/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:61144/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "MicroserviceDemo.Web": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:61145/"
+ }
+ }
+}
diff --git a/samples/MicroserviceDemo/MicroserviceDemo.Web/Startup.cs b/samples/MicroserviceDemo/MicroserviceDemo.Web/Startup.cs
new file mode 100644
index 0000000000..4c22f392d7
--- /dev/null
+++ b/samples/MicroserviceDemo/MicroserviceDemo.Web/Startup.cs
@@ -0,0 +1,27 @@
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace MicroserviceDemo.Web
+{
+ public class Startup
+ {
+ public void ConfigureServices(IServiceCollection services)
+ {
+ }
+
+ public void Configure(IApplicationBuilder app, IHostingEnvironment env)
+ {
+ if (env.IsDevelopment())
+ {
+ app.UseDeveloperExceptionPage();
+ }
+
+ app.Run(async (context) =>
+ {
+ await context.Response.WriteAsync("Hello microservices!");
+ });
+ }
+ }
+}
diff --git a/samples/MicroserviceDemo/MicroserviceDemo.sln b/samples/MicroserviceDemo/MicroserviceDemo.sln
new file mode 100644
index 0000000000..a322b1b5d2
--- /dev/null
+++ b/samples/MicroserviceDemo/MicroserviceDemo.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27130.2026
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MicroserviceDemo.Web", "MicroserviceDemo.Web\MicroserviceDemo.Web.csproj", "{0F012333-D449-43BF-87F9-FD6B78CD5022}"
+EndProject
+Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{E2C7F429-72E6-4AEE-9DFC-F16BD72A27BD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0F012333-D449-43BF-87F9-FD6B78CD5022}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0F012333-D449-43BF-87F9-FD6B78CD5022}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0F012333-D449-43BF-87F9-FD6B78CD5022}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0F012333-D449-43BF-87F9-FD6B78CD5022}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E2C7F429-72E6-4AEE-9DFC-F16BD72A27BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E2C7F429-72E6-4AEE-9DFC-F16BD72A27BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E2C7F429-72E6-4AEE-9DFC-F16BD72A27BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E2C7F429-72E6-4AEE-9DFC-F16BD72A27BD}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {20FA72D5-E668-435D-B92F-F603D29BDDEB}
+ EndGlobalSection
+EndGlobal
diff --git a/samples/MicroserviceDemo/docker-compose.ci.build.yml b/samples/MicroserviceDemo/docker-compose.ci.build.yml
new file mode 100644
index 0000000000..246b12ae80
--- /dev/null
+++ b/samples/MicroserviceDemo/docker-compose.ci.build.yml
@@ -0,0 +1,9 @@
+version: '3'
+
+services:
+ ci-build:
+ image: microsoft/aspnetcore-build:1.0-2.0
+ volumes:
+ - .:/src
+ working_dir: /src
+ command: /bin/bash -c "dotnet restore ./MicroserviceDemo.sln && dotnet publish ./MicroserviceDemo.sln -c Release -o ./obj/Docker/publish"
diff --git a/samples/MicroserviceDemo/docker-compose.dcproj b/samples/MicroserviceDemo/docker-compose.dcproj
new file mode 100644
index 0000000000..47b451db91
--- /dev/null
+++ b/samples/MicroserviceDemo/docker-compose.dcproj
@@ -0,0 +1,19 @@
+
+
+
+ 2.0
+ Linux
+ e2c7f429-72e6-4aee-9dfc-f16bd72a27bd
+ True
+ http://localhost:{ServicePort}
+ microservicedemo.web
+
+
+
+ docker-compose.yml
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/MicroserviceDemo/docker-compose.override.yml b/samples/MicroserviceDemo/docker-compose.override.yml
new file mode 100644
index 0000000000..433007248e
--- /dev/null
+++ b/samples/MicroserviceDemo/docker-compose.override.yml
@@ -0,0 +1,8 @@
+version: '3'
+
+services:
+ microservicedemo.web:
+ environment:
+ - ASPNETCORE_ENVIRONMENT=Development
+ ports:
+ - "80"
diff --git a/samples/MicroserviceDemo/docker-compose.yml b/samples/MicroserviceDemo/docker-compose.yml
new file mode 100644
index 0000000000..78fa564dad
--- /dev/null
+++ b/samples/MicroserviceDemo/docker-compose.yml
@@ -0,0 +1,8 @@
+version: '3'
+
+services:
+ microservicedemo.web:
+ image: microservicedemo.web
+ build:
+ context: .
+ dockerfile: MicroserviceDemo.Web/Dockerfile