| name | docker-cli |
| description | Docker and Docker Compose commands for containerization. Use for building images, running containers, managing volumes, and orchestrating services. |
| allowed-tools | Bash, Read, Edit |
| user-invocable | true |
docker-cli
Docker and Docker Compose commands for containerization, image building, and container orchestration.
Installation
brew install --cask docker
docker --version
docker compose version
Images
Build
docker build -t myapp .
docker build -t myapp:v1.0 .
docker build -t myapp -f Dockerfile.prod .
docker build --no-cache -t myapp .
docker build --platform linux/amd64 -t myapp .
List & Remove
docker images
docker images -a
docker rmi myapp
docker rmi $(docker images -q)
docker image prune
docker image prune -a
Push to Registry
docker login
docker tag myapp username/myapp:v1.0
docker push username/myapp:v1.0
docker pull username/myapp:v1.0
Containers
Run
docker run myapp
docker run -d myapp
docker run -p 3000:3000 myapp
docker run -p 3000:3000 -p 5432:5432 myapp
docker run --name mycontainer myapp
docker run -e NODE_ENV=production myapp
docker run --env-file .env myapp
docker run -v $(pwd):/app myapp
docker run -it myapp /bin/sh
docker run --rm myapp
Common Run Patterns
docker run -d -p 3000:3000 -v $(pwd):/app --name dev myapp
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=secret --name db postgres:15
docker run --rm myapp npm test
Manage
docker ps
docker ps -a
docker stop mycontainer
docker start mycontainer
docker restart mycontainer
docker rm mycontainer
docker rm -f mycontainer
docker rm $(docker ps -aq)
Logs & Debug
docker logs mycontainer
docker logs -f mycontainer
docker logs --tail 100 mycontainer
docker exec -it mycontainer sh
docker exec mycontainer ls /app
docker inspect mycontainer
docker stats
docker top mycontainer
Volumes
docker volume create myvolume
docker volume ls
docker volume inspect myvolume
docker volume rm myvolume
docker volume prune
docker run -v myvolume:/data myapp
docker run -v $(pwd)/data:/data myapp
Networks
docker network create mynetwork
docker network ls
docker network inspect mynetwork
docker network rm mynetwork
docker run --network mynetwork myapp
docker network connect mynetwork mycontainer
Docker Compose
Basic Commands
docker compose up
docker compose up -d
docker compose up --build
docker compose down
docker compose down -v
docker compose stop
docker compose start
docker compose restart
docker compose ps
docker compose logs
docker compose logs -f api
docker compose exec api sh
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
docker system prune
docker system prune -a
docker system prune --volumes
Common Workflows
Development Setup
docker compose up -d db
npm run dev
Full Stack Dev
docker compose up --build
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
docker inspect mycontainer
Port already in use
lsof -i :3000
kill -9 <PID>
Out of disk space
docker system prune -a --volumes
Permission denied
sudo usermod -aG docker $USER