Index / Containerization

Containerization

Abstraction Creative
Index

The benefit is practical. A contributor can spend more attention on the problem the software solves and less time discovering why the project runs for somebody else.

Software can depend on a surprising amount of knowledge that lives outside its source code. A particular runtime. An installed library. A background service. A setting that someone remembers changing, but nobody remembers documenting.

Containerization packages application components and their dependencies into images that can run as containers within an appropriate environment. It helps make that setup more explicit and repeatable, so working on the software depends less on reconstructing one person's machine.

At Abstraction Creative, the useful question is not simply whether an application can be put in a container. It is whether doing so makes the application easier to understand, test, change and maintain for the people responsible for it.

That includes the next person who joins the project.

Give the setup a form people can share

A container image is the packaged set of files and instructions used to create a container. The container is the running instance, not the package itself. Docker's introductions to containers and images explain that distinction.

For a development team, this can help replace a long sequence of remembered installation steps with an explicit, reviewable setup. The application and its supporting components can have documented requirements rather than quietly relying on whatever happens to be installed locally.

The benefit is practical. A contributor can spend more attention on the problem the software solves and less time discovering why the project runs for somebody else.

It does not make every environment identical. Operating-system and processor compatibility, available resources, network access, storage and configuration still matter. We examine those conditions rather than treating portability as an unconditional promise.

Begin with what already works

An inherited application does not need to become a different application before its setup can improve.

We begin by identifying the components, versions, dependencies and operating assumptions that matter. What starts the application? What runs separately? Where does it write information? Which external systems must it reach? Which steps are currently manual, and which are intentional safeguards?

Sometimes the first useful result is simply a more dependable development environment. Production may stay where it is while the team investigates a longer-term change. Sometimes the existing container setup needs attention because its instructions are incomplete, its dependencies have drifted or its storage arrangements are unclear.

PHP Development, for example, concerns the application itself. Containerization can support that work without being a substitute for understanding the code, its business rules or its limitations.

We do not assume that containerizing an application requires splitting it into many services. Packaging and application architecture are related decisions, not the same decision.

The quote works on one machine

When a supplier's quote application works on one developer's machine but not another's, we investigate the knowledge hidden in the setup. Pricing, PDF generation and notification each have operating requirements worth making explicit.

A new developer can open the application but cannot generate the PDF. The document-rendering dependency differs from the one on the original developer's machine. A background task also needs a separate process that the setup notes do not mention.

The problem is not yet evidence that the whole application should be replaced. It is evidence that its operating requirements are partly hidden.

We could investigate those requirements and create a documented container setup for the application and relevant supporting processes. Safe sample data would allow the team to examine a representative quote without copying customer information into every developer's environment. Test notifications would go to a controlled destination rather than real customers.

Then we would ask someone other than the setup's author to follow the instructions. Can they start the necessary components, generate the sample document and recognize when the background task has finished? Can they stop and recreate the application without losing information that was meant to persist?

A successful check would establish something specific about that setup. It would not prove that production capacity, payment connections or every document variation had been tested.

The deliverable is more than a container that starts: it is a working arrangement another person can understand and examine.

Separate the software from the information it creates

An application package and a customer's records have different lifecycles. Replacing the former should not casually discard the latter.

Files written only inside a container's writable layer are lost when that container is removed. Storage intended to outlive it needs an explicit arrangement. Docker's persistent-data guidance illustrates using volumes for that purpose.

We therefore ask where databases, uploads, generated documents and other durable information belong. The answer may involve managed services or storage outside the application container. It needs to account for permissions, recovery and the environment in which the software runs.

Persistence alone is not a backup strategy. Keeping a file after replacing a container does not establish that it can be recovered after deletion, corruption or loss of its underlying storage.

In the quote example, reproducing the application setup and recovering a customer's accepted quote are separate responsibilities. Both matter, and neither should be hidden behind the word “containerized.”

Consistency does not mean copying everything

Development and production should share the characteristics needed for meaningful testing. They should not automatically share credentials, customer data or permission to perform live actions.

We consider which configuration belongs in the shared setup and which must be supplied separately through an appropriate protected mechanism. A new contributor should be able to understand the required settings without receiving unrestricted production access.

Intentional differences should be visible. The development environment may use sample records, smaller resources and test services. Those choices are useful when documented; they become misleading when a local test is presented as proof of a condition it never exercised.

Infrastructure as Code can describe the surrounding environment. Containerization describes how application components are packaged and run within it. The two can work together while remaining distinct parts of the explanation.

Rebuilding is part of maintaining

Packaging dependencies does not remove the need to maintain them. An image built months ago does not acquire updated components merely because it still starts successfully.

Docker's build guidance describes rebuilding images with updated dependencies and testing builds. Our concern is how that becomes a manageable practice: knowing what changed, checking the result and deciding when it is appropriate to release.

A recorded version can help make a build understandable and repeatable. It should also have a path for considered updates. Freezing an unsupported dependency indefinitely preserves a problem as effectively as it preserves a setup.

CI/CD Implementation can connect image creation with agreed checks and release workflows. Deployment and Release Management addresses the wider change into use, including application and data compatibility.

Going back to an earlier image is not automatically a complete reversal if the newer application also changed stored information. Recovery needs to reflect the actual system.

Running containers is another design decision

Once software is packaged, someone still needs to decide where it runs, how it receives traffic and what should happen when a component stops or demand changes.

Container orchestration coordinates running workloads. Kubernetes is one example, providing mechanisms for deployment, scaling and workload management. Managed container services offer other operating arrangements, with responsibilities that depend on the service.

Those possibilities deserve explanation, not automatic adoption. A small application may not justify the complexity of operating a cluster. A larger system may benefit from capabilities that would be unnecessary for a modest development setup.

Cloud Infrastructure and Architecture gives those choices their broader context. We consider the workload, the team's ability to operate it, cost, dependencies and the specialist involvement required. Specific implementation and management responsibilities are agreed for the engagement.

The most elaborate arrangement is not necessarily the most useful one.

Leave a system people can continue working on

Depending on the scope, the work can leave behind build definitions, setup instructions, a component and configuration map, meaningful checks and a clear explanation of persistent data. We also want the known limits recorded: what was examined, what remains different in production and who maintains the arrangement.

Living workbooks can keep that knowledge available as the project changes. Technical Maintenance and Support connects the setup to its continuing care, including dependencies and the guidance future contributors rely on.

This work participates in our adaptable process:

Discover → Define → Explore → Design / Develop / Market → Learn → Advance → Discover

We discover the application and its hidden assumptions, define what needs to become more repeatable, explore an appropriate setup and develop it with relevant checks. Learning from its use informs the next improvement. Not every project needs the same tooling or the same sequence of changes.

Abstraction can help containerize new or inherited applications and improve existing setups, directly or alongside appropriate partners. If getting a project running has become an obstacle—or nobody is sure how its current containers should be maintained—we can start there, without assuming a complete rebuild.

Contact Us

Start a conversation.

Tell us what you’re working toward and where you could use help. We’ll reply by email.

Tell us a little about yourself or your organization, what you’re trying to accomplish and what’s getting in the way.