janole / laravel-dockerize
A very simple tool to containerize your Laravel app
Requires
- php: ^8.2
- ext-json: *
- laravel/framework: ^11.0|^12.0|^13.0
- vlucas/phpdotenv: ^5.6
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.59
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- 2.0.0
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.x-dev
- 1.2.16
- 1.2.15
- 1.2.14
- 1.2.13
- 1.2.12
- 1.2.11
- 1.2.10
- 1.2.9.2
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.1-BETA
- 1.1.0-BETA
- 1.0.x-dev
- 1.0.10
- 1.0.8
- 1.0.7
- 1.0.6-BETA
- 1.0.5
- 1.0.4-BETA2
- 1.0.4-BETA
- 1.0.3
- 1.0.2
- 1.0.1
- 0.x-dev
- 0.3.31
- 0.3.30
- 0.2.22
- 0.2.21
- 0.2.20
- 0.1.19
- 0.1.18
- 0.1.17
- 0.1.16
- 0.1.15
- 0.1.14
- 0.1.13
- 0.1.12
- 0.1.11
- 0.1.10
- 0.1.9
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- dev-feat/v2
- dev-fix-access-rights
- dev-add-container-build-script
- dev-master
- dev-beta
- dev-dev
- dev-services-for-testing
- dev-laravel-7-compatibility
This package is auto-updated.
Last update: 2026-10-21 18:17:44 UTC
README
A very simple tool to containerize your Laravel App ...
What? Why?
Do you want to easily create a Docker image from your Laravel App? Then this project wants to become your friend ;-)
!! NOTICE !! So far, this project is severely limited to some base dependencies (like PostgreSQL for example.)
Requirements
- PHP 8.2 or newer
- Laravel 11, 12 or 13
- Docker with
buildx
Laravel 10 and older, and PHP 7.4–8.1, are supported up to version 1.x.
Installation
$ composer require janole/laravel-dockerize
Usage
1. First, you need to specify the (base-)name of the docker image. Add the following variable to your .env file:
DOCKERIZE_IMAGE="my-shiny-new-app"
or
DOCKERIZE_IMAGE="my-own.docker-registry.com/my-shiny-new-app"
If you're using git,
laravel-dockerizewill try to automatically add some version and branch tags to the image name.
2. Now build the image:
$ php artisan docker:build cd /path/to/test-app && docker buildx build -t my-shiny-new-app:0.1-master --pull -f ./Dockerfile . ... * Successfully tagged my-shiny-new-app:0.1-master
Yay! Now you've got your first image named my-shiny-new-app:0.1-master
!! NOTICE !! The Dockerfile used to create the image will be automatically saved in your project's root.
3. Create a docker-compose.yml file in the project root:
$ php artisan docker:compose -s File saved as /path/to/test-app/docker-compose.yml
4. Run the project via docker-compose:
$ docker-compose up [-d] Creating network "test-app_default" with the default driver Creating volume "test-app_postgres-data" with default driver Creating test-app_database_1 ... done Creating test-app_app_1 ... done
Internals ...
- laravel-dockerize will add another artisan command to your project:
container:startup. This command will be automatically called each time the container is (re-)started and it will try to initialize the database for you. For this, it will wait for the database to be ready, callphp artisan migrate --forceand then try to run the initial seedersDOCKERIZE_SEED1or updating seedersDOCKERIZE_SEED2(if the database wasn't fresh.)
Configuration
All settings are read from .env, .dockerize.env, .<COMPOSE_PROJECT_NAME>/dockerize.env and .<APP_ENV>/dockerize.env (later files override earlier ones).
| Setting | Default | Meaning |
|---|---|---|
DOCKERIZE_IMAGE |
(required) | Image name, e.g. my-registry.com/my-app. Version and branch are appended as the tag. |
DOCKERIZE_BASE_IMAGE |
janole/laravel-apache-postgres:0-php85 |
Image to build FROM. See laravel-apache-postgres for the PHP 8.3, 8.4 and 8.5 variants. |
DOCKERIZE_VERSION |
APP_VERSION + git commit count |
Version part of the image tag. |
DOCKERIZE_BRANCH |
current git branch | Branch part of the image tag. |
DOCKERIZE_ENV |
.env |
The env file copied into the image as /app/.env. |
DOCKERIZE_LOCALE |
app.locale |
Locale generated in the image. |
DOCKERIZE_CONTAINER_USER |
www-data |
User that owns /app and runs composer and the build scripts. |
DOCKERIZE_PLATFORM |
(native) | --platform for docker buildx build, e.g. linux/amd64. |
DOCKERIZE_BUILD_COMMANDS |
JSON list of artisan commands to run during the image build. | |
DOCKERIZE_SEED1 / DOCKERIZE_SEED2 |
JSON list of seeder classes to run on the first start (no users table yet) / on later starts. |
|
DOCKERIZE_ARTISAN1 / DOCKERIZE_ARTISAN2 |
JSON list of artisan commands to run on the first start (no users table yet) / on later starts. |
|
DOCKERIZE_PORT / DOCKERIZE_HOST |
3333 / localhost |
Port and host for docker-compose.yml and APP_URL. |
DOCKERIZE_CONTAINER_PORT |
8080 |
Port the app listens on inside the container. |
DOCKERIZE_SHARE |
JSON list of volumes for the app service. | |
DOCKERIZE_POSTGRES_IMAGE |
postgres:16 |
Database image in docker-compose.yml. |
DOCKERIZE_COMPOSE_WITH_SCHEDULER / _QUEUE |
Add scheduler / queue worker services to docker-compose.yml. |
|
DOCKERIZE_COMPOSE_ENV_<NAME> |
Sets <NAME> in the app's environment in docker-compose.yml. |
|
DOCKERIZE_COMPOSE_TRANSFORMER |
PHP file returning function (array $yaml): array to adjust docker-compose.yml. |
Upgrading from 1.x to 2.0
- Requirements: PHP 8.2+ and Laravel 11–13 (see above).
- New default base image:
janole/laravel-apache-postgres:0-php85instead of0-php83. To stay on PHP 8.3 (e.g. because a dependency doesn't support 8.5 yet), setDOCKERIZE_BASE_IMAGE="janole/laravel-apache-postgres:0-php83". - Composer runs as the container user:
composer install,view:clearand the image build scripts now run asDOCKERIZE_CONTAINER_USERinstead of root, so every file in/appbelongs to that user. A build service (DockerBuildImageService) that needs root can't do that any more. DOCKERIZE_SPLIT_VENDORwas removed, together with its alternative Dockerfile. The setting is ignored.- Config errors are no longer ignored: a
.dockerize.envthat can't be parsed now stopsdocker:buildanddocker:composewith an error.