No description
Find a file
Matthew Baggett c275c68cd2
Some checks failed
Build / Build base-alpine (push) Successful in 11m2s
Build / Build node (push) Successful in 4m21s
Build / Build php (push) Successful in 10m25s
Build / Build dotnet (push) Successful in 16m45s
Build / Build magento (push) Successful in 9m8s
Build / Build java (push) Successful in 20m35s
Build / Build java-tomcat (push) Failing after 8s
Build / Build java-war-machine (push) Successful in 5m2s
FrankenPHP
2026-05-28 17:41:37 +02:00
.github/workflows Apparently the scheduler doesn't know how to do yaml interpolation I guess? 2026-05-09 16:51:48 +02:00
fs FrankenPHP 2026-05-28 17:41:37 +02:00
.common.sh Should still be quiet 2025-12-12 15:49:54 +01:00
.gitignore Fixup workflow 2025-06-03 22:43:58 +02:00
.gitmodules remove trunk 2026-04-30 15:44:27 +02:00
Alpine.builder-fragment.Dockerfile Alpine and Ubuntu+PHP bits. 2026-04-27 17:05:17 +02:00
Alpine.Dockerfile Alpine and Ubuntu+PHP bits. 2026-04-27 17:05:17 +02:00
Alpine.fragment.Dockerfile Fix regressed names. 2026-04-02 16:39:34 +02:00
bake FrankenPHP 2026-05-28 17:41:37 +02:00
docker-bake.hcl FrankenPHP 2026-05-28 17:41:37 +02:00
Dotnet.Dockerfile Dotnet container 2025-12-12 14:45:44 +01:00
Dotnet.fragment.Dockerfile Dotnet container 2025-12-12 14:45:44 +01:00
FrankenPHP.Dockerfile FrankenPHP 2026-05-28 17:41:37 +02:00
Java.Dockerfile update tomcat version. 2026-04-08 14:01:47 +02:00
Java.fragment.Dockerfile Fix regressed names. 2026-04-02 16:39:34 +02:00
Java.Tomcat.fragment.Dockerfile Tomcat-related schenanigans. 2026-04-02 17:07:08 +02:00
Java.War.fragment.Dockerfile Apply DRY to docker-bake. Add java:war and java:tomcat images. 2025-06-11 23:29:25 +02:00
Magento.Dockerfile Add php 8.2 & 8.3 builds. 2025-08-03 17:01:08 +02:00
Magento.fragment.Dockerfile Fix regressed names. 2026-04-02 16:39:34 +02:00
Node.Dockerfile Node container 2025-12-12 14:46:03 +01:00
Node.fragment.Dockerfile Node container 2025-12-12 14:46:03 +01:00
PHP-Node.fragment.Dockerfile Fix regressed names. 2026-04-02 16:39:34 +02:00
PHP.Dockerfile Add ubuntu base images, new build pipeline. 2026-04-20 17:34:11 +02:00
PHP.fragment.Dockerfile Improve startup behaviour. 2026-05-15 16:08:56 +02:00
PHP.Ubuntu-fragment.Dockerfile FrankenPHP 2026-05-28 17:41:37 +02:00
PHP.Ubuntu.Dockerfile Alpine and Ubuntu+PHP bits. 2026-04-27 17:05:17 +02:00
README.md make healthcheck configurable by ENV with HEALTHCHECK_URI 2026-05-15 16:04:25 +02:00
test Add ubuntu base images, new build pipeline. 2026-04-20 17:34:11 +02:00
test-healthchecks.yml FrankenPHP 2026-05-28 17:41:37 +02:00
test-versions-assertions.yml Add ubuntu base images, new build pipeline. 2026-04-20 17:34:11 +02:00
test.yml FrankenPHP 2026-05-28 17:41:37 +02:00
TODO.md various bits of magento fiddling 2025-06-17 15:41:50 +02:00
Ubuntu.builder-fragment.Dockerfile Alpine and Ubuntu+PHP bits. 2026-04-27 17:05:17 +02:00
Ubuntu.Dockerfile Alpine and Ubuntu+PHP bits. 2026-04-27 17:05:17 +02:00
Ubuntu.fragment.Dockerfile Alpine and Ubuntu+PHP bits. 2026-04-27 17:05:17 +02:00

Base Images

  • Base Image
  • PHP
  • Magento

Build everything:

# Fundimentally, this is all it takes:
docker buildx bake --provenance=false --push --progress=plain

# But we have some test wrappers to automatically test and push
./test && ./bake

Architecture of the Containers

Architecture

Based on runit. It runs multiple processes internally, and monitors them. In the /etc/services.d/ directory you'll find the following services at time of writing:

  • alpine-*-base: Base image
    • /etc/services.d/logs/: Log service, which collects logs from the other services and writes them to files.
      • Setting the envvar LOG_PATHS to a space-seperated list of paths will make the log service collect logs from those paths and write them to stdout.
    • /etc/services.d/splash/: Splash service, which is a simple web server that serves the splash page.
    • /etc/services.d/cron/: Cron service.
  • php-*-base: PHP flavoured base image
    • /etc/services.d/nginx/: Nginx service.
    • /etc/services.d/php/: PHP-FPM service, which runs the PHP application itself.
  • php-*-node-base: PHP flavoured base image with Node.js support
    • /etc/services.d/npm-babysitter/: Monitors permissions on the node cache directories and fixes them if they change.
    • /etc/services.d/npm-watcher/:
      • Similar to the logs service, setting the envvar NPM_WATCH_PATHS will make the npm watcher run npm run watch in those paths.
      • [ WARNING ]: This is currently busted.
  • magento-*-base: Magento flavoured base image
    • /etc/services.d/magento/: Magento service, which runs the Magento application.
      • Fixes cache permissions, and runs any scripts loaded into /etc/services.d/magento/tasks.d/ to get your Magento application going and touches /etc/services.d/magento/done upon completion.
  • java-*-base: Java flavoured base image
  • java-war-machine-*-base: Java War Machine flavoured base image
    • /etc/services.d/java/: Java service runner, which runs any .war files placed into /app

Each directory contains a run script that starts the service. The run script is executed by runit when the container starts. If the run script exits, runit will restart it, unless there is a finish script. The finish script will get the exit code of run as its $1 argument. The finish script can decide to sleep forever or exit to restart the service. More can be read in the runit documentation particularly runsv and runsvdir

Configurable Options

Environment Variable Affected Images Default Options Description
MAGENTO_MODE magento developer developer or production The mode in which Magento will run.
NPM_WATCH_PATHS php-node+ "" Space seperated paths. Paths to watch for changes. The paths to watch for changes using npm run watch in the application.
PHP_MEMORY_LIMIT php+ 256M 256M, 2G etc The memory limit for PHP scripts.
PHP_CLI_MEMORY_LIMIT php+ 4G 256M, 2G etc The memory limit for PHP CLI scripts.
PHP_DEBUG_MODE php+ null on Enable or disable debug mode.
PHP_ERROR_REPORTING php+ E_ALL if PHP_DEBUG_MODE is on. E_ERROR otherwise. Expressions from error_reporting override error_reporting level.
PHP_DISPLAY_ERRORS php+ on when PHP_DEBUG_MODE is on. off otherwise on or off Enable or disable display errors.
PHP_ENABLE_XDEBUG php+ null on or off Enable or disable Xdebug. Is influenced by PHP_ERROR_REPORTING.
WAR_FILE java-war-machine null Path to a .war file. An explicit path to the .war file to run. Will be autodetected if not present. Only neccisary if executable name is ambiguous.
NTP_SERVER base+ 0.pool.ntp.org Any valid NTP server address The NTP server to use for time synchronization.
LOG_PATHS base+ ``, overridden by php base image etc. Space seperated paths. Paths to collect logs from. The paths of files to collect logs from and write them to stdout.
HEALTHCHECK_URI base+ http://localhost:80 Any valid URI The URI to use for health checks.

Versions available

Container Is :latest Version Alpine Tag
Magento PHP 8.4, Node 22 Alpine 3.22 git.grey.ooo/grey.ooo/docker/magento:8.4
Magento ✔️ PHP 8.1, Node 18 Alpine 3.18 git.grey.ooo/grey.ooo/docker/magento:8.1
PHP+Node ✔️ PHP 8.5, Node 24 Alpine 3.23 git.grey.ooo/grey.ooo/docker/php-node:8.5
PHP+Node PHP 8.4, Node 22 Alpine 3.22 git.grey.ooo/grey.ooo/docker/php-node:8.4
PHP+Node PHP 8.3, Node 22 Alpine 3.22 git.grey.ooo/grey.ooo/docker/php-node:8.3
PHP+Node PHP 8.2, Node 22 Alpine 3.21 git.grey.ooo/grey.ooo/docker/php-node:8.2
PHP+Node PHP 8.1, Node 18 Alpine 3.18 git.grey.ooo/grey.ooo/docker/php-node:8.1
PHP+Node PHP 7.4, Node 16 Alpine 3.15 git.grey.ooo/grey.ooo/docker/php-node:7.4
PHP ✔️ PHP 8.5 Alpine 3.23 git.grey.ooo/grey.ooo/docker/php:8.5
PHP PHP 8.4 Alpine 3.22 git.grey.ooo/grey.ooo/docker/php:8.4
PHP PHP 8.3 Alpine 3.22 git.grey.ooo/grey.ooo/docker/php:8.3
PHP PHP 8.2 Alpine 3.21 git.grey.ooo/grey.ooo/docker/php:8.2
PHP PHP 8.1 Alpine 3.18 git.grey.ooo/grey.ooo/docker/php:8.1
PHP PHP 7.4 Alpine 3.15 git.grey.ooo/grey.ooo/docker/php:7.4
Node ✔️ Node 24 Alpine 3.23 git.grey.ooo/grey.ooo/docker/node:24
Node Node 22 Alpine 3.21 git.grey.ooo/grey.ooo/docker/node:22
Java ✔️ OpenJDK 21 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:21
Java OpenJDK 17 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:17
Java OpenJDK 11 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:11
Java OpenJDK 8 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:8
Java War Machine OpenJDK 21 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:war-machine-21
Java War Machine OpenJDK 17 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:war-machine-17
Java War Machine OpenJDK 11 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:war-machine-11
Java Tomcat ✔️ OpenJDK 21 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:tomcat-21
Java Tomcat OpenJDK 17 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:tomcat-17
Java Tomcat OpenJDK 11 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:tomcat-11
Java Tomcat OpenJDK 8 Alpine 3.22 git.grey.ooo/grey.ooo/docker/java:tomcat-8 (while this still exists, it is deprecated)
Java Tomcat OpenJDK 7 Alpine 3.18 git.grey.ooo/grey.ooo/docker/java:tomcat-7 (while this still exists, it is deprecated)
.Net ✔️ .Net 10 Alpine 3.23 git.grey.ooo/grey.ooo/docker/dotnet:10
.Net .Net 9 Alpine 3.23 git.grey.ooo/grey.ooo/docker/dotnet:9
Base 3.23 Alpine 3.23 git.grey.ooo/grey.ooo/docker/base:3.23
Base 3.22 Alpine 3.21 git.grey.ooo/grey.ooo/docker/base:3.22
Base 3.21 Alpine 3.21 git.grey.ooo/grey.ooo/docker/base:3.21
Base 3.18 Alpine 3.18 git.grey.ooo/grey.ooo/docker/base:3.18
Base 3.15 Alpine 3.15 git.grey.ooo/grey.ooo/docker/base:3.15
Base (Ubuntu) 26.04 Ubuntu 26.04 git.grey.ooo/grey.ooo/docker/ubuntu:26
Base (Ubuntu) ✔️ 24.04 Ubuntu 24.04 git.grey.ooo/grey.ooo/docker/ubuntu:24
Base (Ubuntu) 22.04 Ubuntu 22.04 git.grey.ooo/grey.ooo/docker/ubuntu:22