Once in a while every team is faced with infrastructure updates and datacenter moves. It shifts focus from solving everyday challenges to dealing with an ongoing series of necessary tweaks that we encounter as we make applications compatible with a new environment.
First, hypervisors like VMware ESX came to aid in these sorts of tasks with virtual machines that can be easily provisioned per request. This was followed by the cloud, where virtual machines can be even more flexible and developers can have whole environments created and decommissioned with the click of the button. But this wasn’t a perfect solution since somebody had to still manage images for new servers, as well as apply security updates and patches.
Next came Docker with its promise to separate applications from infrastructure. Docker is a container management system that lets companies package, ship, and deploy software using standardized units and APIs. The benefits of this system include the ability to bundle your software with versioned libraries and run it on any host, regardless of the host system, platform, or provider.
Docker also offers a distinction between developer and devops functions, where developers get to work on the replica of the staging and production environments. This eliminates any discrepancies between different setups or servers. In addition, developers are able test any library updates locally without fear of breaking a live environment.
But Docker still has some downsides. Since containers are meant to be stateless, developers need to use volumes for any file storage. Furthermore, logging gets complicated as it’s expected only to standard out, not the file system. Despite its cons, Docker seems to be here to stay.
These days, conversation about the orchestration of containers is a hot topic with multiple solutions like Kubernetes and Swarm mode. Big cloud providers are also offering their version of container services.
Companies have a variety of options while choosing whether to go with a cloud-based container service, to deploy their own Docker closer, or to use a container service provider like Digital Ocean.