I’m a cost engineer looking to learn about some of the advantages of using containers for software development. Part of what I do is produce activity-based estimates of cost, schedule and uncertainty using our company’s software program for projects in different organizations. I’ve had a few clients ask about containerized software and how this changes the estimates.
I have minimal experience in software development and am just learning about containers. I’ve used Docker a bit but only know the basics and still have a lot to learn. Anyone that uses Docker for software development, how has is helped you and what do you do differently with access to containers? And how do you think it can improve a large scale software development project?
Docker is not a magic wand, so using Docker doesn’t mean you will always work faster. You need to learn the basics and be willing to change you create an application to support containers. If you do it right, you can save time when you need to deploy the application and it works on your machine but it did not always work on the server before. Or when you have an app relying on a specific Java, PHP, Python or any other interpreter, compiler or libraries which is not available on every Linux distrivution. You don’t need to install a virtual machine, assuming of course you have enough resources to do that and remove the VM after development. Just as an example. I recently managed to fix a very strange error in an application that I developed more than 3 years ago in PHP and I barely did anything in PHP since then. Still, I had my compose files to easily run the app without remembering how it should be configured, I had Dockerfiles to build the required environment for the app including some debugger tools and I also had a Docker image in a Docker registry to use a legacy nodejs which was not legacy at that time. I also had some mistakes in my compose files so before I could fix the problem, I needed to fix my compose file and use a specific version for each image instead of the latest. Some of my scripts was also wrong, because I forgot to update them. So it could have been 1 day to fix the issue if I did not make those mistakes. And all this after 3 years almost without PHP, just almost because I had some hobby projects but I had very little time for those.
Duing development you can also have issues and say “I could have done it much faster without Docker”, but as you learn it becomes easier. As the used technology and best practices change and often requires containarization, continuous integration, continuous deployment and so on…, you probably want to be prepared and use containers for development too, because that way the deployment will be much faster. Instead of arguing with the system administrator whether the server was configured incorrectly or the application was not tested properly and waste hours or days on fixing the issues or reinstalling the operating system, you can just build your own Docker image, have your configuration to run containers with the proper parameters and be happy Okay, you cans till have issues if the Docker daemon is not compatible, the storage driver is different, or something is not enabled in the Linux kernel, but there is much less chance to have problems.
If you don’t need to remember everything when you need to fix something in a project or when you want to hire a new programmer to the job who can run a command and have at least a simple version of the app to understand it, you can avoid a lot of pain.