Docker changed how we develop and deploy applications. No more "it works on my machine" problems. This guide covers the essentials every developer should know.
Your First Dockerfile
A Dockerfile is a recipe for building your container image:
FROM node:18-alpine
WORKDIR /app
# Copy package files first (better caching)
COPY package*.json ./
RUN npm ci --only=production
# Copy source code
COPY . .
EXPOSE 3000
CMD ["node", "server.js"] Docker Compose for Development
Use docker-compose.yml to run multiple services together:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- NODE_ENV=development
- DB_HOST=db
depends_on:
- db
- redis
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data: Useful Commands
Commands you'll use daily:
# Build and run
docker-compose up --build
# Run in background
docker-compose up -d
# View logs
docker-compose logs -f app
# Execute command in container
docker-compose exec app sh
# Stop everything
docker-compose down
# Clean up unused images
docker system prune -a