Awesome-claude-skills docker-cli
Docker and Docker Compose commands for containerization. Use for building images, running containers, managing volumes, and orchestrating services.
install
source · Clone the upstream repo
git clone https://github.com/itsnex1s/awesome-claude-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/itsnex1s/awesome-claude-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/docker-cli" ~/.claude/skills/itsnex1s-awesome-claude-skills-docker-cli && rm -rf "$T"
manifest:
skills/docker-cli/SKILL.mdsource content
docker-cli
Docker and Docker Compose commands for containerization, image building, and container orchestration.
Installation
# macOS brew install --cask docker # Verify docker --version docker compose version
Images
Build
docker build -t myapp . # Build from Dockerfile docker build -t myapp:v1.0 . # With tag docker build -t myapp -f Dockerfile.prod . # Custom Dockerfile docker build --no-cache -t myapp . # Without cache docker build --platform linux/amd64 -t myapp . # Specific platform
List & Remove
docker images # List images docker images -a # Include intermediate docker rmi myapp # Remove image docker rmi $(docker images -q) # Remove all images docker image prune # Remove dangling images docker image prune -a # Remove unused images
Push to Registry
docker login # Login to Docker Hub docker tag myapp username/myapp:v1.0 # Tag for registry docker push username/myapp:v1.0 # Push docker pull username/myapp:v1.0 # Pull
Containers
Run
docker run myapp # Run container docker run -d myapp # Detached (background) docker run -p 3000:3000 myapp # Port mapping docker run -p 3000:3000 -p 5432:5432 myapp # Multiple ports docker run --name mycontainer myapp # Named container docker run -e NODE_ENV=production myapp # Environment variable docker run --env-file .env myapp # Env file docker run -v $(pwd):/app myapp # Mount volume docker run -it myapp /bin/sh # Interactive shell docker run --rm myapp # Remove after exit
Common Run Patterns
# Web app with hot reload docker run -d -p 3000:3000 -v $(pwd):/app --name dev myapp # Database docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=secret --name db postgres:15 # One-off command docker run --rm myapp npm test
Manage
docker ps # Running containers docker ps -a # All containers docker stop mycontainer # Stop container docker start mycontainer # Start stopped container docker restart mycontainer # Restart container docker rm mycontainer # Remove container docker rm -f mycontainer # Force remove running docker rm $(docker ps -aq) # Remove all containers
Logs & Debug
docker logs mycontainer # View logs docker logs -f mycontainer # Follow logs docker logs --tail 100 mycontainer # Last 100 lines docker exec -it mycontainer sh # Shell into container docker exec mycontainer ls /app # Run command docker inspect mycontainer # Container details docker stats # Resource usage docker top mycontainer # Running processes
Volumes
docker volume create myvolume # Create volume docker volume ls # List volumes docker volume inspect myvolume # Volume details docker volume rm myvolume # Remove volume docker volume prune # Remove unused volumes # Mount volume docker run -v myvolume:/data myapp docker run -v $(pwd)/data:/data myapp # Bind mount
Networks
docker network create mynetwork # Create network docker network ls # List networks docker network inspect mynetwork # Network details docker network rm mynetwork # Remove network # Connect container to network docker run --network mynetwork myapp docker network connect mynetwork mycontainer
Docker Compose
Basic Commands
docker compose up # Start services docker compose up -d # Detached mode docker compose up --build # Rebuild images docker compose down # Stop and remove docker compose down -v # Also remove volumes docker compose stop # Stop services docker compose start # Start services docker compose restart # Restart services docker compose ps # List services docker compose logs # View logs docker compose logs -f api # Follow specific service docker compose exec api sh # Shell into service
Example docker-compose.yml
version: '3.8' services: app: build: . ports: - "3000:3000" environment: - DATABASE_URL=postgresql://postgres:secret@db:5432/mydb volumes: - .:/app - /app/node_modules depends_on: - db command: npm run dev db: image: postgres:15 ports: - "5432:5432" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: secret POSTGRES_DB: mydb volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data:
Production docker-compose.prod.yml
version: '3.8' services: app: build: context: . dockerfile: Dockerfile.prod ports: - "3000:3000" environment: - NODE_ENV=production restart: unless-stopped
Dockerfile Examples
Node.js
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . EXPOSE 3000 CMD ["npm", "start"]
Multi-stage (Production)
# Build stage FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Production stage FROM node:20-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules COPY package*.json ./ ENV NODE_ENV=production EXPOSE 3000 CMD ["npm", "start"]
Next.js
FROM node:20-alpine AS deps WORKDIR /app COPY package*.json ./ RUN npm ci FROM node:20-alpine AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npm run build FROM node:20-alpine AS runner WORKDIR /app ENV NODE_ENV=production COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static EXPOSE 3000 CMD ["node", "server.js"]
.dockerignore
node_modules .next .git .env*.local *.log dist coverage
Cleanup
docker system df # Disk usage docker system prune # Remove unused data docker system prune -a # Remove all unused docker system prune --volumes # Include volumes
Common Workflows
Development Setup
docker compose up -d db # Start only database npm run dev # Run app locally
Full Stack Dev
docker compose up --build # App at localhost:3000, DB at localhost:5432
Production Build & Test
docker build -t myapp:prod -f Dockerfile.prod . docker run --rm -p 3000:3000 myapp:prod
Deploy to Registry
docker build -t ghcr.io/username/myapp:v1.0 . docker push ghcr.io/username/myapp:v1.0
Troubleshooting
Container won't start
docker logs mycontainer # Check logs docker inspect mycontainer # Check config
Port already in use
lsof -i :3000 # Find process kill -9 <PID> # Kill process
Out of disk space
docker system prune -a --volumes
Permission denied
# Add user to docker group (Linux) sudo usermod -aG docker $USER