🔧 DevOps
Docker Containerization Guide
Last updated: 2025-09-25 12:47:03
Docker Containerization
Docker revolutionizes application deployment by packaging applications and their dependencies into lightweight, portable containers.
Basic Docker Commands
# Pull an image from Docker Hub
docker pull nginx:latest
# Run a container
docker run -d -p 8080:80 --name my-nginx nginx
# List running containers
docker ps
docker ps -a # All containers (including stopped)
# Stop and start containers
docker stop my-nginx
docker start my-nginx
docker restart my-nginx
# Remove containers and images
docker rm my-nginx
docker rmi nginx:latest
# View logs
docker logs my-nginx
docker logs -f my-nginx # Follow logsCreating Dockerfiles
# Dockerfile for Node.js application
FROM node:18-alpine
# Set working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
# Copy application code
COPY . .
# Expose port
EXPOSE 3000
# Create non-root user
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
USER nextjs
# Start application
CMD ["npm", "start"]Docker Compose
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=mysql://user:pass@db:3306/myapp
depends_on:
- db
volumes:
- ./uploads:/app/uploads
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=rootpass
- MYSQL_DATABASE=myapp
- MYSQL_USER=user
- MYSQL_PASSWORD=pass
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
db_data:Docker Compose Commands
# Start all services
docker-compose up -d
# View logs
docker-compose logs -f
docker-compose logs web # Specific service
# Scale services
docker-compose up -d --scale web=3
# Stop services
docker-compose down
# Rebuild and restart
docker-compose up -d --build
# Execute commands in container
docker-compose exec web bash
docker-compose exec db mysql -u root -p