Skip to main content

Course Progress

Loading...

Docker Commands for WordPress Developers

Duration: 45 minutes
Module 4: Session 5.4

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 commands follow the pattern:docker [object] [command] [options]where object can be container, image, volume, or network.

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:Usedocker-compose logs -fduring development
  • Resource cleanup:Regularly prune unused resources withdocker 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
  1. Start your WordPress stack:docker-compose up -d
  2. Check running containers:docker-compose ps
  3. Access WordPress bash:docker exec -it wp-site bash
  4. List installed plugins:docker exec wp-site wp plugin list
  5. Create a backup:docker exec wp-mysql mysqldump -u root -prootpass wordpress > backup.sql
  6. View real-time logs:docker-compose logs -f wordpress
  7. Check resource usage:docker stats
  8. Stop the stack:docker-compose down

Additional Resources

-->