Simplifying training set-up using container-based IDEs in Dockside

Containerized editors are opening new ways to teach and experiment with code in an isolated and portable environment. Read along to see how we explored different methods to implement it in our training strategy.
3 min read
Maxim Ravinet
Simplifying training set-up using container-based IDEs in Dockside

Dockside is a tool that can be used to deploy dev boxes (development environments) for students using docker and its isolated container technology. It was created by the awesome developers at #NewsNow. It comes packaged in a docker image composed of dockside itself (written in Perl) served by Nginx (with Dehydrated for SSL management) and it also provides a Bind9 instance.

At Mirahi we provide training in an expanding catalogue of languages and technologies. But we always stumble across the same issue: we spend the first hours helping students setup their environment. Sometimes it is even more difficult as people come with their locked-up company laptops.
That is what we hope to fix with dockside, by giving student access to an Eclipse Theia instance (a web IDE based on Visual Studio Code) running in a pre-setup environment available from their browser. All the students need, is a browser to follow any training we would give using Dockside.

In our case, we wanted to try Dockside to get a feel for its capabilities as a training tool in our workshops.
At Mirahi, a training will generally be composed of a few different exercises in a specific language or framework, depending on our client’s needs. But we offer a wide range of different trainings and need to manage all the projects and software associated with them.
What really sold it for us, was the ability to generate custom images containing everything the student might need for his training. It might seem trivial but an immense amount of time ends up being wasted on setting up the development environments of the students or trying to resolve dependency issues. The custom images are a great way to save hours if not days over the course of a year.  
Another part of the problem is that a lot of companies have strict restrictions in place on the employees laptops and our students can’t always install everything they need. Having their IDEs and projects run in a container outside of their company devices and easily available through a browser would prevent those restrictions from being a hindrance.

During our growth session, we got to play around with Dockside and discovered what it was capable of. Obviously, we did not come to a properly finished product in the small timeframe we had, especially since we had to switch roles (which is part of the concept of the growth sessions), but we managed to deploy it and start using it.
Our testing setup was quite rudimentary and consisted of a small ubuntu virtual machine (VM) running on our local vSphere. We installed Docker on the VM and it served as our Dockside host. We also had to configure a DNS delegation for Dockside as it will require to have authority over its own zone when running on a non-local host. This is because it refers to containers by adding subdomains to the hostname and they will need to be resolved outside of the host so your clients can connect to them.

We chose to look at Dockside because it promised a great all-around proposition with access control, a no-thrills Web UI and an efficient idea of how to integrate it with version control. Its docker based approach also made it appealing from an integration standpoint. It could fit inside our current CI workflows without requiring any major change while enabling us to tailor the images to our exact needs.

We would need to integrate the custom images in our CI workflows. The goal would be to have lightweight purpose-built containers for every training we offer. This eliminates the resource waste of having gigantic containers with everything needed for every training when we only need the files and software for a single project.  
Currently, we are using Azure DevOps with private repositories and pipelines  - a succession of steps followed by our CI/CD solution - pushing images to Harbor - a private docker registry. To create our custom images, we would create a pipeline that will build an image and clone the appropriate training projects inside it directly from the repository.
We would also want to host Dockside on our Azure Stack solution to simplify the DNS situation.

Since Dockside is still in an early development stage, not all the user management features are available yet. We would like to see an OpenID Connect implementation to be able to log into dockside with our existing users.

We are very excited to see the advancements of the project and how far we can take it in a second growth session.