Learning Docker ? Move To The Cloud !


Docker is all the rage and there are valid reasons for it. Every software developer needs to understand this fundamental shift that is happening when it comes to packaging, delivering and running applications as containers. It would definitely pay to start learning this technology. There are enough resources on the Net to do that today and hopefully I will come around with some tutorials that can help demonstrate how useful Docker can be to individual developers like you and me.

The focus of this blog post is different though. It is about which platform/OS should I start learning Docker on. And then I would like to make some points from the perspective of countries/individuals where it is not easy to get high speed internet access all the time for several reasons. My focus is going to be for students who want to get started and have limited resources.

Which platform : Linux, Mac or Windows?

So first up is which platform ? It is clear from the current state of Docker that it runs natively only on Linux and not on Mac or Windows. Agreed that there are solutions like boot2docker available that make it possible to run on Mac or Windows. But let me throw out Mac from the equation altogether. Nothing against the OS as such but in my experience from where I stay, the developers that I talk to and current circumstances, I believe 1 in 1000 people have a Mac as compared to a Linux or Windows laptop. The simple reason is that of economics.

boot2docker is good! But keep it on hold for a moment!

Despite that I suggest that you do not do anything locally even via boot2docker. The chief reason (and I won’t go into every detail) is that when building up initial docker images, you have to start with some version of the OS. That is perfectly fine but the problem that comes up is that this initial download of the base OS image that you begin to work with is likely to run into 100’s of MB that need to be downloaded first. This is both time consuming (on slow Internet access) and possibly expensive too for you to upgrade to more expensive plans. As a student of the subject, you want to see results quickly. The First Time To Hello World (FTTHW) has to be as minimal as possible to create the right impact for you. Given that, take my advice that in the initial days of your learning – keep away from this loop.

Embrace the Cloud

So what does that leave you with? It leaves you with the IaaS providers like AWS, Google Cloud Platform (GCP), Azure and others. Yes, it is going to cost you a bit but believe me it is a very minimal expense to rent out a Linux Box on the high quality, top class networks that your instance is hosted with and blazing fast network access to Docker images.

This is what I have been doing for the past several weeks and have been recommending to all folks that I come across:

  1. Go ahead and get yourself an account on Google Cloud Platform. It is easy to get started and you even get a $300 credit for a trial period of 2 months. Trust me $300 is a lot of money for IaaS services , especially if you are looking to learn about the platform and its services.
  2. Provision a Google Compute Engine (GCE) instance. Select one of the Linux images available and you are all set to install docker.io and move forward with it.
  3. As an alternative to Step 2, you can directly create a GCE instance of a Container VM image itself so that it is all setup with Docker. Check out the documentation on how to do that.

Parting thoughts

I believe the above steps will keep the productivity high and keep your costs to a minimum. Once you are done with the instance, you can simply delete it. Once you have your head wrapped around Docker, you will be better prepared to then go ahead and do stuff that you want on your local machine.

Some folks mention that the online Docker tutorial is good enough. I agree to some extent but there is nothing compared to setting up your own box and playing with Docker on your own. This way you can experiment with other Docker images, build a few yourself and go through the mechanics of Docker present at the official documentation site. Do try out the examples, especially the ones that are relevant to the software stack that you are working on.

I would love to hear your thoughts on this. It is possible that I might have completely missed out something.

Note: I have taken the example of Google Cloud Platform that I primarily use. Linux Instances are available on any other cloud provider too, so pick your choice.


Google Cloud Platform Updates – Articles

Over the last couple of weeks I have covered the news around several features that have been released on Google Cloud Platform (GCP). I write these articles on ProgrammableWeb. Here are the list of articles:

The articles demonstrate the recent spate of feature releases on GCP. They are targeted squarely towards the developers/organizations and helping them get more productive, write secure apps and finally get a shot at a messaging service in GCP. Not to speak of Google Cloud Storage Nearline that changes the game when it comes to cold data storage.


Android Studio + Cloud Endpoints + Objectify Persistence

Android Studio has solid support for working with Google Cloud Endpoints. I have written a series of tutorials on working with Gradle, Android Studio, Cloud Modules over here. One of the episodes in that chapter was around generating the Persistence Layer in your Endpoints using Objectify.

At the time of that writing, the skeleton wrapper code that was generated for Endpoint when you provide it your Entity class was minimal. It was of not much use and you had to pretty much write the Objectify code for list, get, add, update and remove methods.

Since then the support has been upped by several notches and I should have written about this earlier but got around to it only now. The bottom line is that if you have an Objectify annotated Entity code, Android Studio is currently doing a great job of generating the Endpoints class with all the persistence goodness of Objectify generated for you. This can greatly help to reduce the time to generate working persistence code for your Mobile backend.

Continue reading