Let’s imagine this :
18h, Developer has delivered/shipped a tested version of software to production. 2 minutes later, the boss comes.
Boss : hi, the software (that you have shipped) is not working.
Developer (with a big ? on his head) : What ? That’s impossible ! It works in my PC and all tests are green.
Boss (turning around) : find the raison before 19h …
Developer : …
15 minutes later, all tests are still green in local PC. But prod is still red. Developer checks 3 times, the codes are exactly the same. What happens ?
30 minutes later, still at the start point. Developer becomes crazy. Which versions of server I have used ?
Local server version : 1.1.2 / Prod server version : 1.1.1
Does this cause the problem, checking about the release note, ah, yes, a new function added …
The problem solved.
If you have met this kind of problem, I advise to take a look at a open source tool which is called Docker. (this is not a advertisement! This is what I maybe we need)
From wikipedia :
Docker is an open-source project that automates the deployment of applications inside software containers, by providing an additional layer of abstraction and automation of operating system–level virtualization onLinux.
From official site of Docker :
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications. Consisting of Docker Engine, a portable, lightweight runtime and packaging tool, and Docker Hub, a cloud service for sharing applications and automating workflows, Docker enables apps to be quickly assembled from components and eliminates the friction between development, QA, and production environments. As a result, IT can ship faster and run the same app, unchanged, on laptops, data center VMs, and any cloud.
And if we have more than one environments(such as local -> test1-> test2 -> prod), and if the problem came from prod, we have to find and solve it from local environment and re-test from test1, test2 and prod. Wasting, doesn’t ?!
These is an advantage which attract me : The Docker Engine container comprises just the application and its dependencies. It runs as an isolated process in userspace on the host operating system, sharing the kernel with other containers. Thus, it enjoys the resource isolation and allocation benefits of VMs but is much more portable and efficient.
What can be mentioned is the Docker Engine container, it makes me think the java JVM, write once and run everywhere.
Hope in the future, Docker could help us, to really do that instead of write once, debug everywhere.
If you interest in it or want to learn more about it. There is a video from his Founder and CTO on Youtube, which talks about what is and why Docker. Enjoy it and don’t forget to share your experience with me !! Thanks !