Docker for Developers
Docker allows developers to package applications and their dependencies into containers so they can run consistently across different environments.
Docker Compose extends this workflow by allowing multiple services to be defined and managed together.
1. Install Docker
Docker Desktop is the easiest way to get Docker on Windows and macOS and includes Docker Engine, Docker CLI and Docker Compose.
After installation:
docker --version
Check Compose:
docker compose version
2. Run Your First Container
docker run hello-world
Run Nginx:
docker run -d -p 8080:80 nginx
Open:
http://localhost:8080
3. Important Docker Concepts
Image
A read-only template used to create containers.
Container
A running instance of an image.
Dockerfile
Instructions used to build an image.
Volume
Persistent storage outside the container lifecycle.
Network
Allows containers to communicate.
Registry
A location for storing and distributing images.
4. Common Docker Commands
List running containers:
docker ps
List all containers:
docker ps -a
List images:
docker images
Stop a container:
docker stop <container>
Start:
docker start <container>
Remove:
docker rm <container>
Remove image:
docker rmi <image>
View logs:
docker logs <container>
Follow logs:
docker logs -f <container>
Open a shell:
docker exec -it <container> sh
5. Create a Dockerfile
Example Python application:
FROM python:3.12-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]Build:
docker build -t my-app .
Run:
docker run -p 5000:5000 my-app
6. Environment Variables
Create:
.env
Example:
DATABASE_URL=postgresql://localhost/mydb
API_KEY=your-keyDo not commit secrets.
Add .env to .gitignore.
7. Docker Compose
Create:
compose.yaml
Example:
services:
web:
build: .
ports:
- "8000:5000"
environment:
REDIS_HOST: redis
REDIS_PORT: 6379
depends_on:
redis:
condition: service_healthy
redis:
image: redis:alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5Start:
docker compose up
Background mode:
docker compose up -d
Stop:
docker compose down
Docker's current Compose documentation covers services, networks, volumes, health checks, logs, exec, configuration and Compose Watch.
8. Docker Compose Commands
docker compose up
docker compose up -d
docker compose down
docker compose ps
docker compose logs
docker compose logs -f
docker compose restart
docker compose build
docker compose pull
docker compose config
docker compose execExample:
docker compose exec web sh
9. Persistent Volumes
Without a volume, container data can disappear when containers are removed.
Example:
services:
redis:
image: redis:alpine
volumes:
- redis-data:/data
volumes:
redis-data:Start:
docker compose up
Remove containers and volumes:
docker compose down -v
Be careful: -v removes named volumes and their stored data.
10. Docker Debugging
Check containers:
docker ps
View logs:
docker logs <container>
Enter container:
docker exec -it <container> sh
For Compose:
docker compose logs -f
Enter service:
docker compose exec web sh
Check resolved Compose configuration:
docker compose config
11. Docker Development Workflow
1. Create Dockerfile
2. Build image
3. Run container
4. Inspect logs
5. Add environment variables
6. Add volumes
7. Add Docker Compose
8. Add health checks
9. Test locally
10. Build production imageDocker Cheat Sheet
docker build -t app .
docker run app
docker ps
docker ps -a
docker images
docker logs <container>
docker exec -it <container> sh
docker stop <container>
docker rm <container>
docker rmi <image>
docker compose up
docker compose up -d
docker compose down
docker compose ps
docker compose logs -f
docker compose exec <service> sh
docker compose build
docker compose config

