A Quick Intro to Docker for Project Managers
Jess Spoll, Former Senior Product Manager
Article Categories:
Posted on
Chances are, you’ve heard of Docker, but maybe not all its possible benefits for your team.
As a former-engineer-turned-PM, I'm a supporter of Docker and an advocate for using it to make your life easier. I here to share my thoughts on why you should be an advocate for it too.
To begin: What is Docker?
Docker is an open source tool that makes it easier to run and deploy applications. It does this by separating the application code from the infrastructure needed to run the application. That separation is achieved by running each application in its own isolated “container.”
Containers, eponymously, “contain” everything that an application would need in order to run. Imagine an application inside a box that is filled with the tools you’d need for that application, along with a list of instructions for how to run it. You can pick up that box and move it between developers and their different environments with ease.
How does this relate to web applications?
Every website or web application that you can visit is interacting with a server. Your browser makes a request to the server where the web application is running and the server sends back the page or data that you requested. You can think of the server as a computer that’s been configured with the required software and settings for the specific web application that it serves.
Engineers working on a web application need to be able to make changes without disrupting the live application that’s running on the server. To do that they need two things on their own computer: a copy of the codebase and a way to run the application that mimics how it’s running on the server.
Unlike a web server that is set up to run a specific website or application, an engineer’s computer is configured to do a wide range of things. This means that they may have settings on their computer that are not compatible with the project they’re currently working on.
So why should we care about Docker?
You know those times where an engineer will spend a whole day trying to get a new-to-them application running locally? Or you’ve heard someone say, “well, it works on my computer.” These problems arise when individual computers are running different versions of software, or when the documentation about project requirements and setup is unclear.
Docker takes the guesswork and difficulty out of that process. It essentially puts all of the instructions for running a project into one place (the dependencies) and packages those along with the application code into a “container.” That container is portable and can be run by anyone from their own computer.
Docker containers share your host operating system (OS) and isolate everything needed for a particular application on top of the host OS. This allows you to run multiple containers smoothly on one host machine. So, one engineer can easily switch between projects by just switching which container they are running. No more worrying about what versions of software each different project requires and which one you have installed.
What can you use Docker for?
You can use it for any application! Docker works with all languages and frameworks. It just compartmentalizes projects and their dependencies to make a project portable, enabling super simple dev onboarding.
How does it work in practice? To run a new application, you don’t need to install all of the dependent software and applications for a project onto your host OS. You just run the Docker container, which runs the necessary software for your application and acts like a virtual box on top of your operating system. This ensures that the project environment is consistent across all developers. All you need on your computer is Docker itself to get started.
Using Docker for development can make life easier for you and your teams, even if you don’t go as far as using it in production. If you’ve ever watched time go to waste in onboarding new engineers to a project or context-switching between multiple projects, Docker can help you.