Docker Containerization on Ubuntu Server: Complete Business Guide
Docker containerization revolutionizes how businesses deploy and manage applications. This comprehensive guide covers implementing Docker on Ubuntu Server for improved scalability, consistency, and resource efficiency.
What is Docker?
Docker is a containerization platform that packages applications and their dependencies into lightweight, portable containers. Unlike traditional virtual machines, containers share the host OS kernel, making them more efficient.
Benefits for Small Businesses
- Consistency: Applications run the same everywhere
- Scalability: Easy horizontal scaling
- Resource efficiency: Lower overhead than VMs
- Development speed: Faster deployment cycles
- Isolation: Applications don't interfere with each other
Installation on Ubuntu Server 22.04
Remove Old Versions
sudo apt remove docker docker-engine docker.io containerd runc
Install Prerequisites
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y
Add Docker Repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Install Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
Configure Docker
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
Log out and back in for group changes to take effect.
Basic Docker Commands
Container Management
# List running containers
docker ps
# List all containers
docker ps -a
# Start a container
docker start container_name
# Stop a container
docker stop container_name
# Remove a container
docker rm container_name
Image Management
# List images
docker images
# Pull an image
docker pull ubuntu:22.04
# Build an image
docker build -t myapp .
# Remove an image
docker rmi image_name
Docker Compose for Multi-Container Applications
Installation
Docker Compose is included with Docker Engine as a plugin.
Sample docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "80:80"
depends_on:
- database
environment:
- DB_HOST=database
- DB_NAME=myapp
- DB_USER=myapp
- DB_PASSWORD=secure_password
database:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=root_password
- MYSQL_DATABASE=myapp
- MYSQL_USER=myapp
- MYSQL_PASSWORD=secure_password
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
Compose Commands
# Start all services
docker compose up -d
# Stop all services
docker compose down
# View logs
docker compose logs
# Scale a service
docker compose up -d --scale web=3
Creating Custom Docker Images
Dockerfile Example
FROM ubuntu:22.04
# Install dependencies
RUN apt-get update && apt-get install -y \
apache2 \
php8.1 \
php8.1-mysql \
&& rm -rf /var/lib/apt/lists/*
# Copy application code
COPY . /var/www/html/
# Set permissions
RUN chown -R www-data:www-data /var/www/html/
# Expose port
EXPOSE 80
# Start Apache
CMD ["apache2ctl", "-D", "FOREGROUND"]
Build and Run
# Build image
docker build -t mywebapp .
# Run container
docker run -d -p 80:80 --name webapp mywebapp
Production Deployment Strategies
Container Orchestration
For production environments, consider: - Docker Swarm: Native Docker orchestration - Kubernetes: More complex but powerful - Portainer: Web-based management interface
Health Checks
Add health checks to your containers:
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost/ || exit 1
Resource Limits
docker run -d --memory=512m --cpus=1 myapp
Monitoring and Logging
Container Monitoring
# Monitor resource usage
docker stats
# View container logs
docker logs container_name
# Follow logs in real-time
docker logs -f container_name
Centralized Logging
Use logging drivers for centralized log management:
docker run -d --log-driver=syslog --log-opt syslog-address=udp://logserver:514 myapp
Security Best Practices
Image Security
- Use official base images
- Regularly update base images
- Scan images for vulnerabilities
- Use minimal base images (Alpine Linux)
Runtime Security
# Run containers as non-root user
docker run --user 1000:1000 myapp
# Use read-only filesystem
docker run --read-only myapp
# Limit capabilities
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp
Network Security
# Create custom networks
docker network create mynetwork
# Run containers on custom network
docker run --network=mynetwork myapp
Backup and Recovery
Data Volume Backup
# Backup volume
docker run --rm -v myvolume:/data -v $(pwd):/backup ubuntu tar czf /backup/backup.tar.gz /data
# Restore volume
docker run --rm -v myvolume:/data -v $(pwd):/backup ubuntu tar xzf /backup/backup.tar.gz -C /
Container Export/Import
# Export container
docker export container_name > container.tar
# Import container
docker import container.tar myapp:backup
Performance Optimization
Resource Management
- Set appropriate memory limits
- Use multi-stage builds to reduce image size
- Optimize Dockerfile layer caching
- Use .dockerignore files
Storage Optimization
# Clean up unused resources
docker system prune -a
# Remove unused volumes
docker volume prune
# Remove unused networks
docker network prune
Troubleshooting Common Issues
Container Won't Start
- Check logs:
docker logs container_name
- Verify image:
docker images
- Check port conflicts:
netstat -tlnp
Performance Issues
- Monitor resources:
docker stats
- Check host system resources
- Optimize Dockerfile
Network Problems
- Verify network configuration:
docker network ls
- Check firewall settings
- Test connectivity between containers
Conclusion
Docker containerization provides powerful benefits for small businesses, including improved consistency, scalability, and resource efficiency. By following these best practices, you can implement a robust containerized infrastructure.
For professional Docker implementation and management services in Louisville, contact Tyler on Tech Louisville for expert guidance tailored to your business requirements.