Docker-Cheat-Sheet
Following summary was generated by ChatGPT based on a conversation I had with it.
1. Docker Images and Tags
- Default Tag (
latest): - If no tag is specified during a build, Docker assigns the 
latesttag by default. - 
Example:
docker build -t myapp .createsmyapp:latest. - 
Versioned Tags:
 - Use versioned tags (e.g., 
myapp:1.0) to track changes and ensure reproducibility. - 
Example:
docker build -t myapp:1.0 .. - 
Best Practices:
 - Use semantic versioning (e.g., 
1.0.0,1.1.0). - Optionally maintain a 
latesttag for the most recent version. - 
Automate tagging in CI/CD pipelines using build numbers, commit hashes, or timestamps.
 - 
Cleaning Up Images:
 - Remove dangling (unused) images: 
docker image prune. - Remove all unused images: 
docker image prune -a. 
2. Docker Containers
- Lifecycle:
 - Containers are ephemeral; any data stored inside a container is lost when it is removed.
 - 
Use volumes or bind mounts to persist data beyond the container lifecycle.
 - 
Recreating Containers:
 - Containers must be removed before being recreated.
 - 
Use
docker-compose downfollowed bydocker-compose upto safely recreate containers. - 
Inspecting Containers:
 - Use 
docker psto list running containers. - Use 
docker inspect <container_id>to view detailed container information. 
3. Docker Volumes
- Purpose:
 - Volumes persist data independently of the container lifecycle.
 - 
Ideal for databases, file storage, or any data that must survive container recreation.
 - 
Using Volumes:
 - Define volumes in 
docker-compose.yml:
volumes: my-volume: services: my-service: volumes: - my-volume:/path/in/container - List volumes: 
docker volume ls. - 
Remove unused volumes:
docker volume prune. - 
Bind Mounts:
 - Use bind mounts to map a host directory to a container path:
volumes: - ./data:/path/in/container 
4. Docker Compose
- Service Configuration:
 - 
Define services in
docker-compose.ymlwithimage,build,ports, andvolumes:
services: my-service: image: myapp:1.0 build: context: . dockerfile: Dockerfile ports: - "8080:8080" volumes: - my-volume:/data - 
Ports:
 - Use the 
portsdirective to map container ports to host ports:
ports: - "8080:8080" # Host:Container - 
Avoid port conflicts by assigning unique host ports for each service.
 - 
Rebuilding Services:
 - Force a rebuild of images: 
docker-compose up --build. - Pull updated images: 
docker-compose pull. 
5. Dockerfile
- EXPOSE Directive:
 - Documents the ports the container listens on but does not map them to the host.
 - 
Example:
EXPOSE 8080 - 
Best Practices:
 - Use multi-stage builds to reduce image size:
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build RUN dotnet build FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime COPY --from=build /app /app - Keep the 
Dockerfileclean and modular. 
6. Cleaning Up Docker Resources
- Images:
 - Remove unused images: 
docker image prune. - 
Remove specific images:
docker rmi <image_id>. - 
Containers:
 - 
Stop and remove containers:
docker rm -f <container_id>. - 
Volumes:
 - 
Remove unused volumes:
docker volume prune. - 
Networks:
 - Remove unused networks: 
docker network prune. 
7. Debugging and Verification
- Inspect Running Containers:
 - Use 
docker psto list running containers. - 
Use
docker logs <container_id>to view logs. - 
Verify Ports:
 - Check mapped ports in 
docker-compose.ymlor withdocker ps. - 
Avoid conflicts by assigning unique host ports.
 - 
Test Changes:
 - Add unique log messages or version numbers to verify the latest image is running.
 
8. Automating with CI/CD
- Automate builds and tagging:
docker build -t myapp:$(git rev-parse --short HEAD) . - Push images to a registry (e.g., Docker Hub, Azure Container Registry):
docker push myapp:1.0