docker-compose avancé¶
Architecture du projet¶
├── Readme.md
├── docker
│ ├── db
│ │ └── mariadb
│ │ └── my.cnf
│ └── server
│ ├── Dockerfile
│ ├── apache
│ │ └── sites-enabled
│ │ └── site.conf
│ └── php
│ └── php.ini
├── docker-compose.yml
└── symfony
Fichier .env¶
APP_NAME=symfony_projet
APP_PORT=8100
APP_DB_ADMIN_PORT=8200
DB_PORT=33016
MYSQL_ROOT_PASS=supersecret
MYSQL_USER=app_user
MYSQL_PASS=secretpasswd
MYSQL_DB=symfony_projet
Fichier my.cnf¶
[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
Fichier site.conf¶
<VirtualHost *:80>
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
</Directory>
</VirtualHost>
fichier Dockerfile dans docker/server¶
FROM php:8.1-apache
RUN a2enmod rewrite
RUN apt-get update && apt-get install -y git unzip zip
WORKDIR /var/www/html/
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions gd pdo_mysql bcmath zip intl opcache
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
# met à jour les informations pour git
RUN git config --global user.email "user@truc.com" && git config --global user.name "user"
RUN curl -sS https://get.symfony.com/cli/installer | bash \
&& mv /root/.symfony5/bin/symfony /usr/local/bin/symfony
## && symfony new symfony_project --version=stable --dir=/var/www/symfony
Fichier docker-compose.yml¶
networks:
symfony_projet_net:
services:
server:
build:
context: .
dockerfile: ./docker/server/Dockerfile
container_name: '${APP_NAME}-server'
ports:
- '${APP_PORT}:80'
working_dir: /var/www/html
environment:
- 'DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASS}@db_server:3306/${MYSQL_DB}?serverVersion=10.9'
volumes:
- ./symfony:/var/www/html
- ./docker/server/apache/sites-enabled:/etc/apache2/sites-enabled
- ./docker/server/php/php.ini:/usr/local/etc/php/conf.d/extra-php-config.ini
depends_on:
db_server:
condition: service_healthy
networks:
- symfony_projet_net
db_server:
image: mariadb:10.9.3
container_name: '${APP_NAME}-db'
restart: always
ports:
- '${DB_PORT}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${MYSQL_ROOT_PASS}'
MYSQL_USER: '${MYSQL_USER}'
MYSQL_PASSWORD: '${MYSQL_PASS}'
MYSQL_DATABASE: '${MYSQL_DB}'
volumes:
- db_data:/var/lib/mysql
- ./docker/db/mariadb/my.cnf:/etc/mysql/conf.d/my.cnf
healthcheck:
test: mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD
interval: 5s
retries: 5
networks:
- symfony_projet_net
db_admin:
image: phpmyadmin/phpmyadmin:5
container_name: '${APP_NAME}-db-admin'
ports:
- '${APP_DB_ADMIN_PORT}:80'
environment:
PMA_HOST: db_server
depends_on:
db_server:
condition: service_healthy
volumes:
- db_admin_data:/var/www/html
networks:
- symfony_projet_net
volumes:
db_data:
db_admin_data:
Observations/Questions¶
1. Observez l’usage des variables d’environnement dans .env. Ces variables peuvent ensuite être réutilisées dans les fichiers Docker comme dans docker-compose.yml : DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASS}@db_server:3306/${MYSQL_DB}?serverVersion=10.5`
Observez les services. Combien y en a-t-il ?
Observez le Dockerfile. Quelle est son utilité ? Ses différentes étapes ? Expliquez le fonctionnement des commandes COPY utilisées.
Quels sont les volumes montés et leurs rôles ?
Tester le service phpmyadmin.
Sur quel port tourne-t-il ?
Pourrait-on mettre ce numéro de port en paramètre ?
Quels sont les identifiants pour se connecter ?
Pour le service correspondant à Apache/Symfony :
ouvrez un terminal sur le conteneur concerné : docker exec -it symfony_projet-server bash
placez-vous dans /var/www/html
Lancez la commande : composer create-project symfony/website-skeleton .
Qu’observez-vous dans votre dossier de travail ?
Testez si Symfony est bien accessible