# Run a container
docker run <image>
docker run -d <image> # Detached mode
docker run -it <image> /bin/bash # Interactive terminal
docker run --name myapp <image> # Named container
docker run -p 8080:80 <image> # Port mapping
docker run -v /host:/container <image> # Volume mount
docker run --rm <image> # Remove after exit
docker run -e VAR=value <image> # Environment variable
docker run --env-file .env <image> # Env file
# List containers
docker ps # Running containers
docker ps -a # All containers
docker ps -q # Only IDs
# Start/Stop containers
docker start <container>
docker stop <container>
docker restart <container>
docker kill <container> # Force stop
# Remove containers
docker rm <container>
docker rm -f <container> # Force remove
docker container prune # Remove all stopped
# List images
docker images
docker images -a # Include intermediate
# Pull/Push images
docker pull <image>:<tag>
docker push <image>:<tag>
# Build image
docker build -t <name>:<tag> .
docker build -f Dockerfile.dev -t <name> .
docker build --no-cache -t <name> .
# Tag image
docker tag <image> <new-name>:<tag>
# Remove images
docker rmi <image>
docker image prune # Remove unused
docker image prune -a # Remove all unused
# Base image
FROM node:18-alpine
# Set working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm install
# Copy source code
COPY . .
# Build application
RUN npm run build
# Expose port
EXPOSE 3000
# Environment variables
ENV NODE_ENV=production
# Run command
CMD ["npm", "start"]
# Alternative: Entrypoint
ENTRYPOINT ["node", "server.js"]
# Build stage
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production stage
FROM node:18-alpine AS production
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/server.js"]
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://db:5432/mydb
depends_on:
- db
volumes:
- ./src:/app/src
networks:
- app-network
db:
image: postgres:15
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- app-network
volumes:
postgres-data:
networks:
app-network:
driver: bridge
# Start services
docker-compose up
docker-compose up -d # Detached
docker-compose up --build # Rebuild images
docker-compose up --scale web=3 # Scale service
# Stop services
docker-compose down
docker-compose down -v # Remove volumes
docker-compose down --rmi all # Remove images
# Manage services
docker-compose start
docker-compose stop
docker-compose restart
docker-compose pause
docker-compose unpause
# View logs
docker-compose logs
docker-compose logs -f # Follow
docker-compose logs web # Specific service
# Execute command
docker-compose exec web sh
docker-compose run web npm test
# View logs
docker logs <container>
docker logs -f <container> # Follow
docker logs --tail 100 <container> # Last 100 lines
docker logs --since 1h <container> # Last hour
# Execute command in container
docker exec -it <container> sh
docker exec -it <container> /bin/bash
docker exec <container> ls -la
# Inspect container
docker inspect <container>
docker inspect --format='{{.NetworkSettings.IPAddress}}' <container>
# Resource usage
docker stats
docker stats <container>
# Container processes
docker top <container>
# List networks
docker network ls
# Create network
docker network create <name>
docker network create --driver bridge <name>
# Connect/disconnect
docker network connect <network> <container>
docker network disconnect <network> <container>
# Inspect network
docker network inspect <network>
# Remove network
docker network rm <network>
docker network prune
# List volumes
docker volume ls
# Create volume
docker volume create <name>
# Inspect volume
docker volume inspect <name>
# Remove volume
docker volume rm <name>
docker volume prune
# Use volume in run
docker run -v <volume>:/path <image>
docker run -v /host/path:/container/path <image>
docker run -v /container/path <image> # Anonymous volume
# System info
docker info
docker version
# Disk usage
docker system df
docker system df -v
# Clean up
docker system prune # Remove unused data
docker system prune -a # Include images
docker system prune --volumes # Include volumes
# Events
docker events
docker events --filter 'container=myapp'
# Copy files from container
docker cp <container>:/path/file ./local/path
# Copy files to container
docker cp ./local/file <container>:/path/
# Export/Import container
docker export <container> > container.tar
docker import container.tar <image>
# Save/Load image
docker save <image> > image.tar
docker load < image.tar
# Run one-off command
docker run --rm -it <image> <command>
# Check container health
docker inspect --format='{{.State.Health.Status}}' <container>