Red Hat OpenShift, CoreOS Tectonic, Cloud Foundry, Fabric8, Canonical, & Mirantis Cloud
Docker was founded in 2010 by Solomon Hykes as an internal project of the PaaS company dotCloud and part of the Y Combinator start-up fund. In 2013, Benjamin Golub joined the company as CEO and the pair navigated a hugely successful pivot to focus on container software development, leading to a total of $237 million USD in venture capital seed funding in Silicon Valley. According to Sramana Mitra, Docker received funding from Goldman Sachs, Coatue, Northern Trust, Lightspeed Venture Partners, AME Cloud Ventures, Trinity Ventures, Sequoia Capital, Greylock Partners, Benchmark, Sequoia Capital, Jerry Yang, and Insight Venture Partners, ultimately leading to a valuation of the company of over $1.3 billion USD and "unicorn" status. Kubernetes was first announced in 2014 as an open source project growing out of Google's internal "Borg" platform, with version 1.0 released in 2015 under the management of the Cloud Native Computing Foundation (CNCF). Kubernetes automates cloud orchestration for containerized applications, allowing them to scale beyond the single server model to support the highest levels of enterprise web traffic. Both Docker and Kubernetes have seen huge adoption across all business sectors internationally in the last few years, becoming the foundation of best practices in DevOps as companies seek to modernize their legacy software applications and transition to fully embrace advanced cloud computing web server architecture. This year, Steve Singh moved from his role as Docker's Chairman of the Board to replace Golub as the CEO of the company.
Docker has been quickly embraced by programmers and developers primarily because it solves many issues related to server configuration & application dependencies, eliminating conflicts between the local and remote environments by using standardized disk images, leading to greater portability, agility, & efficiency in workflow operations. Enterprise companies have relied on Docker to modernize legacy applications to run in public/hybrid cloud environments, increasing the speed in which new features and changes can be pushed into production (i.e., Agile/Scrum vs. Waterfall/Spiral development teams) through greater reliance on Microservices. When compared to Virtual Machines (VMs) & VPS, containers are much lighter and quicker than hypervisor-based hardware partitions, with the ability to boot in seconds using a shared kernel and minimal operating system. Most VMs require a full OS installed on the partition, leading to larger CPU, RAM, and storage allocations that add extra costs as a business scales to hundreds or thousands of active servers running at a time. Google famously launched and managed an estimated 2 billion containers per week in operations while running "Borg" over a 10 year period internally before Kubernetes was released to the public. Kubernetes is the primary cloud orchestration software that includes load balancing, data & storage synchronization, rolling server software updates, and auto-launching of new container instances by demand in order to permit web applications to scale to support more traffic than a single hardware server can manage individually. Docker Swarm also can be used instead of Kubernetes to build-out similar functionality to the AWS EC2 cloud server platform independently, but as this is something of "the holy grail" of cloud computing currently, there has been a lot of competition in the sector and many software start-up companies competing in the same space. In 2017, all of the major public cloud service providers (AWS, Google, Microsoft, Oracle, IBM, etc.) include integrated Kubernetes support on their platforms primarily targeted at enterprise corporations and software start-ups as part of their Containers-as-a-Service (CaaS) product offerings.
Docker 101: Introduction to Docker - Jenny Fong (Webinar 2017)
'Docker is an open platform for developers and system administrators to build, ship and run distributed applications. With Docker, IT organizations shrink application delivery from months to minutes, frictionlessly move workloads between data centers and the cloud and can achieve up to 20X greater efficiency in their use of computing resources. Inspired by an active community and by transparent, open source innovation, Docker containers have been downloaded more than 700 million times and Docker is used by millions of developers across thousands of the world’s most innovative organizations, including eBay, Baidu, the BBC, Goldman Sachs, Groupon, ING, Yelp, and Spotify. Docker’s rapid adoption has catalyzed an active ecosystem, resulting in more than 180,000 “Dockerized” applications, over 40 Docker-related startups and integration partnerships with AWS, Cloud Foundry, Google, IBM, Microsoft, OpenStack, Rackspace, Red Hat and VMware.' Learn More About Docker.
"Put simply, a container consists of an entire runtime environment: an application, plus all its dependencies, libraries and other binaries, and configuration files needed to run it, bundled into one package. By containerizing the application platform and its dependencies, differences in OS distributions and underlying infrastructure are abstracted away... A container may be only tens of megabytes in size, whereas a virtual machine with its own entire operating system may be several gigabytes in size. Because of this, a single server can host far more containers than virtual machines. Another major benefit is that virtual machines may take several minutes to boot up their operating systems and begin running the applications they host, while containerized applications can be started almost instantly." Learn More About Docker Containers & Kubernetes.
While Docker is the most popular container software and Kubernetes the most respected of the cloud orchestration engines, there is still a fair amount of competition in this field. Produced by the same programmers and developers as CoreOS and bundled with the Tectonic distro, Rkt is the most popular container alternative to Docker in 2017. Another option is LXC/LXD, with the latter released by Canonical primarily to integrate with Ubuntu and OpenStack in developing complex enterprise and scientific research solutions. In addition to Docker Swarm, Apache Mesos has the Marathon engine and Cloud Foundry the Diego framework which provide similar native functionality to Kubernetes. However, because most developers, programmers, and IT business managers are now standardizing around Docker and Kubernetes, the majority of the powerful new ecosystem applications are being built for these platforms. Users of these tools are forced to make a primary decision whether to build their own solutions on private, public, or hybrid cloud architecture, or sign up for a managed Container-as-a-Service (CaaS) approach. Mirantis has released an excellent summary of the main CaaS products available on the market today with a review of their various strengths and weaknesses. According to Mirantis, the main CaaS options for IT managers to consider in 2017 are:
- Mirantis Cloud Platform (MCP)
- Red Hat OpenShift
- Cloud Foundry
- CoreOS Tectonic
- Canonical Kubernetes
The transition to containers in IT has also opened up significant competition in building new, lightweight distributions of Linux to use in cloud production environments, with CoreOS, RancherOS, Red Hat Atomic Host, Ubuntu Snappy, and VMware Photon the most popular current choices.
Two major advantages of using containers in web application development and production environments in the cloud are the ability to provide Continuous Integration/Continuous Delivery (CICD) solutions at scale and the potential to make large monolithic software applications more reliable online though the use of Microservices. CICD solutions are an important aspect of contemporary Agile/Scrum project management and containers simplify the process of updating live software applications with new versions, bug fixes, or security upgrades. Docker integrates seamlessly with DevOps tools like Jenkins, Ansible, Chef, Puppet, & SaltStack for better version control in production. Microservices draw upon Software Defined Networking (SDN) standards and BGP-as-a-Service (BGPaaS / Border Gateway Protocol) opportunities to allow developers to implement object-oriented programming best practices in web applications. This permits behind-the-scenes fragmentation of complex data processes and workflows to different hardware that can be re-assembled seamlessly in the web app for an improved user experience and better processing times. Microservices permit containers to maintain their light weight and quick bootability while connecting to vital information, files, and functions that are stored in databases or storage drives outside the container, usually via APIs or RESTful http processes.
Anyone who would like to learn more about Docker can sign-up for a free (time-limited) online demo of Docker Enterprise Edition at dockertrial.com. Play with Docker (PWD) includes a hosted Alpine Linux demo with the further ability to test Docker Swarm and command line tools. For those looking to learn more about Docker & Kubernetes, the following links include a number of excellent tutorials and guides.
- Container Orchestration with Kubernetes: An Overview
- Containers, Docker, and Kubernetes Part 1 / Part 2
- Scaling Docker with Kubernetes
- Microservices With Kubernetes and Docker
- BGPaaS in OpenStack – Kubernetes with Calico in OpenStack with OpenContrail
- Set Up a CI/CD Pipeline on AWS
- The Journey to 150,000 Containers at PayPal
- 12 Hot Application Container Startups
"The first version of Docker was released in 2013, and in the 3 years since launch, Docker has completely transformed how Linux developers and ops build, ship and run apps. With Docker Engine and containers now available natively on Windows, developers and IT-pros can begin the same transformation for Windows-based apps and infrastructure and start reaping the same benefits: better security, more agility, and improved portability and freedom to move on-prem apps to the cloud." Learn More About Docker on Windows.
"Kubernetes is actually an object store, plus code that interacts with those objects. Each object that you store has three parts: the metadata, a specification and the current observed status. As a user, you have to provide the metadata, and a specification in which you describe the desired state of the object. Kubernetes tries very hard to make this desired state happen, reports on its progress under the status key of the object. Kubernetes deployments manage stateless services running on your cluster (as opposed to for example StatefulSets which do manage stateful services). Their purpose is to keep a set of identical pods running and upgrade them in a controlled way – performing a rolling update by default." Learn More About How Kubernetes Deployments Work.