Interactive roadmap

    Docker roadmap

    Learn to package any app so it runs the same on every machine.

    Your progress0% · 0 of 14 topics
    Done Learning Skipped OptionalClick any topic to learn more and mark your progress.
    1. 1

      Container basics

      0 of 4 done

      What containers are and why teams use them.

      Take your time with the terminal commands, as building muscle memory now makes everything much easier later.
    2. 2

      Building images

      0 of 3 done

      Package your own apps.

      Always order your Dockerfile instructions from least to most frequently changed to speed up builds.
    3. 3

      Multi-container apps

      0 of 4 done

      Run real apps with their dependencies.

      Use Docker Compose for any local project that needs more than one container running together.
    4. 4

      Into production

      0 of 3 done

      Run containers for real users.

      Always run your container applications as a non-privileged user to keep your systems secure.

    Learn it all, with a tutor that never sleeps

    Every topic links to LevelUp lessons, practice exercises and the 24/7 AI Tutor. Your progress updates as you master lessons.

    Every topic explained

    Step 1: Container basics

    The "works on my machine" problem, and containers versus virtual machines.
    Read more

    Ever had an app work locally but break on a colleague's laptop? Containers solve this by packing your code, libraries, and settings into one neat box that runs identically anywhere.

    Unlike heavy virtual machines that run a whole separate operating system, containers share the host machine's OS kernel. This makes them lightning fast and lightweight.

    This matters because containers form the bedrock of modern software development, letting you move projects from your laptop to cloud servers without nasty surprises.

    • Containers bundle code and dependencies together
    • They share the host kernel unlike virtual machines
    • They completely eliminate the works on my machine issue
    Docker: get started
    Docker Desktop or Docker Engine, and your first container.
    Read more

    Docker is the main tool used to create and run containers. For most users, Docker Desktop provides a friendly visual app alongside the essential command line tools.

    It works by setting up a background engine that talks to your operating system to manage your isolated boxes. When you run a test command, it downloads a starter package and boots it up.

    Getting this installed and verified is your gateway to standardising how you build and test software locally.

    • Docker Desktop includes both a graphical app and terminal tools
    • The background engine manages your isolated environments
    • Verify your setup by running the hello-world command
    Docker: get started
    docker run, ports, logs and stopping containers.
    Read more

    To start a container, you use the docker run command followed by the image name. You can map network ports so your browser can reach apps running inside.

    Think of it like renting a self-storage unit. You tell Docker to open a specific door, peek at the logs to see if everything is running smoothly, and shut the unit down when done.

    Knowing how to start, inspect, and stop containers is a daily habit you will use constantly.

    • Use docker run to create and start a container
    • Map ports to access container services from your host machine
    • Check logs and stop running containers safely
    Docker: get started
    Enough of the shell to work inside containers.
    Read more

    Most containers run lightweight Linux distributions inside. Because of this, you only need a handful of basic shell commands to navigate directories and check files.

    You can hop inside a running container using a terminal session just like logging into a remote server to inspect logs or troubleshoot a tricky bug.

    Being comfortable with basic command line navigation keeps you from feeling lost when peering inside your packaged applications.

    • Most containers run minimalist Linux systems internally
    • Learn basic navigation commands like ls, cd, and cat
    • Use interactive terminal access to inspect running containers
    The Linux command line for beginners (Ubuntu)

    Step 2: Building images

    Writing instructions to build an image for your app.
    Read more

    A Dockerfile is simply a plain text recipe containing step-by-step instructions to build your app image. It tells Docker which base system to use and which files to copy.

    Imagine writing a cooking recipe where every line adds a new ingredient or appliance until your final meal is ready to serve.

    Writing clean Dockerfiles ensures your application can be built reliably on any computer at any time.

    • A Dockerfile is a text recipe for your app image
    • Instructions include base images, copying files, and startup commands
    • Every instruction adds a new layer to the final image
    Dockerfile reference
    Ordering steps so builds are fast and images are small.
    Read more

    Docker builds images in stacked layers, caching each step so it does not repeat work unnecessarily if nothing changed. If you only edit your source code, Docker skips downloading dependencies.

    Think of it like painting a wall. If the primer layer is already dry, you do not reapply it; you just paint the top coat.

    Ordering your instructions wisely keeps your build times down to seconds rather than minutes.

    • Docker builds images in reusable stacked layers
    • Unchanged steps are loaded instantly from the local cache
    • Place rare changes early and frequent code changes last
    Building best practices (Docker)
    Pushing and pulling images with Docker Hub or a private registry.
    Read more

    A registry is an online storage warehouse for Docker images, much like GitHub is for source code. Docker Hub is the default public home for sharing and downloading pre-made images.

    You pull down images when you need them and push your own custom builds up so team members or servers can download them.

    Registries make sharing your packaged applications across different computers and cloud providers seamless.

    • Registries store and distribute Docker container images
    • Docker Hub is the primary public image warehouse
    • Use push and share your custom apps with the world

    Step 3: Multi-container apps

    Keeping data when containers are replaced.
    Read more

    Containers are temporary by design; when you delete one, its internal data disappears. Volumes solve this by mounting a folder on your host machine to store persistent data safely.

    Think of it like keeping important documents in a filing cabinet outside a hotel room, so even if you check out, your paperwork remains safe.

    Volumes are vital for databases and uploaded user files that must survive container restarts.

    • Containers discard local data when they are removed
    • Volumes mount host storage inside containers for data persistence
    • Essential for databases and uploaded user files
    Volumes (Docker docs)
    How containers find and talk to each other.
    Read more

    By default, containers are isolated and cannot talk to each other. Docker networks let you connect specific containers so they can communicate securely using container names instead of IP addresses.

    Imagine an office building where departments have their own rooms but share an internal phone extension directory to call colleagues.

    Proper networking allows your web application to securely connect to your database container without exposing it to the public internet.

    • Containers are isolated by default for security
    • Docker networks allow containers to talk to each other safely
    • Services can reference each other by container name
    An app, its database and cache started with one command.
    Read more

    Docker Compose is a tool that lets you define and run multi-container applications using a single configuration file written in YAML.

    Instead of typing out long run commands with dozens of flags for your web app, database, and cache, you write them once and run docker compose up.

    It turns complex setups into a single command, making local development environments simple to spin up for any team member.

    • Define multi-container apps in a single docker compose file
    • Spin up your entire stack with one simple command
    • Automatically sets up networking and storage volumes for you
    Docker Compose docs
    Environment variables and keeping secrets out of images.
    Read more

    Applications often need different settings depending on where they run, such as database passwords for production versus local testing. Environment variables pass these settings in safely.

    Think of it like plugging different appliance faceplates into a standard wall socket depending on the country you are visiting.

    Keeping secrets and configuration out of your code and images prevents accidental leaks when you share your work publicly.

    • Pass dynamic settings into containers using environment variables
    • Never hardcode passwords or API keys inside your Dockerfile
    • Use separate configuration values for local and production environments

    Step 4: Into production

    Small base images, non-root users and scanning for vulnerabilities.
    Read more

    Production containers need to be locked down. Using tiny base images reduces the number of pre-installed tools an attacker could exploit if they gain access.

    It is like moving from a large mansion with hundreds of doors to a secure studio apartment with only one deadbolted entrance.

    Running scans for known vulnerabilities and avoiding the default root user keeps your software supply chain safe and professional.

    • Choose minimal base images to reduce potential security flaws
    • Always run your application code as a non-root user
    • Scan your built images regularly for known software vulnerabilities
    Building and publishing images automatically.
    Read more

    Continuous Integration servers automate the process of testing your code, building your Docker images, and publishing them to your registry whenever you push changes.

    Think of it as an automated assembly line in a factory that inspects every product and boxes it up before sending it to the warehouse.

    Automating this workflow removes human error and ensures your production servers always run the absolute latest verified code.

    • Automate building and pushing images using CI/CD pipelines
    • Ensure every code commit undergoes automated testing first
    • Keeps your production deployment process reliable and repeatable
    GitHub Actions documentation
    (optional)
    Running many containers across many machines.
    Read more

    When your app grows too large for a single server, orchestration tools like Kubernetes help manage hundreds of containers across multiple cloud machines.

    It acts like an air traffic controller, automatically replacing crashed containers, balancing traffic loads, and scaling servers up or down based on user demand.

    Learning Docker is the essential first step before tackling Kubernetes and large-scale cloud infrastructure.

    • Orchestration tools manage containers across multiple servers
    • Kubernetes handles automatic scaling, healing, and load balancing
    • Mastering single-node Docker is required before learning Kubernetes
    Kubernetes basics tutorial

    Related roadmaps