Un template Docker-compose pour un environnement de dev. web en php
Le template est Basé sur les images php canals/php
et les images officielles
de différents outils. Le template est disponible dans le fichier docker-compose.yml
. Un exemple d'utilisation complet
de ce template est disponible dans le répertoire de test
.
Utilisation
première utilisation
$ docker-compose -f docker-compose.yml up
arréter/démarrer les services
$ docker-compose -f docker-compose.yml stop
$ docker-compose -f docker-compose.yml start
recréer des containers après des modifications dans le fichier docker-compose
$ docker-compose -f docker-compose.yml create
$ docker-compose -f docker-compose.yml start
les services disponibles :
machine(s) php
- un ou plusieurs services php/apache ou php-cli
- basés sur les images
canals/php
, les tags:latest
,:7.2
et7.2-cli
,:7.1
et7.1-cli
,:5.6
sont utilisables (pour plus de détails sur ces images, voir la doc ) - conseils : utiliser les vhost et les déclarer dans votre
/etc/hosts
- attention aux numéros de ports lorsque l'on utilise plusieurs services de même type
- pour transmettre des variables d'environnement aux containers, compléter le chapitre
environment
ou utiliser le chapitre env_file et définir les variables dans le fichier web.env - - Typiquement : définir les variables http_proxy et https_proxy pour utiliser les conteneurs dans un environnement avec un proxy pour l'accès extérieur.
####exemple : service php basé sur apache
services:
web:
image: canals/php
environment:
- VHOST_HOSTNAME=web.dev.local
- VHOST_DOCROOT=/var/www/web
- http_proxy=http://www-cache:1234
- https_proxy=http://www-cache:1234
ports:
- "5080:80"
- "5543:443"
# env_file:
# - ./webenv.env
volumes :
- ./web:/var/www/web
- ./src:/var/www/src
- ./html:/var/www/html
- data:/var/www/data
links :
- mysql:db
- mongodb:mongo
- mailcatcher:mail
- postgres:pg
####exemple : service php-cli avec lancement du serveur embarqué :
services:
php:
image: canals/php:7.2-cli
ports:
- "8800:8000"
volumes:
- ./:/var/php
working_dir: /var/php
command: php -S 0.0.0.0:8000 index.php
links :
- mysql:db
- mongo:mongo
mysql + adminer
- basé sur les images officielles
mysql
(oumariadb
)etadminer
- conseils : définir un password pour l'utilisateur
root
- il peut être utile de monter un volume pour échanger des données avec le serveur mysql si les fichiers d'import/export sont trop volumineux pour être traités par adminer
important :
Ne pas oublier de lier le service mysql dans tous les services qui doivent accéder à la base mysql, par exemple dans les services php.
####exemple
mysql:
image: mariadb:latest
# image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=user
- MYSQL_PASSWORD=user
ports:
- "3603:3306"
adminer:
image: adminer
ports:
- "8080:8080"
links:
- mysql:db
mongodb + mongo-express
- basé sur l'image officielle
mongo
- mongo-express est un client mongo pour interagir de façon interactive avec le serveur mongo,
basé sur l'image officielle
mongo-express
exemple
mongodb:
image: mongo:3.4
ports:
- 27017:27017
mongo-express:
image: mongo-express:latest
ports:
- "8081:8081"
links:
- mongodb:mongo
mailcatcher
MailCatcher est un service de mail qui offre un contexte de test pour les
fonctionnalités d'envoi de mail d'une application web. MailCatcher est un serveur de mail
permettant de consulter l'ensemble des messages qui lui sont adressés via une interface web.
Le serveur opère sur le port 1025
et l'interface web est accessible sur le port 1080
.
- basé sur l'image
schickling/mailcatcher
- l'image expose les ports
1025
et1080
- ajouter le lien dans les services qui doivent accéder au serveur
####exemple
mailcatcher:
image: schickling/mailcatcher
ports:
- "1080:1080"
- "1025:1025
####usage Dans un service php déclarant le lien mailcatcher :
web:
image: canals/php
...
links :
- mysql:db
- mailcatcher:mail
il faut utiliser le serveur de mail nommé mail
sur le port 1025
.
Par exemple, avec SwiftMailer :
$mailer = new Swift_Mailer( new Swift_SmtpTransport('mail', 1025) );