Containers offer a better way to develop and deploy applications with better speed and consistency. See how this can have a positive impact on your business.
You have probably heard of containers and new technologies like Docker, which has popularized containers in recent years, but why should you care? Why have containers changed the game for DevOps and IT?
Before we get to the why, lets quickly define the what. According to Docker,
A container image is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it: code, runtime, system tools, system libraries, settings. Available for both Linux and Windows based apps, containerized software will always run the same, regardless of the environment. Containers isolate software from its surroundings, for example differences between development and staging environments and help reduce conflicts between teams running different software on the same infrastructure.
Containers consist of two entities. The container image (mentioned above) and the container instance, often just referred to as a container. The image defines the container. When you run a container it spins up an active (working) version of the image. It’s important to know the difference however in casual conversations often no clear distinction is made.
Spinning up new environments can be a matter of seconds instead of minutes or hours as with other virtualization technologies. Once an image exists on the host you can spin up a new container ready to take requests in less than 1 second in many cases.
Containers offer more flexibility in both development and deployment. For instance, the same definition that creates the Docker container on a dev environment could be deployed in separate servers in production. They could even be clustered. It can make the definition and management more convenient.
Environments can be managed by environment variables instead of juggling config files with tools like Puppet or Capistrano.
Being able to define your environments in code means you can better leverage your existing source control tools (e.g. Git, SVN) to version your environments just as you would your code. These environments as mentioned easlier can move with you from development through production. This means your continuous integration tools (or continuous deployment) can also leverage these container definitions. CI / CD is changing the way companies build and scale their applications (think of Jenkins, CircleCI, & Wercker).
In our projects we have seen using tools like Docker and CircleCI you can have clean environments spun up and full test suites ran in just a few minutes. This would take 10s of minutes not long ago.
Containers bring with a new suite of server and container management tools with them. This new breed of DevOps really changes the game. The most popular tools we have seen to date are Rancher, Kubernetes and Amazon ECS. Paas tools and traditional tools are also adding container support. There are lots of other exciting products coming out of enterprise companies like RedHat, Microsoft, Amazon and others that help deal with scaling your application services.
Last but not least, we can’t talk about the beauty of containers without talking about microservices. The notion of running dozens of independent APIs and apps in any practical and managed way would be out of reach of most mid-sized companies and fledgling funded start ups a few years ago. Only tech behemoths like Netflix, Ebay, Salesforce and Amazon were pulling these off for a while. With the right architectures, automation, and containers microservices become practical for a whole new market of businesses.