La chose la plus satisfaisante à faire pour un débutant Docker est de mettre en ligne son premier site web entièrement via Docker. L'objectif est de n'avoir aucun logiciel (php, nginx, mysql) installé sur la machine hôte et d'avoir tout le nécessaire dans des containers.
Si vous arrivez ici, vous devez savoir que docker est basé sur les images et les containers. Pour créer notre serveur web, nous allons utiliser différentes images :
- PHP
- Nginx
- Mysql
- Adminer (équivalent à phpMyAdmin)
Docker Compose est un outil officiel permettant de vous aider dans la gestion des containers Docker. Il vous permet de définir et de configurer l'ensemble des composants dont vous avez besoin dans un fichier docker-compose.yml. docker stack
est une commande intégrée à la ligne de commande Docker.
Trêve de bavardages, voici directement la stack en question :
version: "2"
services:
# --- PHP 7.2
php:
image: bitnami/php-fpm:7.2
restart: always
volumes:
- /home/monprojet/html:/app
- /home/monprojet/conf/php.ini:/opt/bitnami/php/etc/conf.d/php.ini:ro
# --- nginx 1.14
nginx:
image: bitnami/nginx:1.14
restart: always
depends_on:
- php
volumes:
- /home/monprojet/html:/app
- /home/monprojet/conf/site.conf:/opt/bitnami/nginx/conf/vhosts/site.conf:ro
ports:
- 80:8080
# --- mysql 5.7
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: mabase
MYSQL_USER: monutilisateur
MYSQL_PASSWORD: monmotdepasse
MYSQL_RANDOM_ROOT_PASSWORD: '1'
# --- adminer
adminer:
image: adminer
restart: always
ports:
- 8888:8080
environment:
ADMINER_DEFAULT_SERVER: db
Vous pouvez placer ce code dans un fichier docker-compose.yml
.Notez que les containers Nginx et PHP utilisent des volumes pour stocker les configurations et les fichiers du site web.
D'après la configuration, le site web est à placer dans le dossier /home/monprojet/html
sur votre serveur (sur l'hôte, pas dans le container).
La configuration nginx est à placer dans /home/monprojet/conf/site.conf
.
La configuration php est à placer dans /home/monprojet/conf/php.ini
Une fois terminé, utilisez la commande docker stack
comme ci-dessous pour créer la stack.
docker stack deploy --compose-file docker-compose.yml mastack
server {
root /app/public;
listen 0.0.0.0:8080;
server_name _;
index index.php;
charset utf-8;
client_max_body_size 20M;
port_in_redirect off;
# Content security headers
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
# Base configuration for correct URL handling
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Define extra options for CSS and Javascript files
location ~* \.(?:css|js|map|scss)$ {
expires 30d;
access_log off;
add_header Cache-Control "public";
try_files $uri @fallback;
}
# Redirect error pages to index.php
error_page 404 /index.php;
error_page 403 /index.php;
# Configuration of the PHP handler
location ~ \.php$ {
fastcgi_pass php:9000;
try_files $uri /index.php;
include fastcgi.conf;
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_index index.php;
fastcgi_read_timeout 300;
}
}
; miscellaneous
; -------------
expose_php = off
; resource limits
; ---------------
max_execution_time = 60
max_input_time = 60
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 20M
; opcache
; -------
opcache.enable = 1
opcache.fast_shutdown = 1
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 7963
opcache.memory_consumption = 192
Bien sur, vous aurez certainement à adapter certaines parties selon vos besoins. Cependant, si vous rencontrez un quelconque soucis, n'hésitez-pas à indiquer votre démarche dans l'espace commentaire.