> Markdown version of [/videos/107-reusing-apps-between-teams-and-environments-through-containers](https://www.wearedevelopers.com/videos/107-reusing-apps-between-teams-and-environments-through-containers). Every page supports `.md` or `Accept: text/markdown`. Links point to the HTML versions so they work for humans too. Agent guide: [/agents.md](https://www.wearedevelopers.com/agents.md). --- # Reusing apps between teams and environments through Containers Stop fighting local dependency collisions when sharing internal CLI tools. Learn to package your utilities into lightweight containers for standardized execution across any environment. - **Speakers:** Adrian Kosmaczewski - **Event:** WeAreDevelopers LIVE - **Published:** February 3, 2021 - **Duration:** 43:39 - **URL:** https://www.wearedevelopers.com/videos/107-reusing-apps-between-teams-and-environments-through-containers ## Summary The presentation explores how containers can go beyond typical application deployment to solve the cross-platform distribution challenges of internal developer tooling. Developers frequently struggle to share command-line interface (CLI) utilities built across diverse languages—such as Python, Node.js, or Go—due to complex local dependency collisions. Encapsulating these utilities into self-contained Docker or Podman images allows engineering teams to standardize execution across Linux, macOS, and Windows environments without requiring users to install specific language runtimes or heavy SDKs. By leveraging multi-stage builds, developers can effectively separate resource-heavy compilation steps from lightweight runtime environments, outputting streamlined images based on Alpine or distroless architectures. Practical applications for this pattern include CI/CD pipelines, automated documentation linting (validating links, checking spelling, and enforcing writing style), and standardized PDF generation. The workflow naturally integrates with registries like Red Hat Quay or the native GitLab Container Registry for distribution. To improve the developer experience and mask the complexity of mounting volumes, teams are encouraged to wrap lengthy `docker run` execution strings inside unified Makefiles. Several nuanced gotchas dictate the success of containerized tooling. Image builders must be aware that Alpine Linux relies on the `musl` C standard library rather than `glibc`, which can abruptly break pre-compiled binaries. Similarly, internal shell scripts must account for the absence of `bash` in BusyBox environments by relying on strict `sh` syntax validated by tools like ShellCheck. Adopting security best practices such as passing secrets strictly through environment variables, alongside image optimization techniques like `npm install --production` and layer inspection via the `dive` utility, ensures internal tools remain secure, minimal, and performant. **Keywords:** internal developer tooling, container encapsulation, multi-stage builds, cross-platform cli distribution, podman image building, gitlab container registry, alpine linux musl, docker image inspection, automation makefiles, continuous integration pipelines, environment variable secrets, distroless base images, npm production dependencies, shellcheck script validation, typescript cli compilation ## Chapters 1. **Overcoming challenges in internal tooling distribution** (03:47) — Encapsulating internal tools solves the friction of distributing software across different operating systems and programming languages. 1. **Encapsulating and sharing applications with containers** (07:32) — Packaging applications like a TypeScript tool ensures consistent execution by bundling runtime dependencies into searchable images. 1. **Optimizing container images using multi-step build processes** (11:21) — Splitting build and runtime stages produces lightweight final images by discarding unnecessary compilers and toolchains. 1. **Building and publishing container images with Podman** (13:10) — Running tests within the build process prevents broken configurations before publishing to a container registry. 1. **Reusing containerized utilities across isolated environments** (15:58) — Leveraging temporary execution commands enables seamless usage of command-line tools across different operating systems without leaving stranded artifacts. 1. **Integrating containerized tools into continuous deployment pipelines** (18:32) — Executing container workflows within deployment configurations unlocks native registry features for reliable automation. 1. **Reusing language-specific tools in disparate software projects** (21:28) — Cross-referencing containerized utilities allows disparate programming languages to share common build or execution steps. 1. **Containerizing code tasks and technical documentation workflows** (24:21) — Isolating operations like infrastructure linking, style verification, and document compilation prevents local dependency conflicts. 1. **Preventing failures when designing command line interfaces** (29:32) — Passing sensitive secrets via environment variables and standardizing execution syntax enhances tool portability and developer experience. 1. **Troubleshooting image sizes and foundational library conflicts** (33:42) — Inspecting layer modifications and understanding foundational library differences prevents runtime failures and unnecessary container bloat. 1. **Applying language-specific optimizations for container execution environments** (38:53) — Employing tailored packaging methods for distinct programming stacks reduces vulnerability footprints and accelerates startup times. ## Related Moments - [Answering audience questions on container functionality and local workflows](https://www.wearedevelopers.com/videos/166-local-development-techniques-with-kubernetes) (from "Local Development Techniques with Kubernetes") - [Addressing local development challenges with Podman Desktop](https://www.wearedevelopers.com/videos/1133-containers-and-kubernetes-made-easy-deep-dive-into-podman-desktop-and-new-ai-capabilities) (from "Containers and Kubernetes made easy: Deep dive into Podman Desktop and new AI capabilities") - [Managing containerized infrastructure with Podman Desktop](https://www.wearedevelopers.com/videos/1593-bootable-ai-containers-with-podman-desktop) (from "Bootable AI Containers with Podman Desktop") - [Applying standard container workflows to physical infrastructure](https://www.wearedevelopers.com/videos/1610-enterprise-linux-as-container-images) (from "Enterprise Linux as Container Images") - [Standardizing application logic inside portable Docker containers](https://www.wearedevelopers.com/videos/530-mastering-kubernetes-beginner-edition) (from "Mastering Kubernetes – Beginner Edition") - [Managing container stage promotions using custom command line tooling](https://www.wearedevelopers.com/videos/178-industrializing-your-data-science-capabilities) (from "Industrializing your Data Science capabilities") ## Related Articles - [Building AI Solutions with Rust and Docker](https://www.wearedevelopers.com/magazine/494-building-ai-solutions-with-rust-and-docker) - [Dev Digest 138 - Are you secure about this?](https://www.wearedevelopers.com/magazine/486-dev-digest-138-are-you-secure-about-this) - [Dev Digest 131 - AI'm not sure about OSS](https://www.wearedevelopers.com/magazine/472-dev-digest-131-ai-m-not-sure-about-oss) - [Dev Digest 127 - putting 5 rings on it](https://www.wearedevelopers.com/magazine/464-dev-digest-127-putting-5-rings-on-it) ## Related Jobs - [Devops Engineer](https://www.wearedevelopers.com/jobs/ext/1940926-devops-engineer) at **Bitpanda** - [Principal Software Engineer, Enterprise AI Platform](https://www.wearedevelopers.com/jobs/ext/1467292-principal-software-engineer-enterprise-ai-platform) at **GitHub** - [Cloud Foundations Team](https://www.wearedevelopers.com/jobs/ext/1483289-cloud-foundations-team) at **GitHub** - [Senior Software Engineer, Enterprise Products](https://www.wearedevelopers.com/jobs/ext/1841248-senior-software-engineer-enterprise-products) at **GitHub** - [Platform Engineer (DevOps)](https://www.wearedevelopers.com/jobs/48264-platform-engineer-devops) at **WDW Consulting GmbH** - [Staff Software Engineer, Copilot Experiences](https://www.wearedevelopers.com/jobs/ext/164361-staff-software-engineer-copilot-experiences) at **GitHub**