Plenty happening in the Docker and Microsoft space. Last month I got to some great conferences and spent a bunch of time with some awesome folks.
Docker CE 17.05 was released which added some useful features for Windows, and I shared a .NET Framework sample app which runs across multiple Windows Docker containers and makes use of the new features.
Build was in Seattle this year, and Docker, Inc. were in the expo area with a booth that was packed for the whole event. Even before the conference started, we jointly ran a "ContainerFest" pre-day with Microsoft, dedicating the whole day to Docker and containers.
In the pre-day I demonstrated Image2Docker, using it to pull an Umbraco website from a VM into a Docker image, and then running Umbraco in a Docker container. The Dockerfile generated by Image2Docker was the basis for my Umbraco Docker image.
During the show we had over 300 conversations at the Docker booth, mainly from folks who wanted to understand the basics of containers, and how Docker works on Windows. The Docker story is easy to tell, so we quickly moved on to discussing where Docker would fit in their organization, and the problems it would solve.
Meanwhile there were lots of Docker mentions in the keynotes and the breakout sessions:
- cross-container debugging in Visual Studio
- the Azure Cloud Shell (powered by Docker containers)
- exporting Azure Functions as Docker Images with IoT Edge
- Docker Compose support for Service Fabric
Developer Day - South West
The weekend before Build, I was speaking at Developer Day South West in the UK. My session was on modernizing .NET Framework apps with Docker.
Developer Day is a free conference which always has a great turn-out, and is very well run. I demonstrated moving an ASP.NET app into Docker, and then breaking features out into separate containers. Lots of great questions afterwards, and it was good to return to Bristol (where I worked many years ago).
Software Design and Development is a professional conference held annually in London. The great thing for a presenter is that the sessions are 90 minutes, so you get to show a lot more stuff than the standard 60 minute sessions.
My talk was on .NET modernization with Docker, and I used the extra time to demonstrate the path to production - running the app in Docker Swarm and then on Docker EE Advanced:
Source code as usual in my presentations repo: sdd-2017.
Red Shirt Dev Tour
This was very exciting. Scott Guthrie toured Europe presenting full-day sessions covering pretty much everything in Azure. We joined Scott in London and Dublin, following on from his event with a Docker MeetUp.
I did a session covering Docker on Windows, ranging from the 101 to running apps in hybrid swarms. Taking Scott's cue to "show not tell", this was 90 minutes of demos, with just a couple of slides to frame the sections.
In the final demo I take a distributed app running in Windows containers, and gradually move the cross-platform workloads to Linux containers running in the same swarm. There's no loss of availability for the app, and it's a really cool demo to show.
Source code in the presentations repo: red-shirt-tour.
SignUp - A .NET Framework Sample App
I've been using variations on the same sample app in demos and workshops for a while, and this month I tidied it up and added it to the Docker Samples org on GitHub: dockersamples/newsletter-signup:
It's a distrbuted app which uses ASP.NET WebForms as the "traditional" part, and then plugs in message queuing with NATS, and self-service analytics with Elasticsearch and Kibana - all running in Docker containers on Windows.
All the Dockerfiles use multi-stage builds. Each .NET app is compiled inside a Docker container, using an image with MSBuild and BuGet installed, and then the compiled app is packaged into the final image.
You can build and run the sample solution with Docker on Windows, with no other dependencies. You don't need Visual Studio, MSBuild or even .NET. All you need is the source code and Docker.
Jenkins and Bonobo - in Windows Docker images
I'm gradually finding time to finish up my book - Docker on Windows (which you can pre-order now!). Chapter 10 is about CI/CD with Docker and I wanted to demonstrate a workflow where every component runs in Docker.
To support that, I've put together Docker images for Bonobo - a Git server, and Jenkins - the automation server. You can run those services as Docker containers, along with a local Docker registry, and power your whole deployment workflow with Docker.
Jenkins is an interesting case, because most of the functionality comes from plug-ins you add after installation. Some plugins can install their dependencies, but not all of them. My Jenkins instance needs to have the Git and Docker command lines available, so I've created a Jenkins sample image which bundles the dependencies.
The Dockerfile for jenkins-sample makes full use of multi-stage builds. This is how it starts:
FROM sixeyed/git:2.13.0 AS git FROM sixeyed/docker-ce:17.05.0-ce AS docker FROM sixeyed/jenkins:2.46.2
A couple of great conferences coming up in June, where I'll be doing my stuff:
The best .NET conference in Sweden!
I'm running a full-day workshop (which still has some places left!) Windows Containers and Docker - Now is the Time - covering everything from the Docker on Windows 101, modernizing .NET Fx apps, through swarm mode and CI/CD.
I'm also presenting a session, The Velvet Revolution: Dockerizing Legacy ASP.NET Apps. (I do a lot of sessions on modernizing .NET apps, but they're never the same!).
NDC in London was great, and I'm pleased to be at the next event on Norway.
If you see me around, be sure to say Hi.