This experiment demonstrates horizontal scaling in Docker Compose using two different approaches:
In this approach, we removed the ports section from the WordPress
service. This allows scaling without port conflicts, but WordPress is
not directly accessible from the browser.
services:
mysql:
image: mysql:8.0
container_name: class9_mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
- mysql_data:/var/lib/mysql
networks:
- wordpress-network
wordpress:
image: wordpress:latest
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_content:/var/www/html/wp-content
depends_on:
- mysql
networks:
- wordpress-network
volumes:
mysql_data:
wp_content:
networks:
wordpress-network:
docker compose up -d --scale wordpress=3
This created:
In this approach, we used a port range to allow multiple containers to bind to different host ports.
services:
mysql:
image: mysql:8.0
container_name: class9_mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
- mysql_data:/var/lib/mysql
networks:
- wordpress-network
wordpress:
image: wordpress:latest
ports:
- "8080-8082:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_content:/var/www/html/wp-content
depends_on:
- mysql
networks:
- wordpress-network
volumes:
mysql_data:
wp_content:
networks:
wordpress-network:
docker compose up -d --scale wordpress=3
This mapped:


The experiment successfully demonstrated two methods of scaling WordPress containers using Docker Compose. Both approaches highlight important differences in how Docker handles port binding and service replication.