16 Red Hat OpenShift and IBM Cloud Paks on IBM Power Systems: Volume 1
2.2.2  Coexistence of virtual machines and containers to modernize workloads
The component that is responsible for running containers is the container engine (Docker). In 
a hybrid cloud or not environment, you can have a container engine running on a stand-alone 
server or in a virtual machine-based server, as shown in Figure 2-5. For the functional 
standpoint, there is no difference where the container engine runs. Some management 
advantages exist for having containers on virtual machines, mainly in terms of flexibility and 
control. Depending on what you need to do, a virtual machine might be the best place to host 
those containers. 
Figure 2-5   Docker engine versus virtual machine
The synergy of combining virtual machines and containers empowers the system 
administrator to better tune the resources (processors, memory, storage, and network). They 
also can optimize the overall usage of the available assets to maximize and simplify the use of 
the physical hardware.
For management and infrastructure nodes of a cloud cluster, the use of virtual machines 
might have more advantages. The system administrator has robust control of the resources 
that are assigned to these nodes, which makes it easy to maintain the nodes as active and 
well-tuned.
The decision to run it on a virtual machine or in a bare-metal machine must follow largely the 
non-functional requirements of the architecture decisions. You can also take advantage of the 
virtual resources that are provided by a virtual machine. Containers can interact with virtual 
machine-provided services. For example, your application containers must interact with a 
database that uses storage that is backed by volumes that are managed through IBM 
PowerVC.