Docker Commands for WordPress Developers
Learning Objectives
- Master essential Docker and Docker Compose commands
- Use WP-CLI within Docker containers
- Perform database operations and backups
- Manage containers, images, volumes, and networks
Introduction
Proficiency with Docker commands is essential for efficient WordPress development. This lesson covers the commands you'll use daily in your Docker-based WordPress workflow.
Command Structure
Docker Compose Commands
Essential commands for managing your WordPress stack:
Starting and Stopping Services
# Start all services in detached mode
docker-compose up -d
# Start specific service
docker-compose up -d wordpress
# Stop all services
docker-compose down
# Stop and remove volumes (careful - deletes data!)
docker-compose down -v
# Restart services
docker-compose restart
# Restart specific service
docker-compose restart wordpress
# Pause services
docker-compose pause
# Unpause services
docker-compose unpause
Viewing Service Status
# List running services
docker-compose ps
# List all services (including stopped)
docker-compose ps -a
# View service logs
docker-compose logs
# Follow logs in real-time
docker-compose logs -f
# View logs for specific service
docker-compose logs wordpress
# View last 50 lines of logs
docker-compose logs --tail=50
# View logs with timestamps
docker-compose logs -t
Building and Rebuilding
# Build services
docker-compose build
# Build with no cache
docker-compose build --no-cache
# Build specific service
docker-compose build wordpress
# Pull latest images
docker-compose pull
# Recreate containers
docker-compose up -d --force-recreate
Container Management
Working directly with Docker containers:
Executing Commands in Containers
# Execute command in running container
docker exec wp-site ls -la
# Interactive bash shell
docker exec -it wp-site bash
# Execute as specific user
docker exec -u www-data wp-site whoami
# Execute in specific directory
docker exec -w /var/www/html wp-site pwd
# Run command and exit
docker exec wp-site php -v
Container Information
# List all containers
docker ps -a
# Filter containers by name
docker ps -f name=wp
# Show container details
docker inspect wp-site
# View container stats
docker stats wp-site
# View container processes
docker top wp-site
# View container ports
docker port wp-site
Container File Operations
# Copy file from container
docker cp wp-site:/var/www/html/wp-config.php ./wp-config-backup.php
# Copy file to container
docker cp ./custom-theme.zip wp-site:/var/www/html/wp-content/themes/
# Copy directory from container
docker cp wp-site:/var/www/html/wp-content/uploads ./uploads-backup
# Copy directory to container
docker cp ./my-plugin wp-site:/var/www/html/wp-content/plugins/
WP-CLI in Docker
Using WordPress CLI commands within Docker containers:
Basic WP-CLI Commands
# Check WordPress version
docker exec wp-site wp core version
# Update WordPress core
docker exec wp-site wp core update
# Check for plugin updates
docker exec wp-site wp plugin list
# Install a plugin
docker exec wp-site wp plugin install akismet --activate
# Deactivate a plugin
docker exec wp-site wp plugin deactivate akismet
# Update all plugins
docker exec wp-site wp plugin update --all
# Install a theme
docker exec wp-site wp theme install twentytwentythree
# Activate a theme
docker exec wp-site wp theme activate twentytwentythree
Database Operations with WP-CLI
# Export database
docker exec wp-site wp db export /tmp/backup.sql
docker cp wp-site:/tmp/backup.sql ./backup.sql
# Import database
docker cp ./import.sql wp-site:/tmp/import.sql
docker exec wp-site wp db import /tmp/import.sql
# Search and replace in database
docker exec wp-site wp search-replace 'http://oldsite.com' 'http://newsite.com'
# Optimize database
docker exec wp-site wp db optimize
# Reset database
docker exec wp-site wp db reset --yes
User Management
# List users
docker exec wp-site wp user list
# Create admin user
docker exec wp-site wp user create admin admin@example.com --role=administrator
# Update user password
docker exec wp-site wp user update 1 --user_pass=newpassword
# Delete user
docker exec wp-site wp user delete 2 --reassign=1
# Grant admin capabilities
docker exec wp-site wp user add-cap 3 manage_options
Volume Management
Managing Docker volumes for WordPress data persistence:
Volume Commands
# List all volumes
docker volume ls
# Create a volume
docker volume create wp-data
# Inspect volume details
docker volume inspect wordpress_mysql_data
# Remove unused volumes
docker volume prune
# Remove specific volume
docker volume rm wp-data
# Backup volume using temporary container
docker run --rm \
-v wordpress_mysql_data:/source \
-v $(pwd)/backup:/backup \
alpine tar czf /backup/mysql-backup.tar.gz -C /source .
Volume Backup and Restore
# Backup WordPress files volume
docker run --rm \
-v wordpress_wp-content:/data \
-v $(pwd)/backups:/backup \
alpine sh -c "cd /data && tar czf /backup/wp-content-$(date +%Y%m%d).tar.gz ."
# Restore WordPress files volume
docker run --rm \
-v wordpress_wp-content:/data \
-v $(pwd)/backups:/backup \
alpine sh -c "cd /data && tar xzf /backup/wp-content-20240101.tar.gz"
# Backup MySQL database
docker exec wp-mysql sh -c \
'mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" wordpress | gzip' \
> ./backups/db-$(date +%Y%m%d).sql.gz
# Restore MySQL database
gunzip < ./backups/db-20240101.sql.gz | \
docker exec -i wp-mysql sh -c \
'mysql -u root -p"$MYSQL_ROOT_PASSWORD" wordpress'
Network Management
Managing Docker networks for WordPress containers:
# List networks
docker network ls
# Create custom network
docker network create wp-network
# Inspect network
docker network inspect wp-network
# Connect container to network
docker network connect wp-network wp-site
# Disconnect container from network
docker network disconnect wp-network wp-site
# Remove unused networks
docker network prune
# List containers in network
docker network inspect wp-network --format='{{json .Containers}}'
Image Management
Managing Docker images for WordPress:
# List images
docker images
# Pull specific WordPress version
docker pull wordpress:6.4-php8.2-apache
# Remove image
docker rmi wordpress:latest
# Remove unused images
docker image prune
# Build custom image
docker build -t my-wordpress:custom .
# Tag image
docker tag wordpress:latest my-wordpress:v1.0
# Save image to file
docker save wordpress:latest > wordpress-image.tar
# Load image from file
docker load < wordpress-image.tar
Command Best Practices
- Use aliases:Create shell aliases for frequently used commands
-
Check before delete:Always verify what you're deleting with
--dry-runwhen available - Regular backups:Automate backups before major changes
-
Log monitoring:Use
docker-compose logs -fduring development -
Resource cleanup:Regularly prune unused resources with
docker system prune - Health checks:Implement and monitor container health checks
Real World Example: Daily Workflow Commands
A typical day of WordPress development with Docker:
#!/bin/bash
# Daily WordPress Docker Workflow
# Morning: Start development environment
echo "Starting WordPress development environment..."
docker-compose up -d
docker-compose ps
# Check logs for any issues
docker-compose logs --tail=50
# Ensure WordPress is updated
docker exec wp-site wp core update
docker exec wp-site wp plugin update --all
docker exec wp-site wp theme update --all
# Create daily backup
echo "Creating daily backup..."
mkdir -p ./backups/daily
docker exec wp-mysql mysqldump -u root -prootpass wordpress > \
./backups/daily/db-$(date +%Y%m%d).sql
docker run --rm -v wordpress_wp-content:/data -v $(pwd)/backups/daily:/backup \
alpine tar czf /backup/files-$(date +%Y%m%d).tar.gz -C /data .
# Development work
echo "Environment ready for development!"
# Install new plugin for testing
docker exec wp-site wp plugin install woocommerce --activate
# Create test user
docker exec wp-site wp user create testuser test@example.com --role=editor
# Check site health
docker exec wp-site wp site health check
# End of day: Clean up
echo "Cleaning up test data..."
docker exec wp-site wp user delete testuser --yes
docker exec wp-site wp plugin deactivate woocommerce
docker exec wp-site wp plugin delete woocommerce
# Stop containers
docker-compose down
echo "Development environment stopped. Have a great evening!"
Troubleshooting Commands
Commands for diagnosing and fixing common issues:
# Check disk usage
docker system df
# Clean up everything
docker system prune -a --volumes
# Check container resource usage
docker stats --no-stream
# View detailed container logs
docker logs wp-site --since 30m 2>&1 | grep -i error
# Check file permissions
docker exec wp-site ls -la /var/www/html/wp-content
# Fix permissions
docker exec wp-site chown -R www-data:www-data /var/www/html/wp-content
# Test database connection
docker exec wp-site wp db check
# Verify WordPress installation
docker exec wp-site wp core verify-checksums
# Clear WordPress cache
docker exec wp-site wp cache flush
# Check PHP configuration
docker exec wp-site php -i | grep memory_limit
Practice Exercise
Practice essential Docker commands for WordPress:
Try It Now