Sign inSign up

shinsenter/drupal

Sponsored OSS

By SHIN Company

•Updated about 11 hours ago

šŸ’§ (PHP) Drupal CMS ready in one command

Image
Developer tools
Web servers
Content management system
2

100K+

shinsenter/drupal repository overview

⁠shinsenter/drupal

šŸ’§ (PHP) Drupal CMS ready in one command

Built on shinsenter/phpfpm-apache⁠ (Apache, PHP-FPM, Composer). For settings shared by all images, see shinsenter/php⁠.

⁠Quick start

New project: mount an empty folder. On first start the container downloads Drupal into it (composer create-project drupal/recommended-project). Watch progress with docker logs -f <container>.

mkdir drupal
docker run -p 80:80 -p 443:443 -p 443:443/udp \
    -v ./drupal:/var/www/html \
    shinsenter/drupal:latest

Existing project: mount your code the same way. Changes on the host show up in the container at once.

Compose:

services:
  web:
    image: shinsenter/drupal:latest
    ports: ["80:80", "443:443", "443:443/udp"]
    volumes:
      - ./drupal:/var/www/html

The image has no database. Run one as a separate service and pass its address to the app through the app's own settings.

⁠What is inside

ItemValue
Base imageshinsenter/phpfpm-apache⁠
Web serverApache
Document rootweb
New project sourcecomposer create-project drupal/recommended-project

⁠Common settings

VariableWhat it doesDefault
APP_PATHApplication directory inside the container./var/www/html
DOCUMENT_ROOTFolder inside APP_PATH that the web server serves.web
APP_USER, APP_GROUP, APP_UID, APP_GIDRun as another user and group.www-data
TZContainer timezone, for example Asia/Tokyo.UTC
DEBUG1 prints verbose logs, including which hooks run.not set
ENABLE_CRONTAB, CRONTAB_SETTINGSTurn on cron and define jobs, for example * * * * * php -f /var/www/html/cron.php.not set
PHP_*Any php.ini setting, for example PHP_MEMORY_LIMIT=512M, PHP_UPLOAD_MAX_FILESIZE=100M. Run php-envvars in the container to list them.image defaults

The full list is in the shinsenter/php⁠ documentation.

⁠HTTPS

The image ships a self-signed certificate for local tests:

  • /etc/ssl/site/server.crt
  • /etc/ssl/site/server.key

For production, replace both files with your own, by mounting them:

services:
  web:
    image: shinsenter/drupal:latest
    volumes:
      - ./drupal:/var/www/html
      - ./my_domain.crt:/etc/ssl/site/server.crt
      - ./my_domain.key:/etc/ssl/site/server.key

or by copying them in your own Dockerfile:

FROM shinsenter/drupal:latest
COPY my_domain.crt /etc/ssl/site/server.crt
COPY my_domain.key /etc/ssl/site/server.key

⁠Extend the image

FROM shinsenter/drupal:latest

# Your own steps, for example:
ADD --chown=$APP_USER:$APP_GROUP ./drupal/ /var/www/html/

Adding PHP extensions, hooks, autorun scripts and cron jobs are covered in shinsenter/php⁠.

⁠Image tags and platforms

  • All tags and platforms: Docker Hub⁠. Debian and Alpine variants are available.
  • Since 2026-10-25, linux/386, linux/arm/v7, linux/ppc64le and linux/s390x are no longer built. Older tags keep them until they are rebuilt.
  • Images are rebuilt when PHP, the base OS or Composer publish an update, so a tag can change over time. For production, pin your own copy:
docker pull shinsenter/drupal:latest
docker tag  shinsenter/drupal:latest your-repo/drupal:stable
docker push your-repo/drupal:stable

⁠Support the project

Keeping these images rebuilt for every PHP release takes ongoing work. If they save you time, you can help keep them going:

Reporting a bug, sharing the project or giving it a star on GitHub⁠ also helps.

⁠Issues and license


From Vietnam šŸ‡»šŸ‡³ with love.

Tag summary

Content type

Image

Digest

sha256:fbc9ed258…

Size

99 MB

Last updated

about 11 hours ago

docker pull shinsenter/drupal:dev-php8.3-apache

This week's pulls

Pulls:

2,428

Oct 26 to Nov 1