Legacy apps are sometimes very hard to modernise or are not worth modernising. You just want them working in their current state with minimal overhead. Using Docker to migrate the legacy application to Azure App Service gives you many benefits. It improves SLA and scalability, removes the need for OS management/patching and ultimately extends the shelf life. I recently migrated an on-prem legacy classic ASP application by containerising and then hosting it to Azure App Service and would like to share the experience and challenges.
Migrating the ASP Classic may not be straight forward in some cases and may require code changes. Application evaluation is required to check which parts can be migrated and the other parts that need to be rewritten. E.g. Azure App Service does not allow the registration of COM/COM+ components on the platform. If your application makes use of any COM components, these would need to be rewritten in managed code. If you are using Windows Authentication you may need to replace that with Azure AD and would require additional code and potential application logic changes.
- Setup Classic ASP Application
- Create Dockerfile in the same application folder
- Create local Docker image
- Push the Image to Azure Container Registry
- Create Azure Web App using Docker image
Classic ASP Application
For the purpose of this tutorial I am going to create classic ASP and will migrate that to Azure App Services. I have a very simple application with header, footer and page content.
The application is configured in IIS 10.
The next important step of the migration is Dockerfile. We place the Dockerfile in the same folder.
The Docker file (available in source code) will install all the necessary Windows features and setup the application within the container image. In a real life scenario you might have an application with a database like SQL and you might be using DSN on your existing Windows machine. If DSN is required, then search the Docker file and update the DSN setting. You can see in this example that I have set the placeholder for the DSN setting.
Once we have the Dockerfile, we need to build the code and create the Docker Image using following command,.
docker build -t aspclassic -f dockerfile .
After a successful build our image is ready. We will run the image locally and test.
docker run -d -p 8086:80 --name aspclassicapp aspclassic
If we browse the localhost:8086 we can see that Classic ASP is running from the docker container. Our container is ready to be pushed to Azure Container Registry.
Create Azure Container Registry (ACR) and Pushing Image
ACR is container registry for saving the docker images. We will push the latest image to ACR and later pull this image in Azure App Service.
Create ACR from Azure Portal.
After the ACR is created, login to Azure CLI (Powershell)
Login to ACR ( classicasp is ACR name in my case. you need to choose what you created in previous step)
az acr login --name classicasp
Tag the image with ACR name and path ( classicasp.azurecr.io is path of my ACR. You can go to the Azure portal (or CLI) and find the name of your ACR)
docker tag aspclassic classicasp.azurecr.io/aspclassic:latest
Push the image to ACR
docker push classicasp.azurecr.io/aspclassic:latest
Once the image is pushed to ACR, you can browse ACR and check for the image.
Create Azure Web App
Next and final step is to create Azure App service for the container. Go to Azure portal and choose Web App for Containers
Fill the basic info and choose windows container.
Next fill the docker tab. Choose the ACR you created in previous step.
Once you have filled the mandatory info simply create the app service. You should have app service ready in few minutes. You can browse the URL and there you go!
For more information please click here
Author: Imran Arshad, Development Lead at Olikka
Passionate developer and Architect. Loves to learn and explore new technologies. Imran has worked on different stacks and technologies including but not limited to ASP.NET CORE, SharePoint, Azure, AWS, Angular 5 , JQuery, SQL and much more.