First page of Microsoft's 100,000-partner directory, sorted by responsiveness Microsoft Solutions Partner — Security, Modern Work, Infrastructure, App Innovation Microsoft partner since 2006 1,100+ organizations under management
Home/Services/Application Containerization to Azure
Development

Application Containerization to Azure

Application Containerization to Azure packages an application you already run — on a virtual machine, a developer's server, or an aging host — into container images and deploys it to Azure without rewriting it. The engagement covers a containerization assessment, Dockerfiles and a local run configuration, an image build pipeline into Azure Container Registry, configuration and secrets moved out of the code into Azure Key Vault with managed identity, and deployment to the Azure target that fits the application — Azure Container Apps, Azure App Service, or an existing Azure Kubernetes Service cluster — with health checks, logging, and a handover. Work is billed time and materials at $175 per hour against a written estimate produced by the assessment; a typical single-application engagement runs about 4 weeks, managed by Alex Nikulin.

Timeline 4 weeksService owner Alex NikulinMicrosoft AzureAzure Container AppsAzure App Service

What this engagement is

The application works. That is the whole problem: it works on one server that somebody built by hand years ago, with settings in a web.config or a .env file, a connection string nobody has rotated, and a deployment procedure that is a person rather than a document. Containerization is the smallest change that fixes this. The code stays the same; what changes is that the application, its runtime, and its dependencies are described in a Dockerfile, built into an image by a pipeline, and run identically on a developer's laptop and in Azure. We start with an assessment because not every application containerizes cleanly: we look at the runtime (a .NET 8-or-later, Java, Node.js, or Python application goes into a Linux image; a .NET Framework application needs a Windows Server Core image, which narrows the Azure targets), local file writes and session state, Windows services and scheduled tasks that need to become separate containers or jobs, GAC and COM dependencies, and licensed components tied to a machine. The assessment produces a per-application plan and a written estimate. Then we build: multi-stage Dockerfiles on Microsoft's official base images — or, for modern .NET, the SDK's own container publish where a Dockerfile adds nothing — a build pipeline in GitHub Actions or Azure Pipelines that tags and pushes to Azure Container Registry, and configuration pulled from environment variables and Azure Key Vault through managed identity so the image carries no secrets. Deployment goes to the target the assessment recommends. Azure Container Apps is the default for Linux workloads that want scaling, ingress, and revisions without a cluster; Azure App Service runs custom containers, and is the practical home for Windows containers; an existing AKS cluster is the target when you already run one or need the Kubernetes API. Two boundaries hold throughout. This is not modernization: if the driver is an end-of-support framework or a database that needs to become Azure SQL, Legacy Application Modernization to Azure re-platforms the code and this service is a step inside it. And this is not a Kubernetes platform build: if AKS is the right target and no cluster exists, Azure Kubernetes Service (AKS) Design and Deployment designs and deploys it first.

Success criteria

01The containerization assessment names the base image and target platform for each in-scope component, lists every change the application needs to run as a container, and carries a written estimate you approve before build starts.
02Each in-scope component builds into an image from a Dockerfile (or the .NET SDK container publish) in your repository, and the same image runs locally with a documented compose file and in Azure.
03The image build pipeline runs on every merge to the main branch, tags images by version and commit, pushes to your Azure Container Registry, and the pipeline authenticates to Azure without stored secrets.
04No secret or environment-specific value is baked into an image or committed to the repository: configuration comes from environment variables and Azure Key Vault references through managed identity.
05The application runs on the agreed Azure target with readiness and liveness health checks, logs flowing to Azure Monitor, and TLS on its endpoint, and passes the acceptance test cases agreed during assessment.
06Documentation and a recorded handover are delivered — how to build, run locally, deploy, roll back, update base images, and where each setting lives — so your team or any developer you choose can operate it.

What you receive

Containerization assessment: runtime and dependency review, Linux or Windows container verdict, target-platform recommendation (Container Apps, App Service, or AKS) with reasoning and a monthly Azure cost estimate from Microsoft's published pricing, a list of required application changes, and a written time-and-materials estimate.
Dockerfiles for each in-scope component — multi-stage builds on Microsoft's official base images with a non-root user where the runtime allows — plus a compose file and README for local development.
Azure Container Registry (or use of yours), with image tagging conventions, retention, and vulnerability scanning where your Defender for Cloud licensing includes it.
Image build pipeline in GitHub Actions or Azure Pipelines: build, tag, push, and deploy, authenticating to Azure through OIDC workload identity federation rather than stored credentials.
Configuration and secrets externalized: environment-variable configuration, Azure Key Vault with managed identity, and the small code changes required to read them.
Deployment to the agreed target: an Azure Container Apps environment (with scaling rules, ingress, and revisions), App Service for containers (with a staging slot where the plan supports it), or a namespace and manifests on your existing AKS cluster — one non-production and one production environment.
Health checks, structured logging to Azure Monitor or Application Insights, and a basic alert on failed deployments and unhealthy instances.
Runbook and recorded handover session covering build, local run, deploy, rollback, base-image updates, and configuration.

How the work unfolds

Assessment (week 1)

Inventory the application, its runtime and dependencies, how it is configured and deployed today, and what it connects to. Output: the per-component plan, the Linux-or-Windows and target-platform decisions, the required-changes list, and a written estimate you approve before build.

Dockerfiles and local run (weeks 1–2)

Write and iterate the Dockerfiles until the application builds and runs in a container on a developer machine, with the compose file covering local dependencies such as a database. This is where hidden assumptions — file paths, machine-specific settings, missing native libraries — surface and get fixed.

Registry and build pipeline (week 2)

Azure Container Registry provisioned or connected, the build pipeline authoring images on every merge with version and commit tags, and OIDC federation to Azure so the pipeline holds no secrets.

Configuration and secrets (weeks 2–3)

Environment-specific settings and secrets moved out of the code and the image into environment variables and Azure Key Vault, read through managed identity, and the minimal code changes to support that.

Azure deployment and testing (week 3)

Non-production and production environments stood up on the agreed target, health checks, logging, and TLS in place, and the acceptance cases run against the containerized application in Azure.

Cutover and handover (week 4)

DNS or traffic switched to the containerized application in the agreed window with the old host kept available for rollback, the runbook delivered, and the recorded handover held for your team.

Prerequisites

Source code for the application, and confirmation that it builds from documented steps — containerizing a binary-only application is possible in some cases but is assessed first, not assumed.
Access to the current host and its configuration so the assessment can see how the application is really run, not how it was documented.
An Azure subscription for the target environment — yours, or one we set up in your tenant — with permission to create the registry, Key Vault, managed identities, and the hosting resources, or approval for IT Partner to do so under access you approve.
A GitHub or Azure DevOps repository and organization to hold the code and the pipeline; if you have no CI/CD platform at all, the Azure DevOps and GitHub CI/CD Pipeline Implementation sets one up and this engagement uses it.
If the target is AKS, an existing cluster your team operates — or the AKS Design and Deployment engagement scoped ahead of this one.
A developer or subject-matter expert who knows how the application behaves and can run acceptance tests, plus a product owner who can approve the assessment estimate and the cutover window.
Licensing clarity for any third-party components inside the application — their terms on running in containers and in Azure are between you and the vendor, and the assessment flags anything that looks machine-bound.

Who does what

IT Partner

  • Run the assessment and deliver the per-component plan, target recommendation, cost estimate, and written time-and-materials estimate.
  • Write the Dockerfiles, compose file, and build pipeline, and make the minimal code changes required for configuration and secrets.
  • Provision the registry, Key Vault, managed identities, and the hosting environments as infrastructure as code where the target supports it.
  • Deploy, test against the agreed acceptance cases, and execute the cutover with a rollback path.
  • Deliver the runbook and recorded handover, and price every scope change in writing before doing the work.

Your team

  • Provide source code, host access, and the people who know how the application runs.
  • Approve the assessment estimate before build, and each scope change before it is started.
  • Run acceptance tests with realistic scenarios and sign off on the results.
  • Approve and communicate the cutover window, and decommission the old host after the agreed soak period.
  • Own Azure consumption and any Microsoft or third-party licensing, and operate the application after handover.

What's not included

Re-architecture, framework upgrades, or code modernization beyond the minimal changes containerization requires — moving from .NET Framework to modern .NET, splitting a monolith, or replacing a database engine is Legacy Application Modernization to Azure.
Designing and building an AKS cluster — this engagement deploys onto a cluster you already operate; building one is Azure Kubernetes Service (AKS) Design and Deployment.
Database migration. The application's database stays where it is or moves under a separate engagement such as SQL Server to Azure SQL Database migration; we do not run production databases inside containers.
Building out a CI/CD platform beyond the image build and deploy pipeline for the in-scope application — organization setup, branch policies, and migration from legacy source control are the CI/CD Pipeline Implementation.
Plain website or web-app hosting moves that need no containers at all — if the application runs on a supported App Service runtime as-is, the smaller fixed-price App Service migration is the better fit, and we will say so.
Azure consumption — Container Apps or App Service compute, AKS nodes, the container registry, Key Vault, storage, and log ingestion — billed by Microsoft directly to you; the assessment includes an estimate.
Ongoing operations after handover — base-image patching, scaling changes, monitoring response — available separately through Azure Resource Monitoring and Maintenance or as hourly work at the same rate.
Performance tuning, load testing beyond acceptance cases, formal penetration testing, and compliance certification.
Desktop applications with a user interface, applications that depend on hardware dongles, and components licensed to a specific machine — the assessment names them and proposes what to do instead.

Limitations & technical notes

!Time and materials means the estimate moves when scope moves — every scope change is priced in writing before we build it, and out-of-scope work is never started without your written approval. The assessment exists so the estimate is grounded in the real application rather than a guess.
!The 4-week typical timeline is for one application of moderate complexity with one or two components; several components, Windows containers, or an application that has never been run anywhere but its original host extend it, and the assessment gives the real number.
!Windows containers narrow the options: Azure Container Apps runs Linux images only, App Service for Windows containers needs its own Premium v3 plan, and AKS needs a Windows node pool. A .NET Framework application therefore costs more to host than the same application on modern .NET — the assessment shows both numbers so you can decide whether modernization is the better investment.
!Containerization preserves behavior: bugs, undersized assumptions, and hard-coded values that were tolerable on one server are still there in a container. We fix what containerization requires and flag the rest.
!Applications that write to the local file system, keep in-memory session state across requests, or rely on a Windows service or scheduled task need small changes — a mounted volume or Azure Files, an external cache, a separate job container — which the assessment lists as required changes rather than discovering them at deployment.
!Third-party components run inside the container under their own licenses; whether a vendor permits containerized or cloud deployment is confirmed with the vendor, not assumed.
!Azure targets have their own limits — Container Apps is Linux-only and has platform ingress and scaling semantics; App Service plans have size and slot constraints; AKS inherits whatever your cluster enforces — and the target recommendation is made against those, verified during assessment.
!Azure consumption is billed by Microsoft at its published rates and varies with usage; the assessment's estimate is for the recommended configuration, and Microsoft's meters are the bill of record.

Frequently asked questions

What is included in Application Containerization to Azure?

A containerization assessment with a written estimate, Dockerfiles and a local compose setup for each in-scope component, an Azure Container Registry with a build pipeline that tags and pushes images on every merge, configuration and secrets moved into environment variables and Azure Key Vault through managed identity, deployment to Azure Container Apps, App Service, or your existing AKS cluster with health checks and logging, acceptance testing, cutover with rollback, and a runbook with a recorded handover. The code itself stays as it is, apart from the small changes containers require.

How much does it cost?

Work is billed time and materials at $175 per hour. The assessment produces a written estimate for the whole engagement before build begins, and any scope change is priced in writing before we do the work — out-of-scope work never starts without your approval. Nobody at IT Partner earns a sales commission, so nobody is paid more when the invoice grows. Azure consumption is separate and billed by Microsoft; the assessment estimates it.

How long does it take?

About 4 weeks for a typical single application: assessment in week one, Dockerfiles and the build pipeline in weeks one and two, configuration and secrets in weeks two and three, Azure deployment and testing in week three, cutover and handover in week four. Applications with several components, Windows containers, or an undocumented deployment take longer, and the assessment says how much.

Will you change our code?

As little as possible, and only where a container requires it: reading configuration from environment variables instead of a hard-coded file, writing files to a mounted path instead of a local folder, logging to standard output, and handling a graceful shutdown signal. Those changes are listed in the assessment before you approve the estimate. Framework upgrades, refactoring, and new features are not part of this service — that is modernization, which we sell separately.

Our application is .NET Framework on Windows — can it be containerized?

Usually, yes — as a Windows container on a Windows Server Core base image with the .NET Framework runtime. That decision narrows where it can run: Azure Container Apps supports Linux images only, so the practical targets are App Service for Windows containers, which needs its own Premium v3 plan, or a Windows node pool on AKS. The assessment gives you both the containerized-as-is cost and the cost after moving to modern .NET on Linux, because for some applications the modernization pays for itself in hosting alone.

Container Apps, App Service, or AKS — how do you choose?

By what the application needs, not by fashion. Azure Container Apps is the default for Linux workloads: it runs your image on a Kubernetes-based platform Microsoft operates, with scaling, ingress, revisions, and a consumption billing model, and no cluster to upgrade. App Service runs custom containers with familiar slots and plans, and is the home for Windows containers. AKS is the target when you already operate a cluster or genuinely need the Kubernetes API — operators, DaemonSets, a service mesh, node-level control. The assessment recommends one and explains why; the images are the same whichever you pick, so changing your mind later is a deployment change, not a rebuild.

Where do configuration and secrets go?

Out of the image and out of the repository. Non-secret settings become environment variables set per environment on the hosting platform. Secrets — connection strings, API keys, certificates — go into Azure Key Vault and are read through a managed identity, so the container never holds a credential and nothing needs rotating inside an image. The build pipeline authenticates to Azure the same way, through OIDC workload identity federation, so there is no service-principal secret in the pipeline either.

What happens to the database?

It stays outside the container. If it is already on Azure SQL or a managed service, the containerized application connects to it through a connection string in Key Vault. If it is on the same server as the application, the assessment recommends where it should live — usually Azure SQL Database or SQL Managed Instance — and that migration is scoped as a separate engagement rather than hidden inside this one. For local development the compose file runs a database container, which is exactly where containerized databases belong.

The application has scheduled tasks and a Windows service — do those become containers?

Yes, as separate ones. A container should run one process, so a scheduled task becomes a Container Apps job or a scheduled pipeline, and a background Windows service becomes its own container image with the same code base. The assessment lists each background component and what it becomes, so the estimate covers all of them rather than just the web front end.

Can our developers run it locally?

That is half the point. The compose file starts the application and its local dependencies — a database container, a cache — with one command on Windows, macOS, or Linux, using the same image the pipeline builds. A new developer's first day stops being a two-day environment setup, and 'works on my machine' stops being an argument, because everyone's machine runs the same image.

Do we need a Dockerfile, or can the .NET SDK build the image?

For modern .NET, the SDK can publish a container image directly with the PublishContainer target — no Dockerfile — and where that produces exactly what you need we use it, because there is less to maintain. A Dockerfile is still the right tool when the build needs native dependencies, custom base images, Windows containers, or anything beyond a standard .NET publish, and for Java, Node.js, and Python applications. The assessment chooses per component and the runbook documents whichever it is.

Who patches the base images after handover?

Your team, with the pipeline doing the work: rebuilding on a schedule or on a base-image update pulls Microsoft's latest patched runtime image, and vulnerability scanning in Azure Container Registry — where your Defender for Cloud licensing includes it — tells you when an image needs rebuilding. The runbook covers the procedure. If you would rather not own it, ongoing operations are available separately.

Is this the same as application modernization?

No, and the difference matters for the price. Containerization changes how the application is packaged and deployed; the code and framework stay the same, which is why it fits in about four weeks. Modernization changes the code — upgrading .NET Framework to modern .NET, moving data to Azure SQL, replacing components that no longer have supported runtimes — and takes longer. Containerization is often a step inside modernization, and if the assessment shows that your real problem is an end-of-support framework, we will point you at the modernization service rather than containerize an application you will still have to rewrite.

Can you containerize several applications?

Yes. The first application establishes the patterns — Dockerfile conventions, the pipeline template, the Key Vault layout, the target environment — and each additional one is estimated separately and is usually cheaper because the patterns exist. If you have a portfolio, the assessment can cover all of them at once and produce a per-application plan so you can sequence the work.

What happens after go-live?

You own it: the Dockerfiles, pipeline, and Azure resources are in your repository and your subscription, and the runbook and recorded handover cover build, deploy, rollback, and base-image updates. Enhancements, further applications, and help when something breaks are hourly work at the same $175 rate, estimated in writing first; ongoing monitoring and maintenance are available as a separate managed service. There is no proprietary framework and no dependence on us afterward.

Didn’t find your question?

Ask it here. A real engineer answers by email within one business day — and if it’s a good one, it becomes part of this page so the next person finds it.

Answered by a person, one time, to your inbox. Nothing you type here is published without a human reviewing and anonymizing it first.

Often combined with

Time&Materials @ $175/hr
4 weeks
Book a containerization scoping call