Docker
Use this cheat sheet for everyday Docker commands: building images, running containers, checking logs, stopping services, and cleaning unused resources.
Install Check
Check Docker version:
docker --version
Check Docker service:
docker info
On Ubuntu, start and enable Docker:
systemctl start docker
systemctl enable docker
Images
List local images:
docker images
Build an image from the current folder:
docker build -t app-name .
Build with a specific Dockerfile:
docker build -f Dockerfile.prod -t app-name .
Remove an image:
docker rmi image-name
Containers
List running containers:
docker ps
List all containers:
docker ps -a
Run a container:
docker run app-name
Run in the background:
docker run -d app-name
Map host port to container port:
docker run -d -p 8000:8000 app-name
Run with a name:
docker run -d --name ocr-api -p 8000:8000 app-name
Stop a container:
docker stop container-name
Start a stopped container:
docker start container-name
Restart a container:
docker restart container-name
Remove a container:
docker rm container-name
Logs And Shell Access
View logs:
docker logs container-name
Follow logs:
docker logs -f container-name
Open a shell inside a container:
docker exec -it container-name bash
If Bash is not installed:
docker exec -it container-name sh
Environment Variables
Pass one environment variable:
docker run -e API_KEY=value app-name
Use an env file:
docker run --env-file .env app-name
Volumes
Mount a local folder:
docker run -v "$PWD/uploads:/app/uploads" app-name
List volumes:
docker volume ls
Remove a volume:
docker volume rm volume-name
Docker Compose
Start services:
docker compose up
Start in the background:
docker compose up -d
Stop services:
docker compose down
Rebuild and start:
docker compose up -d --build
View compose logs:
docker compose logs -f
Cleanup
Remove stopped containers:
docker container prune
Remove unused images:
docker image prune
Remove unused Docker data:
docker system prune
Remove unused Docker data including unused images:
docker system prune -a
Common Production Flow
For a backend API:
git pull
docker build -t ocr-api .
docker stop ocr-api
docker rm ocr-api
docker run -d --name ocr-api -p 8000:8000 ocr-api
For Docker Compose:
git pull
docker compose up -d --build
Minimal Dockerfile
FROM python:3.10
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Key Ideas
- Image: a packaged app template.
- Container: a running instance of an image.
- Port mapping: exposes a container port to the server.
- Volume: keeps files outside the container lifecycle.
- Compose: runs multiple services from one config file.