I have been creating software over the years and each time new stuff comes up from the tech scene in this game of crafting code. These gems are always magnificent and hence way much better. For us who have been running on tech for some time, some have given up others have stayed straight up like a needle catching and staying relevant. A couple of months back i wrote how awesome ansible is. It is still awesome.
Over the past few months i have got the opportunity to dockerize my skill set. I have always taken docker lightly but ever since i started using it full scale, it is like watching the black panther movie all over again.
I have been a victim of being hacked by servers 🙂 . I mean deploying an app on some version of linux and the library breaks. As consequence nightmares begin. For some crazy errors, you can’t install or uninstall the library easily. How do you handle running of different versions of the library on the same PC?. If you are a hustler, with more patience, trial and error you can figure out the chauff. Figuring out a buffet of enigmatic mix of code errors is a quagmire, to me i h8t it because i want to be productive creating clean code instead of wasting time doing non relevant thing. Then on a bad day when the OS has made an update, another library on your server gets screwed and your app fails. You get back in the mix of trying to figure out stuff, trial and error again and agaIN and AGAIN. Sometimes you are working tirelessly to create the money monster app, then you are broke, then you are banking on making a major demo to rake some cash 🙂 , because of some library update somewhere things go south! As a result you spend your entire time repeating your self and fixing stuff. Meanwhile your client score goes down.
Sometimes you are technically gifted but then you find your self not being productive just because probably you are not using the right tools. May be you need some static analyzers such as linters or use gulp/grunt to run repetative tasks. Perhaps you test your code but you dont want to wait for tests to run for hours before the product is shipped. May be each time you run the tests, it duplicates data and may be the tests have to run serially.
Another thought, have you ever been to an organisation with all these kinds of unix servers yet they are under untilizing the servers? How, by wasting the number of CPU cycles and memory as a product of keeping the computer idle? Such people even boast of having too much RAM available 🙂 . such thinking coupled with management makes it complex to manage apps. In such environments, in most cases data is duplicated on the servers as well.
Well if this sounds like your story then be calm and start using docker.
Docker allows you to alleviate if not most of these problems like charm. It is simple and easy easy to upgrade, It just makes sure that your app is using all resources available as correctly as specified, It allows millions of tests to be ran at the same time and data is not duplicated. It has clear seperation of computing resources.
Everything works as result of proper plan with the tools available. So i strongly advise that you need to be disciplined enough to know that certain things need to be done right. You need some checklist or some sort of standard or way of doing things. You need to be aware that your code should be running on version control system, unit & integration tested with CI managing releases. You need to know what kinds of servers to use for your test environments, staging and production environments so as to maximise return of investments. You need to be aware that you should back up your data among many things. some of these things need to be in place in order to profit and benefit from using technology.
First of all Docker is different from Virtual Machines though very similar out of the box.However docker still beats VM’s hands down. Docker creates a black box with only the right amount of resources that app needs and keeps this separate from the rest of other environment through an interface of binding ports. Each container is like a person, self contained, self operable and autonomous. Just like a you can open box and see the hidden detail, same applies to this magical tool if you wanna test the real stuff.
In series of up coming block posts i plan to share how you can set up a docker infrastructure for the different programming languages i know. Then dive through setting up a proper infrastructure through combination of docker with configuration tools, basically again from experience and examples.