Two weeks ago, I facilitated an introductory level workshop about Docker. Considering the feedback I've received, it went pretty well overall and I wanted to share what I went through regarding setup and the tools that were used.
A little about Docker: Docker is still a very young technology - it celebrated it’s first official birthday a few weeks ago. The community and ecosystem around Docker is rapidly growing, which is great to see. It's an exciting new technology with the potential to have a similar impact on the development community as Rails had a decade ago. Having said that, its still not completely production ready and there are lots of questions still unanswered. With this in mind, I decided that a workshop would be a great opportunity to dive into those questions so the public are ready when it hits the mainstream.
At Bulletproof Networks, the company I'm currently working for, we’re looking into Docker as a foundation for a private PaaS. Of course, this means I have spent quite a lot of time with Docker and related technologies recently, hence the motivation to address any concerns about the technology.
As our team are working 100% remotely, and I'm the sole engineer located in Vietnam, I figured that starting a meetup about Docker would be good way to find people for some kind of direct knowledge exchange. With the other meetup I'm currently running (Saigon.rb ), I had pretty much everything in place to get a Docker meetup underway. Another driving force behind the idea of facilitating this workshop was the opportunity to delve deeper into Docker internals whilst I was preparing workshop material.
We were in a fortunate position to provide the workshop free of charge thanks to our sponsors, DigitalOcean. DigitalOcean stepped into the Asian market by opening a datacenter in Singapore recently. They were very happy when I approached them with the opportunity to sponsor the event. Thanks to DigitalOcean we had catering, drinks and coupon codes for each attendee. Everybody loves freebies! We were also lucky enough to have Silicon Straits Saigon offer their in-house cafe/coworking space (AirLounge) free of charge for the event and they did a really great job in preparing everything that was needed for the workshop. Silicon Straits Saigon is a software development store with shopfronts in Vietnam and Singapore - check them out if you can!
For preparation, it took me quite a while to get all the materials in place for the workshop to work. In order to have a homogenous working environment for everybody, I prepared Vagrant Boxes to have a known base to begin with.
The boxes contained:
- A recent version of Ubuntu
- Prepared Docker Images
- A bunch of cached base Docker Images
- Docker UI
- Pre-Authenticated to Github, the Docker Index and a DigitalOcean server
Besides the Vagrant Box, I prepared an app for demonstration purposes which displays a random quote on each page load. It starts from a static, self contained version and evolves in a couple of steps towards an app that's dependant on other services (e.g. Redis). I also prepared slides and written guides for distribution during the workshop.
On the day, everything went pretty smoothly. The atmosphere was relaxed, with everybody participating and keen to try new things. In the tea-break, I had some good conversations about how to tackle particular scenarios in the world of Docker.
The workshop itself consisted of five parts. I began with a short overview about Docker and its ecosystem, followed by an introduction session where everybody could introduce themselves. It was interesting to see that the majority of attendees had a Software Engineering background. Another thing I noted was the expectation towards the learning outcome, which varied quite a bit.
As previously mentioned, I had a fully prepared Vagrant Box for the attendees. Even so, the setup took some time, and distributing the content whilst making everybody familiar with how Vagrant worked took more time than anticipated.
Next I gave a brief introduction to a few Docker commands. The goal here was not replicating a reference, but to show how Docker Images and the Registry are working and how the workflow is quite similar to Git. It was pretty much like a "Hello World" example, where the attendees were able to create their own images and share them with their fellow workshop participants.
We then explored the capabilities of a Dockerfile and basic networking - the app itself was fully prepared and available as Git Tag, which allowed the attendees to focus on the Docker workflow. The data was stored as a static array within the Sinatra application. But an app that isn't able to handle dynamic data is boring, right? Hence, the next natural step was making the app dynamic. To keep it simple, I chose to use Redis and I think it's a good candidate for building example applications like this. It's just easy to work with and very user-friendly. Other than linking the app and Redis container, we also had the opportunity to take a look at shared Volumes between the host and container as a data persistency option.
In summary, we definitely had a good time and everybody had the opportunity to learn something new. Based on the feedback I've received, I would say it was a successful workshop. However, there's always room for improvement and getting continued feedback will definitely help. I'll be taking the feedback I’ve received into account when I'm working on the improved version of this workshop, which may also require an update of the content which was available. I'll be writing another blog post about what I’ve learned from facilitating this workshop soon, so keep an eye out for it.