Introducing minienv 0.1 for Kubernetes

Run mini Docker Compose environments in Kubernetes for on-demand, web-based, no-install sample applications

Ever since I joined IBM as a Developer Advocate I have been thinking about and working on ways to make sample applications more accessible to developers. That combined with an abnormal obsession with containers has resulted in minienv.

Note: minienv is an open source project that I built in my free time and is not affiliated with or endorsed by IBM.

minienv was created to help make it easier to deliver sample applications and developer tutorials that connect to databases and other backend services. If you want to learn javascript and frontend web development there are a lot of really great web-based tools available, like CodePen and JSFiddle, but what if you want to learn how to connect a Node.js application with MongoDB, or a Jupyter notebook with Apache Spark? With minienv users get their own mini Docker Compose environments where they can experiment with just about any technology, as long as it can run in a container.

Here’s a preview:

minienv is a web application and collection of backend services that allow you to quickly spin up Docker Compose environments in the cloud that you can access from your web browser.

minienv includes an online editor that allows you to edit source code or data files included in your Docker Compose environments. This helps make minienv a great tool for learning (or teaching) new programming languages, databases, and other technologies right from your browser.

minenv runs on Kubernetes, but I am also working on support for Docker Swarm.

You can try minienv at http://bx.minienv.com:31111 or http://gke.minienv.com:31111. The former is running on a free single-node Kubernetes cluster in the Bluemix Container Service and can run up to 4 environments (instances of a sample applications). The latter is running on a 2-node cluster on Google Container Engine (g1-small) and can run up to 6 environments. When you run minienv you specify the number of environments you want to provision. In these cases I am running on fairly lightweight hardware, so I’ve only provisioned minienv to run a handful of environments.

How It All Started

Last fall I discovered that Docker Compose was a really great way to deliver sample applications. In three simple steps developers could install and run sample applications that included databases and other backend services:

  1. Clone the repo
  2. cd into the sample application directory
  3. Run docker-compose up

That’s it! With those 3 steps you could have a Swift application connecting to CouchDB, or a Scala notebook connecting to Apache Spark.

I felt so strongly that this was a great way to deliver sample applications that I built a bunch of them in my free time (it was also a great way for me to learn new technologies) and created this ugly website: http://dockercomposeup.com. I also created a handful of videos showing how it worked. Here’s one of them:

I still think Docker Compose is a great way to deliver sample applications, but a few months ago I was inspired to take it a step further.

Play With Docker

minienv was inspired by a DockerCon presentation on Play With Docker. Play With Docker is an awesome way to learn Docker right in your web browser. If you’ve never tried it I highly recommend checking it out.

I first tried to figure out a way to run my Docker Compose sample applications inside Play With Docker, but pretty quickly realized that it wasn’t the right solution for what I wanted to accomplish. I had been playing a lot with Kubernetes in my free time (I don’t have a lot of opportunity to work with containers for my day job, but I did try and shoe horn in some of my existing work into a blog post on Kubernetes here), so that’s the route I took, and before I knew it I found myself knee-deep in containers:

I spent the next 2 1/2 months building minienv, learning the ins and outs of Kubernetes, and learning some Go while I was at it (I always try to learn new programming languages or frameworks on side projects because ultimately most never make it, and at a minimum I want to gain new knowledge and experience).

So, today I am happy to release version 0.1 of minienv for Kubernetes. There is still a lot of work to be done – mostly on performance, security, and of course documentation, but I’m pretty excited that I was able to get a prototype up and running in just a few months.

If you are interested in learning more about minienv please hit me up. If you you are interested in how minienv runs in Kubernetes this video covers the basics:

Thanks for reading!

-Mark