Towards Containerization Strategies with Minimal Refactoring

In the modern computing world, containerization is an emerging virtualization technology widely used for packaging a software service and its dependencies to run in various computing environments. Organizations invested a significant amount of resources such as time, cost, and effort developing their software solutions, typically written several years ago. These software systems contain millions of lines of legacy code that is hard to change and maintain. Currently, they are deployed either on traditional physical servers or through virtualization technology, e.g., virtual machines. Such deployment models give rise to several problems, e.g., computational and operational overhead. Containerization aims to address these challenges. It helps companies to modernize their legacy applications and enables faster software delivery with less overhead. The typical approach to migrate such legacy systems into containers is to decompose them into smaller components, i.e., microservices. However, decomposing such systems relies on various factors, which are sometimes not favorable for businesses. These factors include application size, associated dependencies, available resources, and associated costs. Therefore, there is a lack of a structured approach in order to transform workloads from virtualized to containerized environments. By considering the lift-and-shift approach, companies can realize several immediate benefits promised by container technology. Such benefits include increased stability and availability, less overhead, a convenient deployment, and faster updates. This thesis presents a systematic technique, outlining migration steps that can be used to migrate legacy applications with minimum refactoring and evaluate the actual feasibility of the lift-and-shift approach. The prospective migration path can be used in a variety of software solutions comprising of varying technologies. In this work, Docker containers are used for the migration of mainly java-based legacy applications. These containers are then deployed and managed on the container management system Kubernetes.