A complete Docker tutorial for Developers, DevOps Engineers, and Software Architects.
- What is Docker?
- Why Docker?
- Problems Before Docker
- Virtual Machine vs Docker
- Docker Architecture
- Docker Components
- Docker Installation
- Docker Images
- Docker Containers
- Docker Registry
- Docker Hub
- Docker CLI
- Docker Networking
- Docker Volumes
- Docker Bind Mount
- Docker Compose
- Dockerfile
- Multi Stage Build
- Docker Logs
- Docker Environment Variables
- Docker Secrets
- Docker Health Check
- Docker Resource Limitation
- Docker Security
- Docker Swarm
- Docker Best Practices
- Useful Docker Commands
- Troubleshooting
- References
Docker is an open-source platform that allows developers to package applications and all their dependencies into lightweight, portable containers.
A Docker container includes:
- Application Source Code
- Runtime
- Libraries
- System Tools
- Configuration Files
Because everything is packaged together, the application behaves the same in Development, Testing and Production.
Docker solves one of the biggest software development problems:
"It works on my machine."
Without Docker:
- Different Operating Systems
- Different Library Versions
- Different Runtime Versions
- Different Configurations
can all cause application failures.
Docker guarantees consistency.
Before Docker developers usually had problems like:
- Dependency conflicts
- Environment mismatch
- Manual deployment
- Long setup times
- Difficult scaling
- Version inconsistency
Example:
Developer Machine
.NET 10
β
Test Server
.NET 9
β
Production
.NET 8
Application crashes because of different environments.
| Virtual Machine | Docker |
|---|---|
| Includes Full OS | Shares Host OS |
| Heavy | Lightweight |
| Slow Startup | Fast Startup |
| GB Size | MB Size |
| Hypervisor Required | Docker Engine |
| More RAM | Less RAM |
Docker starts containers in seconds.
Virtual Machines may take several minutes.
Docker consists of three major parts.
Docker Client
β
βΌ
Docker Engine
β
βΌ
Containers
Docker Engine includes:
- Docker Daemon
- REST API
- Docker CLI
- Docker Engine
- Docker CLI
- Docker Daemon
- Docker Image
- Docker Container
- Docker Registry
- Docker Hub
- Docker Network
- Docker Volume
Windows
- Docker Desktop
- WSL2
- Hyper-V
Linux
- Docker Engine
- Docker CLI
MacOS
- Docker Desktop
Verify Installation
docker --version
docker info
docker psImage is a read-only template used to create containers.
Examples
- nginx
- redis
- postgres
- mysql
- ubuntu
Useful Commands
docker images
docker pull nginx
docker rmi nginxContainer is a running instance of an Image.
Useful Commands
docker run nginx
docker ps
docker ps -a
docker stop
docker start
docker restart
docker rmA Registry stores Docker Images.
Popular Registries
- Docker Hub
- Azure Container Registry
- AWS ECR
- GitHub Container Registry
- Google Artifact Registry
Docker Hub is the largest public Docker Registry.
Examples
docker pull nginx
docker pull redis
docker push myimageCommon Commands
docker version
docker info
docker images
docker ps
docker run
docker exec
docker logs
docker inspect
docker rm
docker rmiDocker provides multiple network drivers.
- Bridge
- Host
- None
- Overlay
- Macvlan
Commands
docker network ls
docker network create
docker network inspect
docker network rmVolumes are used for persistent storage.
Commands
docker volume ls
docker volume create
docker volume inspect
docker volume rmBind Mount maps a host directory directly into a container.
Example
docker run -v C:\Data:/app/dataDockerfile defines how an image is built.
Example
FROM mcr.microsoft.com/dotnet/sdk:10.0
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release
ENTRYPOINT ["dotnet","MyApp.dll"]Used to reduce image size.
Advantages
- Smaller Images
- Faster Deployment
- Better Security
Docker Compose manages multiple containers.
Example
services:
sqlserver:
redis:
webapi:
angular:Commands
docker compose up
docker compose down
docker compose builddocker logs
docker logs -f
docker logs --tail 100docker run -e ConnectionStrings__Default=...Used for storing:
- Passwords
- API Keys
- Certificates
- Tokens
without hardcoding them.
Docker can automatically verify application health.
Example
HEALTHCHECK CMD curl http://localhostLimit CPU
--cpus="2"Limit Memory
--memory="512m"Best Practices
- Don't run as Root
- Use Official Images
- Keep Images Updated
- Scan Vulnerabilities
- Minimize Layers
- Use Multi Stage Builds
Docker Swarm provides container orchestration.
Features
- Scaling
- Load Balancing
- High Availability
- Rolling Updates
- Use Official Images
- Keep Images Small
- Use Multi Stage Build
- Use .dockerignore
- Avoid Running as Root
- Pin Image Versions
- Remove Unnecessary Packages
- Store Secrets Securely
- Monitor Containers
- Use Health Checks
docker version
docker info
docker images
docker image ls
docker pull
docker push
docker build
docker run
docker stop
docker start
docker restart
docker rm
docker rmi
docker exec
docker logs
docker inspect
docker network ls
docker volume ls
docker compose up
docker compose down
docker system prunedocker psdocker logs <container>docker system prune -adocker image prune- Docker Basics
- Docker Images
- Docker Containers
- Docker Networking
- Docker Volumes
- Docker Compose
- Dockerfile
- Multi Stage Build
- Docker Security
- Docker Swarm
- Docker Best Practices
- Docker Official Documentation
- Docker Hub
- Docker CLI Reference
- Docker Compose Documentation
If you find this repository helpful, please give it a β on GitHub.
Happy Coding! π