This guide uses Docker Compose to run Joomla with the official Docker image.
For Docker installation, see Docker.
Create docker-compose.yml with Joomla and a database:
cat <<'YAML' > docker-compose.yml
services:
joomla:
image: joomla:latest
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
JOOMLA_DB_HOST: db
JOOMLA_DB_USER: joomla
JOOMLA_DB_PASSWORD: change-me-to-secure-password
JOOMLA_DB_NAME: joomla_db
JOOMLA_SITE_NAME: My Joomla Site
JOOMLA_ADMIN_USER: Site Administrator
JOOMLA_ADMIN_USERNAME: admin
JOOMLA_ADMIN_PASSWORD: change-me-to-secure-admin-password
JOOMLA_ADMIN_EMAIL: admin@example.com
volumes:
- joomla_data:/var/www/html
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_DATABASE: joomla_db
MYSQL_USER: joomla
MYSQL_PASSWORD: change-me-to-secure-password
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db_data:/var/lib/mysql
volumes:
joomla_data:
db_data:
YAML
Important: Replace all passwords with strong, unique values before starting.
docker compose up -d
Open http://YOUR-SERVER:8080 to access your Joomla site.
If you configured auto-deployment environment variables, Joomla will be pre-configured. Otherwise, complete the setup wizard:
For production deployments:
latest| Variable | Description |
|---|---|
JOOMLA_DB_HOST |
Database host (e.g., db) |
JOOMLA_DB_USER |
Database user |
JOOMLA_DB_PASSWORD |
Database password |
JOOMLA_DB_NAME |
Database name |
JOOMLA_DB_TYPE |
Database type (mysqli or pgsql) |
JOOMLA_SITE_NAME |
Site name (auto-install) |
JOOMLA_ADMIN_USER |
Admin full name (auto-install) |
JOOMLA_ADMIN_USERNAME |
Admin username (auto-install) |
JOOMLA_ADMIN_PASSWORD |
Admin password (auto-install) |
JOOMLA_ADMIN_EMAIL |
Admin email (auto-install) |
| Volume | Purpose |
|---|---|
joomla_data:/var/www/html |
Joomla installation and content |
db_data:/var/lib/mysql |
MySQL database persistence |
For persistent content, mount the volume to your host:
volumes:
- /path/to/your/joomla:/var/www/html
Joomla also supports PostgreSQL:
cat <<'YAML' > docker-compose.yml
services:
joomla:
image: joomla:latest
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
JOOMLA_DB_HOST: db
JOOMLA_DB_USER: joomla
JOOMLA_DB_PASSWORD: change-me-to-secure-password
JOOMLA_DB_NAME: joomla_db
JOOMLA_DB_TYPE: pgsql
db:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_DB: joomla_db
POSTGRES_USER: joomla
POSTGRES_PASSWORD: change-me-to-secure-password
volumes:
- db_data:/var/lib/postgresql/data
volumes:
joomla_data:
db_data:
YAML
Deploying Joomla in containers for production? Our consulting covers:
Get expert help: office@linux-server-admin.com | Contact Page