I noticed a few people asking about Docker images for Omeka Classic on the forum and figured this might be useful. Below is a decent but imperfect starting point. It may have some cruft, but it works for me so I’m not worrying too much about refining it, nor about creating a portable image.
1. Set up
Install Docker Desktop and create a directory for your project, e.g. ~/Local Sites/omeka-classic-docker.
2. Create Dockerfile
Create Dockerfile (no file extension) with the following content. This version uses PHP 7.4 and Omeka 3.2, which you can change as needed.
FROM php:7.4-apache
# Install system dependencies and PHP extensions
RUN apt-get update && apt-get install -y \
unzip \
imagemagick \
libmagickwand-dev --no-install-recommends \
libjpeg-dev \
libpng-dev \
libfreetype6-dev \
libzip-dev \
&& docker-php-ext-install mysqli pdo pdo_mysql exif gd zip \
&& pecl install imagick \
&& docker-php-ext-enable imagick exif gd zip
# Enable Apache rewrite module
RUN a2enmod rewrite
# Set working directory
WORKDIR /var/www/html
# Download and extract Omeka Classic 3.2
ADD https://github.com/omeka/Omeka/releases/download/v3.2/omeka-3.2.zip /tmp/omeka.zip
RUN unzip /tmp/omeka.zip -d /tmp \
&& cp -a /tmp/omeka-3.2/. /var/www/html/ \
&& rm -rf /tmp/* \
&& chown -R www-data:www-data /var/www/html
# Force Apache to honor .htaccess
RUN echo '<Directory /var/www/html/>\n\
Options Indexes FollowSymLinks\n\
AllowOverride All\n\
Require all granted\n\
</Directory>' > /etc/apache2/conf-enabled/allow-override.conf
EXPOSE 80
3. Create docker-compose.yml
Create docker-compose.yml with the following contents. This version uses MariaDB for compatibility with Apple Silicon and includes several mounted volumes to facilitate a typical theme/plugin development workflow (i.e. you can quickly access the files, themes, and plugins directories, as well as the .htaccess and db.ini files).
services:
omeka:
build: .
container_name: omeka-classic
ports:
- "8080:80"
volumes:
- ./omeka_files:/var/www/html/files
- ./omeka_plugins:/var/www/html/plugins
- ./omeka_themes:/var/www/html/themes
- ./db.ini:/var/www/html/db.ini
- ./.htaccess:/var/www/html/.htaccess
depends_on:
- db
db:
image: mariadb:10.5
container_name: omeka-db
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: omeka
MYSQL_USER: omeka
MYSQL_PASSWORD: omeka123
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
4. Create db.ini
Create a db.ini file with:
[database]
host = "db"
username = "omeka"
password = "omeka123"
dbname = "omeka"
prefix = "omeka_"
charset = "utf8"
; Omeka ImageMagick configuration
derivative_convert_path = "/usr/bin/"
5. Create .htaccess
Create/copy the default .htaccess file to your directory.
# Omeka .htaccess: Apache configuration file
# This file is required for Omeka to function correctly.
# --------------- #
# Error Reporting #
# --------------- #
# Uncomment the SetEnv line below to turn on detailed on-screen error
# reporting.
#
# Note: This should only be enabled for development or debugging. Keep this
# line commented for production sites.
#
SetEnv APPLICATION_ENV development
# ------------- #
# Rewrite Rules #
# ------------- #
RewriteEngine on
# If you know mod_rewrite is enabled, but you are still getting mod_rewrite
# errors, uncomment the line below and replace "/" with your base directory.
#
# RewriteBase /
# Allow direct access to files (except PHP files)
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule !\.(php[0-9]?|phtml|phps)$ - [C]
RewriteRule .* - [L]
RewriteRule ^install/.*$ install/install.php [L]
RewriteRule ^admin/.*$ admin/index.php [L]
RewriteRule .* index.php
# -------------- #
# Access Control #
# -------------- #
# Block access to all .ini files.
<FilesMatch "\.ini$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order Allow,Deny
Deny from all
</IfModule>
</FilesMatch>
# --------#
# Caching #
# --------#
# Uncomment the lines below in order to enable caching of some files
# (after a finished site has gone live)
#
# <IfModule mod_expires.c>
# ExpiresActive on
# ExpiresDefault "access plus 10 day"
# </FilesMatch>
# </IfModule>
# ------------ #
# PHP Settings #
# ------------ #
<IfModule mod_php5.c>
php_flag register_globals off
php_flag magic_quotes_gpc off
</IfModule>
6. Run Docker
In your Terminal…
docker-compose up -d
open "http://localhost:8080/"
You might need to include the --build flag for the first run. Leave out the -d (detached) flag if you want to view live logs. Use docker-compose down (or sometimes Control + C depending on mode) to stop running. Your site should be accessible in your browser at http://localhost:8080/. Add themes and plugins as needed. To access other areas in your installation, use docker-compose exec omeka bash or add additional mounted volumes.