Microservices, Containers and Docker
Working with a microservices architecture creating small services and with a need for light-weight mechanisms, independent deployment, scalability and portability, Erhan Ekici believes a container technology like Docker can provide an ideal environment for deployment of these services with respect to speed, isolation management, and lifecycle.
Erhan, working at IBM, describes containers as light-weight runtime environments with many of the core components of a virtual machine and isolated services of an operating system, designed to make packaging easy and execution of services smooth.
Other reasons that for Erhan make containers, and Docker, worth considering includes:
- With a container portable among different platforms, application portability can be achieved by putting an application and all its dependencies into that container.
- Containers comprise just the application and its dependencies which together with the lightweight nature of containers makes them efficient regarding resource utilization.
- Containers can provide user environments with strictly controlled resource requirements without using virtualization.
- Container technology is a new emerging technology with Docker as a leader and many large companies have signed partnership agreements with Docker.
Uri Cohen, a product team lead at GigaSpaces, describes Docker as excellent for microservices as it isolates containers to one process or service. This intentional containerization of single services or processes makes it very simple to manage and update these services. For Uri it’s therefore not surprising that this has led to the development of frameworks for managing more complex scenarios.
One example Uri notes is Kubernetes, an open source project designed for microservices by extending Docker's capabilities. By describing the characteristics of an image Kubernetes can deploy and manage multiple Docker containers of the same type. A common scenario though is managing something comprised of multiple tiers and that can be hard to achieve using Kubernetes, a gap in functionality that Uri thinks can be filled by a TOSCA blueprint, the use case for TOSCA is dealing with more complex orchestration, e.g. a complex application stack or a more complex microservice.