Les contenus du cours BRE03 Web Dev Course © 2024 par Mari Doucet sont sous licence CC BY-NC-SA 4.0
Docker est à la base un projet interne de l’entreprise française dotCloud, qui proposait une plateforme de mise en Cloud. La première version Open Source de Docker a été publiée en 2013.
Docker est une plateforme qui permet d’exécuter des applications en les plaçant dans des conteneurs logiciels.
En simplifié, plutôt que de devoir, à chaque fois, installer toute une stack technique sur chaque machine voulant travailler sur un projet, on utilise un container, qui va contenir cette stack technique préconfigurée et on lance le container plutôt que de faire de multiples installations.
Une des problématiques principales lorsqu’une équipe de développement n’a pas un matériel strictement identique, c’est d’uniformiser les configurations.
À plus forte raison lorsque cette équipe doit travailler pour différents projets dont les configurations ne sont pas nécessairement identiques.
Docker permet d’uniformiser tout ça.
Mon projet doit pouvoir tourner sur un serveur RedHat, avec Nginx et la version 7.4 de PHP : c’est la configuration du serveur du client. Problème : aucun de mes devs n’est sur RedHat (J’ai 2 devs sous Debian, et 2 sous MacOS, et tout le monde est à la dernière version de PHP : la 8.3).
Je vais donc créer un container Docker qui contient cette stack : RedHat + Nginx + PHP 7.4. Et chacun-e de mes devs n’aura qu’à faire tourner ce container sur son poste.
Lors du prochain projet pour un autre client, qui lui a un serveur sous Ubuntu 14.04 avec Apache 2 et PHP 5.4, je referai une autre image pour ce serveur que je ferai tourner et tous les devs pourront bosser sur le projet quelque soit leur environnement local.
Installation Mac Apple Silicon
Dans chacun de ces cas, vous devrez lancer la commande
docker-compose up
dans le dossier concerné ou
docker-compose up -d
Si vous voulez que la commande tourne en fond sans nécessairement voir tous les logs.
Un très bon repo GitHub pour une stack LAMP configurable est dispo ici
docker-compose.yml
services:
db:
image: mysql:5.7
volumes:
- db_bre03_data:/var/lib/mysql
restart: always
platform: linux/x86_64
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: bre03_db
MYSQL_USER: bre03
MYSQL_PASSWORD: password
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- .:/var/www/html/wp-content/
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: bre03
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: bre03_db
WORDPRESS_PASSWD: WggZIYN33wkMeG&nq*
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8080:80"
environment:
- PMA_HOST=db
volumes:
db_bre03_data: {}
Par défaut Symfony propose de tourner avec un container PostgreSQL, si vous voulez utiliser MySQL voici la configuration à changer dans les fichiers fournis par Symfony et le contenu de votre .env.local
.
compose.yaml
services:
database:
image: 'mysql:latest'
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: main
ports:
# To allow the host machine to access the ports below, modify the lines below.
# For example, to allow the host to connect to port 3306 on the container, you would change
# "3306" to "3306:3306". Where the first port is exposed to the host and the second is the container port.
# See https://docs.docker.com/compose/compose-file/compose-file-v3/#ports for more information.
- '3306:3306'
###< doctrine/doctrine-bundle ###
volumes:
###> doctrine/doctrine-bundle ###
database_data:
###< doctrine/doctrine-bundle ###
compose.override.yaml
services:
###> doctrine/doctrine-bundle ###
database:
ports:
- "3306"
###< doctrine/doctrine-bundle ###
.env.local
DATABASE_URL="mysql://root:password@127.0.0.1:3306/main?serverVersion=8.0.32&charset=utf8mb4"