jetdocker is a wrapper around docker compose, especially opinionated for PHP developpement, but not only.
Some of the features are :
- can run several docker compose projects, bind automatically to free ports if some try to bind on the same, using a reverse-http-proxy
- smooth database restoration, can use Search and Replace DB automatically
- SSL-TLS auto-signed certificate automatically created and configured, in order to test on https
- xdebug integration
- phpmyadmin integration
Disclaimer: Jetdocker works on macOS and Linux.
- Unix-like operating system (macOS or Linux)
- bash 4
dockeranddocker composeshould be installed, also compatible withdocker-composephpandxdebugPHP extensionsymfonyshould be installedgitshould be installedawaitshould be installed
On macOSX bash3 is installed by default, but you can install bash4
brew install bash
echo '/usr/local/bin/bash' | sudo tee -a /etc/shellsOn macOSX
brew install php
pecl install xdebugThen create the file ${PHP_INSTALL_PATH}/etc/php/8.0/conf.d/ext-xdebug.ini where ${PHP_INSTALL_PATH} is /usr/local or /opt/homebrew (following your architecture, see https://docs.brew.sh/Installation) with the following content:
[xdebug]
;zend_extension="/usr/local/lib/php/pecl/20200930/xdebug.so"
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.var_display_max_depth=15
xdebug.idekey=PHPSTORM
See https://symfony.com/download
On linux
sudo curl -s -f -L -o /usr/local/bin/await https://github.com/betalo-sweden/await/releases/download/v1.2.0/await-linux-amd64
sudo chmod +x /usr/local/bin/awaitOn macOSX
curl -f -L -o /usr/local/bin/await https://github.com/betalo-sweden/await/releases/download/v1.2.0/await-darwin-amd64
chmod +x /usr/local/bin/awaitjetdocker is installed by running one of the following commands in your terminal. You can install this via the command-line with curl.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/jetpulp/jetdocker/master/tools/install.sh)"In order to use jetdocker in your project you need a docker directory, containing all the jetdocker config files.
docker is the default path, you can specify a different one with the jetdocker -c configPath option.
You can find some examples of docker config directory in the examples directory of this repository, "ready to use" for wordpress, magento or symfony projects.
The bare minimum is a compose.yaml ( or compose.yml, docker-compose.yaml, docker-compose.yml) and a env.sh file in this directory.
The env.sh file is required in order to define some environement variables on each project
- COMPOSE_PROJECT_NAME : (required) a prefix used for naming containers and volumes
- JETDOCKER_UP_DEFAULT_SERVICE : (optional, default=web) docker compose service used by
jetdocker up - JETDOCKER_DB_DEFAULT_SERVICE : (optional, default=db) docker compose service used for database restoration
- JETDOCKER_TERM_DEFAULT_SERVICE : (optional) docker compose service used by
jetdocker term - DB_RESTORE_TIMEOUT : (optional, default=3m0s) database restoration timeout
- SERVER_NAME : (required) hostname
- VIRTUAL_HOST : (required) list of hostnames, separated by comma
- MYSQL_DATABASE : (optional) name of the database
Usually SERVER_NAME is constructed based on an other env var : JETDOCKER_DOMAIN_NAME, jetdocker set it as default to localhost.tv (see http://localhost.tv), for example with SERVER_NAME=project.$JETDOCKER_DOMAIN_NAME, project.localhost.tv will resolve on 127.0.0.1.
JETDOCKER_DOMAIN_NAME can be modified in ~/.jetdockerrc, for example: JETDOCKER_DOMAIN_NAME=192.168.0.10.xip.io, xip.io will resolve *.192.168.0.10.xip.io on 192.168.0.10, you could then test with a mobile device on your local server which is on 192.168.0.10 on your local LAN.
Some hook functions can be added or overridden in env.sh, here some examples :
Up::InstallBeforeStartUp()
{
Log "Up::InstallBeforeStartUp : add this function in env.sh to export env var in some config file"
Up::Install ## run make install under the hood
}
Up::InstallAfterStartUp()
{
Log "Up::InstallAfterStartUp : add this function in env.sh to export env var in some config file"
Up::Install ## run make install under the hood
}
Up::ExportEnv()
{
Log "Up::ExportEnv : add this function in env.sh to export env var in some config file"
}
Up::StartLocalApp()
{
Log "Up::StartLocalApp : add this function in env.sh to start a local app"
}The main usage of jetdocker is to run a docker compose config :
jetdocker upSome usefull option of jetdocker up are :
jetdocker up -x: Enable xdebug in PHP containerjetdocker up -o: Open browser after start on the $SERVER_NAME urljetdocker up -d: Delete data docker volumes before start, forcing it to restore
See all other available commands and options
jetdocker --helpHere are the different commands
- up : Start docker compose after initializing context (databases, ports, proxy, etc... )
- term : Open a shell terminal into one of docker compose service
- compose : Run a docker compose command (alias for docker compose run --rm)
- free-disk-space :Free disk space utility
- update : Update jetdocker to the latest version
- search-replace-db : Run Search Replace DB in a container
- phpmyadmin : Start/Restart a PhpMyAdmin container connecting to all running MySQL containers
On first start of jetdocker up, jetdocker will generate a SSL/TLS certificate, signed by the ./cacerts/jetdockerRootCA.crt Root CA certificate, for all the $JETDOCKER_DOMAIN_NAME subdomains (default is *.localhost.tv).
This certificate is stored in a docker volume named jetdocker-ssl-certificate, and this volume is mounted in the nginx-proxy container, and used by nginx.
In order to avoid the browser alert due to an unknown CA, you should import the ./cacerts/jetdockerRootCA.crt in your browsers as a new CA :
- Firefox : https://wiki.wmtransfer.com/projects/webmoney/wiki/Installing_root_certificate_in_Mozilla_Firefox
- Chrome : https://wiki.wmtransfer.com/projects/webmoney/wiki/Installing_root_certificate_in_Google_Chrome
If you change your $JETDOCKER_DOMAIN_NAME, you will have to delete your jetdocker-ssl-certificate volume to force jetdocker to recreate it : docker volume rm jetdocker-ssl-certificate.
By default, an automatic update is done every day.
Feel free to send PR, and open issues.
- a "create" command which copy a template of docker config files
Disclaimer: Jetdocker is standing on the shoulder of giants.
Thank's to
- Docker of course
- oh-my-zsh for inspiration
- Bash OO Framework
- Search Replace DB
- All others ..
We're on the social media.
- @jetpulp on Twitter. You should follow it.
Jetdocker is released under the MIT license.
Jetdocker was developped by the team at JETPULP, a digital agency.

