Joomla
Popular open-source CMS for building websites and apps.
[i]Overview
Joomla is a powerful open-source Content Management System (CMS) first released in 2005, built on PHP and designed for creating sophisticated websites, online applications, and web services. Unlike simpler CMS platforms, Joomla excels at complex content hierarchies, multi-user workflows, and advanced access control systems, making it the preferred choice for corporate websites, online magazines, e-commerce platforms, and community portals that require robust user management and content organization capabilities.
This Docker stack combines Joomla 5 with Apache web server and MySQL 8.0 database to create a complete web publishing platform. The MySQL database stores all content, user accounts, configuration settings, and extension data, while Joomla's PHP-based architecture handles content rendering, user authentication, and administrative functions. The Apache server efficiently serves both dynamic PHP content and static assets like images and CSS files, creating a high-performance web publishing environment.
Web developers, digital agencies, and organizations managing complex websites will find this combination particularly valuable for projects requiring sophisticated content workflows, multi-language support, or extensive user role management. Educational institutions, government agencies, and corporate intranets often choose Joomla for its enterprise-grade security features, built-in SEO optimization, and ability to handle thousands of articles with complex categorization schemes that would overwhelm simpler CMS platforms.
[*]Key Features
- [+]Joomla 5's new Child Templates system for easier theme customization without losing updates
- [+]MySQL 8.0's improved JSON data type support for storing Joomla's flexible custom field configurations
- [+]Built-in Joomla Smart Search with MySQL full-text indexing for powerful site-wide content discovery
- [+]Joomla's Advanced Content Manager with MySQL-backed version control and content scheduling
- [+]Native multilingual content management with MySQL collation support for international character sets
- [+]Joomla's granular Access Control Lists (ACL) with MySQL-optimized user group hierarchies
- [+]Integrated Joomla Web Services API with MySQL transaction support for headless CMS functionality
- [+]Joomla's Workflow system powered by MySQL triggers for complex content approval processes
[#]Common Use Cases
- [1]Corporate websites requiring complex content hierarchies and department-based access controls
- [2]Online magazines and news portals with multiple authors, editors, and publication workflows
- [3]Educational institution websites with course catalogs, faculty directories, and student portals
- [4]Government agency sites requiring WCAG compliance, multilingual support, and secure document management
- [5]Community portals with user registration, forums, event calendars, and member directories
- [6]E-commerce sites using Joomla with VirtueMart or HikaShop extensions for complex product catalogs
- [7]Membership organizations managing dues, events, and member communications through Joomla extensions
[!]Prerequisites
- [!]Minimum 1GB RAM for MySQL database operations and Joomla's PHP processing requirements
- [!]Port 8080 available for accessing the Joomla web interface during setup and operation
- [!]Understanding of Joomla's article/category structure and user group permissions system
- [!]Familiarity with Joomla Extension Directory (JED) for selecting appropriate plugins and templates
- [!]Basic knowledge of MySQL database concepts for backup procedures and performance optimization
- [!]Docker environment with at least 2GB disk space for Joomla files and MySQL data growth
[!]
WARNING: For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
[$]docker-compose.yml
[docker-compose.yml]
1services: 2 joomla: 3 image: joomla:5-apache4 container_name: joomla5 restart: unless-stopped6 environment: 7 JOOMLA_DB_HOST: mysql8 JOOMLA_DB_USER: ${MYSQL_USER}9 JOOMLA_DB_PASSWORD: ${MYSQL_PASSWORD}10 JOOMLA_DB_NAME: ${MYSQL_DATABASE}11 volumes: 12 - joomla_data:/var/www/html13 ports: 14 - "8080:80"15 depends_on: 16 - mysql17 networks: 18 - joomla-network1920 mysql: 21 image: mysql:8.022 container_name: joomla-mysql23 environment: 24 MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}25 MYSQL_DATABASE: ${MYSQL_DATABASE}26 MYSQL_USER: ${MYSQL_USER}27 MYSQL_PASSWORD: ${MYSQL_PASSWORD}28 volumes: 29 - mysql_data:/var/lib/mysql30 networks: 31 - joomla-network3233volumes: 34 joomla_data: 35 mysql_data: 3637networks: 38 joomla-network: 39 driver: bridge[$].env Template
[.env]
1MYSQL_ROOT_PASSWORD=rootpassword2MYSQL_DATABASE=joomla3MYSQL_USER=joomla4MYSQL_PASSWORD=changeme[i]Usage Notes
- [1]Docs: https://docs.joomla.org/
- [2]Access at http://localhost:8080 - complete installation wizard
- [3]Database host: mysql, database/user from env vars
- [4]Joomla Extensions Directory (JED) for plugins and templates
- [5]Admin area at /administrator
- [6]Built-in multilingual, access control, and workflow features
Individual Services(2 services)
Copy individual services to mix and match with your existing compose files.
joomla
joomla:
image: joomla:5-apache
container_name: joomla
restart: unless-stopped
environment:
JOOMLA_DB_HOST: mysql
JOOMLA_DB_USER: ${MYSQL_USER}
JOOMLA_DB_PASSWORD: ${MYSQL_PASSWORD}
JOOMLA_DB_NAME: ${MYSQL_DATABASE}
volumes:
- joomla_data:/var/www/html
ports:
- "8080:80"
depends_on:
- mysql
networks:
- joomla-network
mysql
mysql:
image: mysql:8.0
container_name: joomla-mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
networks:
- joomla-network
[>]Quick Start
[terminal]
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 joomla:5 image: joomla:5-apache6 container_name: joomla7 restart: unless-stopped8 environment:9 JOOMLA_DB_HOST: mysql10 JOOMLA_DB_USER: ${MYSQL_USER}11 JOOMLA_DB_PASSWORD: ${MYSQL_PASSWORD}12 JOOMLA_DB_NAME: ${MYSQL_DATABASE}13 volumes:14 - joomla_data:/var/www/html15 ports:16 - "8080:80"17 depends_on:18 - mysql19 networks:20 - joomla-network2122 mysql:23 image: mysql:8.024 container_name: joomla-mysql25 environment:26 MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}27 MYSQL_DATABASE: ${MYSQL_DATABASE}28 MYSQL_USER: ${MYSQL_USER}29 MYSQL_PASSWORD: ${MYSQL_PASSWORD}30 volumes:31 - mysql_data:/var/lib/mysql32 networks:33 - joomla-network3435volumes:36 joomla_data:37 mysql_data:3839networks:40 joomla-network:41 driver: bridge42EOF4344# 2. Create the .env file45cat > .env << 'EOF'46MYSQL_ROOT_PASSWORD=rootpassword47MYSQL_DATABASE=joomla48MYSQL_USER=joomla49MYSQL_PASSWORD=changeme50EOF5152# 3. Start the services53docker compose up -d5455# 4. View logs56docker compose logs -f[>]One-Liner
Run this command to download and set up the recipe in one step:
[terminal]
1curl -fsSL https://docker.recipes/api/recipes/joomla/run | bash[?]Troubleshooting
- [!]Error 'Database connection failed' during setup: Verify MySQL container is fully started before accessing Joomla installer, wait 30-60 seconds after docker-compose up
- [!]Joomla installer shows 'MySQL version not supported': Ensure environment variables MYSQL_USER and MYSQL_PASSWORD match between joomla and mysql services
- [!]Apache error 'Permission denied' for Joomla files: Check that joomla_data volume has correct ownership, may need to rebuild container with proper user permissions
- [!]Slow page loading after installation: Increase MySQL buffer pool size by adding MYSQL_INNODB_BUFFER_POOL_SIZE environment variable to mysql service
- [!]Joomla admin area returns 404 errors: Ensure Apache mod_rewrite is enabled and .htaccess files are properly configured in the joomla container
- [!]Extension installation fails with 'Upload failed': Increase PHP upload limits by mounting custom php.ini with higher upload_max_filesize and post_max_size values
Community Notes
Loading...
Loading notes...
## Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Shortcuts: C CopyF FavoriteD Download