Containerization of Microservices for Deployment in the Cloud

Render image of a cloud containing servers that are connected to a client system via a network.

Key Facts

Background

The services previously hosted in-house are to be provided in the cloud in future. The aim is to benefit from the advantages of a containerized provisioning method.

Situation before

The services of the web landscape were previously provided on separate servers as Windows services. As the cloud is to be used as the platform for provisioning in future, this approach no longer fits and needs to be modernized. Scalability is also limited. If significantly higher resources are required, a new server must first be set up and integrated.

Objective

The following objectives were identified:

  • Services can be provided independently of the underlying platform
  • The scalability of individual services is to be simplified and optimized
  • New developers can start developing on the backend locally without a major setup and simply run it

Implementation

The other objective for the migration to the cloud is that the services should be provided in a Kubernetes cluster. Docker was therefore chosen for containerization.

The first step was to switch from a deployment on Windows systems to a deployment on Linux systems. The dependencies were analyzed for this. One important finding was that adjustments had to be made to the PDF library, for example, to run an executable Linux version with the correct settings.

To optimize the image size, the created images were analyzed intensively using the “dive” tool. To achieve the optimum, some changes were then made to reduce the size of the image.

Another important aspect was the local executability on development computers. This should enable simplified collaboration between external service providers so that they can provide better support in the development process. Equivalent solutions that can be executed in a Docker container were researched for all externally required services, such as the database, Redis or the messaging system. These were wired together with the services in a Docker Compose file to enable execution with a single click.

My Contribution

As I was very curious about the technology and the setup, I worked intensively on this project to improve the developer experience and enable future deployability to the cloud. To this end, I took care of researching solutions for libraries and dependent services to enable executability in Docker. I also created the build definition files (Dockerfiles) and analyzed the images with “dive”. Finally, I married the artifacts via the Docker Compose Definition and enabled 1-click execution of the environment on the development computers.

Technologies Used

The implementation was carried out with Docker and Docker Compose. Kubernetes was only used in a later iteration when it came to the actual deployment in the cloud.

Customer Benefits

The first step towards deployment in the cloud has been taken. With the help of the results from the groundwork, the customer can initiate deployment to the cloud at any time. In addition, the utilization of external service providers has been improved. This allows the customer to make better use of the commissioned budget. When onboarding new employees, costs are also reduced by 11 %, as fewer steps are now required to set up the backend environment on the developer’s computer and executability can be ensured more quickly.

You want to move your application to the cloud platform and need support in getting it done?