{"skill":{"slug":"docker-essentials","displayName":"Docker Essentials","summary":"Essential Docker commands and workflows for container management, image operations, and debugging.","description":"---\nname: docker-essentials\ndescription: Essential Docker commands and workflows for container management, image operations, and debugging.\nhomepage: https://docs.docker.com/\nmetadata: {\"clawdbot\":{\"emoji\":\"🐳\",\"requires\":{\"bins\":[\"docker\"]}}}\n---\n\n# Docker Essentials\n\nEssential Docker commands for container and image management.\n\n## Container Lifecycle\n\n### Running containers\n```bash\n# Run container from image\ndocker run nginx\n\n# Run in background (detached)\ndocker run -d nginx\n\n# Run with name\ndocker run --name my-nginx -d nginx\n\n# Run with port mapping\ndocker run -p 8080:80 -d nginx\n\n# Run with environment variables\ndocker run -e MY_VAR=value -d app\n\n# Run with volume mount\ndocker run -v /host/path:/container/path -d app\n\n# Run with auto-remove on exit\ndocker run --rm alpine echo \"Hello\"\n\n# Interactive terminal\ndocker run -it ubuntu bash\n```\n\n### Managing containers\n```bash\n# List running containers\ndocker ps\n\n# List all containers (including stopped)\ndocker ps -a\n\n# Stop container\ndocker stop container_name\n\n# Start stopped container\ndocker start container_name\n\n# Restart container\ndocker restart container_name\n\n# Remove container\ndocker rm container_name\n\n# Force remove running container\ndocker rm -f container_name\n\n# Remove all stopped containers\ndocker container prune\n```\n\n## Container Inspection & Debugging\n\n### Viewing logs\n```bash\n# Show logs\ndocker logs container_name\n\n# Follow logs (like tail -f)\ndocker logs -f container_name\n\n# Last 100 lines\ndocker logs --tail 100 container_name\n\n# Logs with timestamps\ndocker logs -t container_name\n```\n\n### Executing commands\n```bash\n# Execute command in running container\ndocker exec container_name ls -la\n\n# Interactive shell\ndocker exec -it container_name bash\n\n# Execute as specific user\ndocker exec -u root -it container_name bash\n\n# Execute with environment variable\ndocker exec -e VAR=value container_name env\n```\n\n### Inspection\n```bash\n# Inspect container details\ndocker inspect container_name\n\n# Get specific field (JSON path)\ndocker inspect -f '{{.NetworkSettings.IPAddress}}' container_name\n\n# View container stats\ndocker stats\n\n# View specific container stats\ndocker stats container_name\n\n# View processes in container\ndocker top container_name\n```\n\n## Image Management\n\n### Building images\n```bash\n# Build from Dockerfile\ndocker build -t myapp:1.0 .\n\n# Build with custom Dockerfile\ndocker build -f Dockerfile.dev -t myapp:dev .\n\n# Build with build args\ndocker build --build-arg VERSION=1.0 -t myapp .\n\n# Build without cache\ndocker build --no-cache -t myapp .\n```\n\n### Managing images\n```bash\n# List images\ndocker images\n\n# Pull image from registry\ndocker pull nginx:latest\n\n# Tag image\ndocker tag myapp:1.0 myapp:latest\n\n# Push to registry\ndocker push myrepo/myapp:1.0\n\n# Remove image\ndocker rmi image_name\n\n# Remove unused images\ndocker image prune\n\n# Remove all unused images\ndocker image prune -a\n```\n\n## Docker Compose\n\n### Basic operations\n```bash\n# Start services\ndocker-compose up\n\n# Start in background\ndocker-compose up -d\n\n# Stop services\ndocker-compose down\n\n# Stop and remove volumes\ndocker-compose down -v\n\n# View logs\ndocker-compose logs\n\n# Follow logs for specific service\ndocker-compose logs -f web\n\n# Scale service\ndocker-compose up -d --scale web=3\n```\n\n### Service management\n```bash\n# List services\ndocker-compose ps\n\n# Execute command in service\ndocker-compose exec web bash\n\n# Restart service\ndocker-compose restart web\n\n# Rebuild service\ndocker-compose build web\n\n# Rebuild and restart\ndocker-compose up -d --build\n```\n\n## Networking\n\n```bash\n# List networks\ndocker network ls\n\n# Create network\ndocker network create mynetwork\n\n# Connect container to network\ndocker network connect mynetwork container_name\n\n# Disconnect from network\ndocker network disconnect mynetwork container_name\n\n# Inspect network\ndocker network inspect mynetwork\n\n# Remove network\ndocker network rm mynetwork\n```\n\n## Volumes\n\n```bash\n# List volumes\ndocker volume ls\n\n# Create volume\ndocker volume create myvolume\n\n# Inspect volume\ndocker volume inspect myvolume\n\n# Remove volume\ndocker volume rm myvolume\n\n# Remove unused volumes\ndocker volume prune\n\n# Run with volume\ndocker run -v myvolume:/data -d app\n```\n\n## System Management\n\n```bash\n# View disk usage\ndocker system df\n\n# Clean up everything unused\ndocker system prune\n\n# Clean up including unused images\ndocker system prune -a\n\n# Clean up including volumes\ndocker system prune --volumes\n\n# Show Docker info\ndocker info\n\n# Show Docker version\ndocker version\n```\n\n## Common Workflows\n\n**Development container:**\n```bash\ndocker run -it --rm \\\n  -v $(pwd):/app \\\n  -w /app \\\n  -p 3000:3000 \\\n  node:18 \\\n  npm run dev\n```\n\n**Database container:**\n```bash\ndocker run -d \\\n  --name postgres \\\n  -e POSTGRES_PASSWORD=secret \\\n  -e POSTGRES_DB=mydb \\\n  -v postgres-data:/var/lib/postgresql/data \\\n  -p 5432:5432 \\\n  postgres:15\n```\n\n**Quick debugging:**\n```bash\n# Shell into running container\ndocker exec -it container_name sh\n\n# Copy file from container\ndocker cp container_name:/path/to/file ./local/path\n\n# Copy file to container\ndocker cp ./local/file container_name:/path/in/container\n```\n\n**Multi-stage build:**\n```dockerfile\n# Dockerfile\nFROM node:18 AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm install\nCOPY . .\nRUN npm run build\n\nFROM nginx:alpine\nCOPY --from=builder /app/dist /usr/share/nginx/html\n```\n\n## Useful Flags\n\n**`docker run` flags:**\n- `-d`: Detached mode (background)\n- `-it`: Interactive terminal\n- `-p`: Port mapping (host:container)\n- `-v`: Volume mount\n- `-e`: Environment variable\n- `--name`: Container name\n- `--rm`: Auto-remove on exit\n- `--network`: Connect to network\n\n**`docker exec` flags:**\n- `-it`: Interactive terminal\n- `-u`: User\n- `-w`: Working directory\n\n## Tips\n\n- Use `.dockerignore` to exclude files from build context\n- Combine `RUN` commands in Dockerfile to reduce layers\n- Use multi-stage builds to reduce image size\n- Always tag your images with versions\n- Use `--rm` for one-off containers\n- Use `docker-compose` for multi-container apps\n- Clean up regularly with `docker system prune`\n\n## Documentation\n\nOfficial docs: https://docs.docker.com/\nDockerfile reference: https://docs.docker.com/engine/reference/builder/\nCompose file reference: https://docs.docker.com/compose/compose-file/\n","topics":["Docker","Debugging"],"tags":{"latest":"1.0.0"},"stats":{"comments":3,"downloads":32382,"installsAllTime":1131,"installsCurrent":342,"stars":37,"versions":1},"createdAt":1769692040015,"updatedAt":1778485868789},"latestVersion":{"version":"1.0.0","createdAt":1769692040015,"changelog":"docker-essentials 1.0.0\n\n- Initial release with a comprehensive guide to essential Docker commands and workflows.\n- Covers container lifecycle management, debugging, image operations, Compose, networking, volumes, and system cleanup.\n- Includes common workflow examples, multi-stage build patterns, and handy flag references.\n- Links to official Docker, Dockerfile, and Compose references for further documentation.","license":null},"metadata":{"setup":[],"os":null,"systems":null},"owner":{"handle":"arnarsson","userId":"s1703vde870n8r5vvwnrs7xpg9884rg5","displayName":"Arnarsson","image":"https://avatars.githubusercontent.com/u/96142966?v=4"},"moderation":null}