Magento 2 development base image. Not for production — PHP-FPM runs as root, SSH is enabled, and multiple services run in one container by design (better CLI ergonomics and bind-mount performance on Windows/macOS).
| Edition | Repository |
|---|---|
| Community | aheadworks/m24dev-ce |
| Enterprise | aheadworks/m24dev-ee |
Tag shape: {magento-version}-{php-version}[-sampledata][-xdebug] (Magento 2.4.4-p2+). PHP versions follow Magento system requirements.
Pre-installed Magento (optional sample data), nginx, PHP-FPM, cron, Composer, mhsendmail, and Python entrypoint.
On start (update-and-serve): wait for MySQL → verify schema → import baked dump if needed → apply config → serve HTTP and SSH.
Environment variables read by entrypoint.py (pass with -e or Compose environment):
| Variable | Default | Purpose |
|---|---|---|
MYSQL_HOST | — | MySQL hostname (required) |
MYSQL_PORT | 3306 | MySQL port |
MYSQL_USER | — | MySQL user (required) |
MYSQL_PASSWORD | — | MySQL password (required) |
MYSQL_DATABASE | — | Database name (required) |
MYSQL_PREFIX | "" | Table prefix; renames tables after dump import |
SSH_PASSWORD | random 12 chars if unset | Root SSH/SFTP password |
DUMP_FILE | /var/www/dump.sql | SQL dump imported when DB is empty |
MAGENTO_URL | — | Store base URL |
MAGENTO_LANGUAGE | — | Locale (e.g. en_US) |
MAGENTO_DEFAULT_CURRENCY | — | Default currency |
MAGENTO_TIMEZONE | — | Store timezone |
MAGENTO_ADMIN_FIRSTNAME | — | Admin first name |
MAGENTO_ADMIN_LASTNAME | — | Admin last name |
MAGENTO_ADMIN_EMAIL | — | Admin email |
MAGENTO_ADMIN_USERNAME | — | Admin username |
MAGENTO_ADMIN_PASSWORD | — | Admin password |
MAGENTO_SEARCH_ENGINE | elasticsearch7 | Search engine adapter ID |
WITH_VARNISH | — | Set to enable Varnish FPC (http-cache-hosts=cache) |
MODULE_LIST | — | Comma-separated Composer packages (vendor/name) installed on first setup |
From the base aheadworks/phpdev image (not entrypoint.py): MAIL_HOST — SMTP host for mhsendmail (PHP sendmail_path).
version: '3.7'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: myrootpassword
MYSQL_USER: magento
MYSQL_PASSWORD: magento
MYSQL_DATABASE: magento
volumes:
- data-db:/var/lib/mysql
mail:
image: mailhog/mailhog
command: ["-smtp-bind-addr", "0.0.0.0:25", "-ui-bind-addr", "0.0.0.0:80", "-api-bind-addr", "0.0.0.0:80"]
ports: ["1388:80"]
web:
image: aheadworks/m24dev-ce:2.4.4-p2-8.1-sampledata
environment:
MAIL_HOST: mail
MAGENTO_URL: http://local.magento:1380
MYSQL_HOST: db
MYSQL_USER: magento
MYSQL_PASSWORD: magento
MYSQL_DATABASE: magento
MAGENTO_ADMIN_USERNAME: master
MAGENTO_ADMIN_PASSWORD: master123
SSH_PASSWORD: pushkin
ports: ["1080:80", "1022:22"]
volumes:
- data-files:/var/www/html
volumes:
data-db:
data-files:
Built with Multiplicator: Jinja templates in skeletons/, output in out/, legacy sources in legacy/ (manual builds only).
A push to master generates out/, commits it, then builds and pushes the images in two parallel pipeline steps. builder/ runs with go run and two concurrent builds per step. The image tag is the directory name under out/.
| Edition | Repository | Composer auth | MAGENTO_EDITION |
|---|---|---|---|
| community | aheadworks/m24dev-ce (-ce-repo) | COMPOSER_AUTH | community |
| enterprise | aheadworks/m24dev-ee (-ee-repo) | COMPOSER_AUTH_EE | enterprise |
Pipeline secrets: DOCKERHUB_LOGIN, DOCKERHUB_PASSWORD, COMPOSER_AUTH, COMPOSER_AUTH_EE.
Add a Magento version
out in config.yaml (keep descending version order). A new PHP family needs a skeleton under skeletons/ first.master. The pipeline pushes aheadworks/m24dev-ce:<directory> and aheadworks/m24dev-ee:<directory>.Only 2.4.6-p15 and newer are built from this repo. Older tags in legacy/ are reference-only.
Content type
Image
Digest
sha256:1cce93b64…
Size
284 MB
Last updated
12 days ago
docker pull aheadworks/m24dev-ce:2.4.7-p10-8.3-xdebug