Docker Cheat Sheet 2026 — Commands, Dockerfile, and Compose

Bookmark this page. Use Ctrl+F (or Cmd+F on Mac) to find what you need. This cheat sheet covers Docker CLI commands, Dockerfile instructions, Docker Compose, volumes, networking, and production tips. Last updated: March 2026 How Docker Works ┌──────────────┐ docker build ┌──────────┐ docker run ┌────────────┐ │ Dockerfile │ ───────────────► │ Image │ ─────────────► │ Container │ │ (recipe) │ │ (template)│ │ (running) │ └──────────────┘ └──────────┘ └────────────┘ │ docker push │ ┌────▼───────┐ │ Registry │ │ (Docker Hub)│ └────────────┘ Container Commands Command Description docker run <image> Create and start a container docker run -d <image> Run in background (detached) docker run -it <image> bash Run interactively with shell (sh for Alpine) docker run -p 8080:80 <image> Map host port 8080 to container port 80 docker run --name myapp <image> Run with a custom name docker run --rm <image> Automatically remove container when it stops docker run -e KEY=value <image> Set environment variable docker run -v /host:/container <image> Mount a volume docker ps List running containers docker ps -a List all containers (including stopped) docker stop <container> Stop a running container docker start <container> Start a stopped container docker restart <container> Restart a container docker rm <container> Remove a stopped container docker rm -f <container> Force remove (even if running) docker exec -it <container> bash Open a shell inside a running container docker logs <container> View container logs docker logs -f <container> Follow logs in real-time docker inspect <container> Show detailed container info (JSON) docker stats Live resource usage for all containers docker cp <container>:/path ./local Copy file from container to host docker cp ./local <container>:/path Copy file from host to container docker container prune Remove all stopped containers docker kill <container> Force stop a container (SIGKILL) Image Commands Command Description docker images List all local images docker pull <image> Download an image from registry docker push <image> Upload an image to registry docker build -t myapp . Build image from Dockerfile in current dir docker build -t myapp:v1 . Build with a tag/version docker tag <image> <new-tag> Add a tag to an image docker rmi <image> Remove an image docker image prune Remove unused (dangling) images docker system prune -a Remove all unused images, containers, networks (not volumes) docker system prune -a --volumes Remove everything including volumes docker history <image> Show image layers and sizes docker login Log in to Docker Hub (required before push) docker logout Log out from registry docker save -o image.tar <image> Export image to tar file docker load -i image.tar Import image from tar file Dockerfile Reference # Base image FROM node:20-alpine # Set working directory WORKDIR /app # Copy dependency files first (for caching) COPY package.json package-lock.json ./ # Install dependencies RUN npm ci --production # Copy application code COPY . . # Expose a port (documentation only) EXPOSE 3000 # Default command when container starts CMD ["node", "server.js"] Dockerfile Instructions Instruction Description FROM <image> Base image (required, must be first) WORKDIR /app Set working directory for subsequent commands COPY <src> <dest> Copy files from host to image ADD <src> <dest> Like COPY but can extract tar and fetch URLs RUN <command> Execute command during build (creates a layer) ENV KEY=value Set environment variable ARG KEY=value Build-time variable (not available at runtime) EXPOSE <port> Document which port the app listens on CMD ["executable", "arg"] Default command (can be overridden) ENTRYPOINT ["executable"] Fixed command (CMD becomes arguments) VOLUME /data Create a mount point for persistent data USER <username> Switch to non-root user `HEALTHCHECK CMD curl -f http://localhost/ CMD vs ENTRYPOINT # CMD — default command, can be overridden CMD ["python", "app.py"] # docker run myapp → runs python app.py # docker run myapp bash → runs bash (overrides CMD) # ENTRYPOINT — fixed command, CMD becomes arguments ENTRYPOINT ["python"] CMD ["app.py"] # docker run myapp → runs python app.py # docker run myapp test.py → runs python test.py Multi-Stage Build # Stage 1: Build FROM node:20-alpine AS builder WORKDIR /app COPY package.json ./ RUN npm ci COPY . . RUN npm run build # Stage 2: Production (smaller image) FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] Multi-stage builds produce smaller images — the final image only contains the production output, not the build tools. ...

March 19, 2026 · 6 min

Jetpack Compose Tutorial #7: Material 3 Theming — Colors, Typography, and Dark Mode

Your app works. But it looks like every other default Compose app — same purple, same fonts, same everything. Theming is how you make your app look like YOUR app. Custom colors, custom fonts, dark mode support — all in one system that applies everywhere automatically. Material 3 (also called Material You) is the design system Google built for modern Android apps. Compose uses it by default. In this tutorial, you will learn how to customize it. ...

March 19, 2026 · 8 min

Kotlin Tutorial #1: What is Kotlin? A Simple Guide for Developers

Kotlin is a modern programming language that runs on the Java Virtual Machine (JVM). Google made it the official language for Android development in 2019. But Kotlin is not just for Android. You can use it for backend servers, desktop apps, and even web development. In this tutorial, you will learn what Kotlin is, where it is used, and why so many developers prefer it over Java. You will also write your first Kotlin code. ...

March 19, 2026 · 7 min

Kotlin Tutorial #11: Scope Functions — let, run, with, apply, also

In the previous tutorial, you learned about extension functions. Now let’s learn about scope functions. Kotlin has five scope functions: let, run, with, apply, and also. They execute a block of code on an object and differ in how they refer to the object and what they return. These functions are used everywhere in Kotlin code. Understanding them will make your code cleaner and more readable. ...

March 19, 2026 · 9 min

Kotlin Tutorial #17: Coroutines — launch, async, and Structured Concurrency

In the previous tutorial, you learned about sequences. Now let’s learn about coroutines. Coroutines are Kotlin’s way of writing asynchronous code. They let you write code that looks synchronous but runs without blocking threads. In this tutorial, you will learn: Suspend functions launch — fire and forget async/await — get a result Dispatchers coroutineScope Structured concurrency Jobs and cancellation Timeouts Practical examples What Are Coroutines? A coroutine is a lightweight thread. You can run thousands of coroutines on a single thread. Unlike threads, coroutines are cheap to create and do not block the operating system thread they run on. ...

March 19, 2026 · 9 min

Kotlin Tutorial #2: Installing Kotlin and Your First Program

In the previous tutorial, you learned what Kotlin is and why developers love it. Now it is time to install Kotlin on your computer and write your first program. In this tutorial, you will: Install IntelliJ IDEA (the best IDE for Kotlin) Create a Kotlin project Write and run your first programs Try the Kotlin REPL Use the Kotlin Playground (no installation needed) Option 1: Kotlin Playground (No Installation) If you want to try Kotlin right now without installing anything, go to the Kotlin Playground. ...

March 19, 2026 · 8 min

Kotlin Tutorial #3: Variables, Types, and Type Inference

In the previous tutorial, you installed Kotlin and wrote your first programs. Now let’s learn about variables and types — the building blocks of every Kotlin program. In this tutorial, you will learn: The difference between val and var All basic types in Kotlin How type inference works How to convert between types How to use constants with const val val vs var Kotlin has two keywords for declaring variables: ...

March 19, 2026 · 7 min

Kotlin Tutorial #4: Null Safety — Kotlin's Best Feature

In the previous tutorial, you learned about variables and types. Now let’s learn about null safety — the feature that makes Kotlin truly special. NullPointerException (NPE) is the most common crash in Java and many other languages. Tony Hoare, who invented null references in 1965, called it his “billion-dollar mistake”. Kotlin solves this problem at compile time. ...

March 19, 2026 · 7 min

Kotlin Tutorial #5: Functions, Default Parameters, and Named Arguments

In the previous tutorial, you learned about null safety. Now let’s learn about functions — the building blocks that organize your code into reusable pieces. Kotlin functions are more powerful than Java methods. They support default parameters, named arguments, single-expression syntax, and much more. In this tutorial, you will learn: ...

March 19, 2026 · 7 min

Kotlin Tutorial #6: Control Flow — if, when, for, while

In the previous tutorial, you learned about functions. Now let’s learn about control flow — how to make decisions and repeat actions in your code. Kotlin’s control flow is similar to Java, but with important improvements. if and when are expressions that return values. when replaces switch and is much more powerful. ...

March 19, 2026 · 8 min