What is Docker?
Docker allows you to package your application and its dependencies into containers, ensuring consistent behavior across different environments.
Creating a Dockerfile
# Use Node.js official image
FROM node:18-alpine
# Set working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm install --production
# Copy application code
COPY . .
# Expose port
EXPOSE 3000
# Start application
CMD ["node", "server.js"]
Docker Commands
# Build Docker image
docker build -t my-api:latest .
# Run container
docker run -p 3000:3000 my-api:latest
# Run in detached mode
docker run -d -p 3000:3000 --name my-api my-api:latest
# View running containers
docker ps
# Stop container
docker stop my-api
# View logs
docker logs my-api
# Remove container
docker rm my-api
Docker Compose
# docker-compose.yml
version: '3.8'
services:
api:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
depends_on:
- db
db:
image: postgres:14
environment:
- POSTGRES_DB=mydb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Running with Docker Compose
# Start all services
docker-compose up
# Start in background
docker-compose up -d
# Stop services
docker-compose down
# View logs
docker-compose logs -f
Best Practices
- Use multi-stage builds for smaller images
- Don't run as root user
- Use .dockerignore to exclude unnecessary files
- Keep images small with alpine variants
- Use specific version tags, not 'latest'