Docker est un outil de conteneurisation open source qui vous permet de créer, déployer et exécuter des applications à l'aide de conteneurs. Les conteneurs vous permettent de conditionner une application avec toutes les parties requises et de la déployer en tant que package unique. Les conteneurs sont portables et vous pouvez les déployer n'importe où. Un conteneur offre aux développeurs un environnement de travail uniforme et rationalisé qui peut être facilement partagé.
Dans ce guide, nous allons vous montrer comment déployer une application PHP avec Nginx et MySQL en utilisant Docker et Docker Compose.
Prérequis
- Un nouveau serveur Ubuntu 20.04 sur la plate-forme cloud Atlantic.Net
- Un mot de passe root configuré sur votre serveur
Étape 1 - Créer un serveur cloud Atlantic.Net
Tout d'abord, connectez-vous à votre serveur Atlantic.Net Cloud. Créez un nouveau serveur en choisissant Ubuntu 20.04 comme système d'exploitation avec au moins 4 Go de RAM. Connectez-vous à votre serveur cloud via SSH et connectez-vous à l'aide des informations d'identification mises en évidence en haut de la page.
Une fois que vous êtes connecté à votre serveur Ubuntu 20.04, exécutez la commande suivante pour mettre à jour votre système de base avec les derniers packages disponibles.
apt-get update -y
Étape 2 - Installer Docker et Docker Compose
Tout d'abord, installez les dépendances requises à l'aide de la commande suivante :
apt-get install apt-transport-https ca-certificates curl tree software-properties-common -y
Ensuite, ajoutez le référentiel Docker à l'aide de la commande suivante :
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Ensuite, installez Docker et Docker Compose avec la commande suivante :
apt-get install docker-ce docker-compose -y
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Étape 3 - Structure du répertoire
Pour les besoins de ce didacticiel, nous utiliserons la structure de répertoires suivante :
/root/docker-project/├── docker-compose.yml├── nginx│ ├── default.conf│ └── Dockerfile├── php│ └── Dockerfile└── www └── html └── index.php
Étape 4 - Créer un conteneur Nginx
Avant de commencer, vous devrez créer et lancer un conteneur Nginx pour héberger l'application PHP.
Commencez par créer un répertoire pour votre projet avec la commande suivante :
mkdir ~/docker-project
Ensuite, changez le répertoire de votre projet et créez un fichier docker-compose.yml pour lancer le conteneur Nginx.
cd ~/docker-projectnano docker-compose.yml
Ajoutez les lignes suivantes :
nginx :image :nginx:latest container_name :nginx-container ports :- 80:80
Enregistrez et fermez le fichier lorsque vous avez terminé.
Le fichier ci-dessus téléchargera la dernière image Nginx, créera un conteneur nginx et l'exposera sur le port 80.
Ensuite, lancez le conteneur Nginx avec la commande suivante :
docker-composer jusqu'à -d
Vous pouvez vérifier le conteneur en cours d'exécution avec la commande suivante :
docker ps
Vous devriez voir le résultat suivant :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc6641e4d5bbf nginx:latest "/docker-entrypoint.…" Il y a 5 secondes Jusqu'à 3 secondes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx- conteneur
Maintenant, ouvrez votre navigateur Web et accédez à votre conteneur Nginx en utilisant l'URL http://your-server-ip . Vous devriez voir la page de test Nginx sur l'écran suivant :
Étape 5 - Créer un conteneur PHP
Commencez par créer un nouveau répertoire dans votre projet avec la commande suivante :
mkdir -p ~/docker-project/www/html
Ensuite, créez un fichier index.php pour vérifier votre version de PHP.
nano ~/docker-project/www/html/index.php
Ajoutez les lignes suivantes :
Bonjour le monde ! Bonjour le monde !
Enregistrez et fermez le fichier, puis créez un répertoire pour Nginx dans le répertoire de votre projet :
mkdir ~/docker-project/nginx
Ensuite, créez un fichier de configuration par défaut Nginx pour exécuter votre application PHP :
nano ~/docker-project/nginx/default.conf
Ajoutez les lignes suivantes :
serveur { écouter 80 default_server ; racine /var/www/html; index index.html index.php; jeu de caractères utf-8 ; location / { try_files $uri $uri/ /index.php?$query_string; } location =/favicon.ico { access_log off ; log_not_found désactivé ; } location =/robots.txt { access_log off ; log_not_found désactivé ; } access_log off ; error_log /var/log/nginx/error.log erreur ; sendfile désactivé ; client_max_body_size 100 m ; emplacement ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php ; inclure fastcgi_params ; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ; fastcgi_intercept_errors désactivé ; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } emplacement ~ /.ht { refuser tout ; } }
Enregistrez et fermez le fichier.
Ensuite, créez un Dockerfile dans le répertoire nginx. Cela copiera le fichier de configuration par défaut de Nginx dans le conteneur Nginx.
nano ~/docker-project/nginx/Dockerfile
Ajoutez les lignes suivantes :
DE nginx :dernière COPIE ./default.conf /etc/nginx/conf.d/default.conf
Ensuite, modifiez le fichier docker-compose.yml :
nano ~/docker-project/docker-compose.yml
Supprimez l'ancien contenu et ajoutez le contenu suivant :
---
nginx:
build: ./nginx/
container_name: nginx-container
ports:
- 80:80
links:
- php
volumes:
- ./www/html/:/var/www/html/
php :
image :php:7.0-fpm
container_name :php-container
expose :
– 9 000
volumes :
– ./www/html /:/var/www/html/
Enregistrez et fermez le fichier lorsque vous avez terminé.
Le fichier ci-dessus créera un nouveau conteneur php, exposera PHP-FPM sur le port 9000, liera nginx-container à php-container, créera un volume et le montera sur le conteneur afin que tout le contenu soit synchronisé avec le répertoire du conteneur /var/www/html/.
Maintenant, lancez le conteneur avec la commande suivante :
cd ~/docker-projectdocker-compose up -dVous pouvez vérifier les conteneurs en cours d'exécution avec la commande suivante :
docker psVous devriez voir le résultat suivant :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES82c8baf15221 docker-project_nginx "/docker-entrypoint.…" Il y a 23 secondes Jusqu'à 22 secondes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx- container10778c6686d8 php:7.0-fpm "docker-php-entrypoi…" Il y a 25 secondes Jusqu'à 23 secondes 9000/tcp php-containerMaintenant, ouvrez votre navigateur Web et accédez à l'URL http://your-server-ip . Vous devriez voir votre page Hello World :
Ensuite, nous vérifierons si notre volume monté fonctionne ou non. Pour cela, éditez le fichier index.php :
nano ~/docker-project/www/html/index.phpChangez la ligne "Hello World ! Les modifications sont appliquées :
Bonjour le monde ! Bonjour le monde ! Les modifications sont appliquées
Maintenant, actualisez votre page Web. Vous devriez voir votre page modifiée à l'écran :
Étape 6 – Créer un conteneur de données
Comme vous pouvez le voir, nous avons monté le répertoire www/html sur nos deux conteneurs, nginx-container et php-container. Cependant, ce n'est pas une bonne méthode. Dans cette section, nous allons créer un conteneur de données séparé pour contenir les données et le lier à tous les autres conteneurs.
Pour cela, éditez le fichier docker-compose.html :
nano ~/docker-project/docker-compose.ymlEffectuez les modifications suivantes :
nginx :build :./nginx/ container_name :nginx-container ports :- 80:80 links :- php volumes_from :- app-data php :image :php:7.0-fpm container_name :php-container expose :- 9000 volumes_from :- app-data app-data :image :php:7.0-fpm container_name :app-data-container volumes :- ./www/html/:/var/www/html/ commande :"true"Maintenant, recréez et lancez tous les conteneurs à l'aide de la commande suivante :
cd ~/docker-projectdocker-compose up -dMaintenant, vérifiez tous les conteneurs en cours d'exécution avec la commande suivante :
docker ps-aVous devriez voir le résultat suivant :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES849315c7ffc0 docker-project_nginx "/docker-entrypoint.…" Il y a 27 secondes Jusqu'à 25 secondes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx- container59a0d7040fd8 php:7.0-fpm "docker-php-entrypoi…" il y a 28 secondes Up 27 secondes 9000/tcp php-containerfbca95944234 php:7.0-fpm "docker-php-entrypoi…" il y a 29 secondes Exited (0) il y a 28 secondes app -data-containerÉtape 7 - Créer un conteneur MySQL
Dans cette section, nous allons créer un conteneur de base de données MySQL et le lier à tous les autres conteneurs.
Tout d'abord, vous devrez modifier l'image PHP et installer l'extension PHP pour MySQL afin de vous connecter à la base de données MySQL.
Commencez par créer un répertoire pour PHP avec la commande suivante :
mkdir ~/docker-project/phpEnsuite, créez un Dockerfile pour installer l'extension PHP :
nano ~/docker-project/php/DockerfileAjoutez les lignes suivantes :
DEPUIS php:7.0-fpm RUN docker-php-ext-install pdo_mysqlEnregistrez et fermez le fichier. Ensuite, modifiez le fichier docker-compose.yml pour créer un conteneur MySQL et un conteneur de données MySQL pour contenir la base de données et les tables :
nano ~/docker-project/docker-compose.ymlEffectuez les modifications suivantes :
nginx :build :./nginx/ container_name :nginx-container ports :- 80:80 liens :- php volumes_from :- app-data php :build :./php/ container_name :php-container expose :- 9 000 liens :- mysql volumes_from :- app-data app-data :image :php:7.0-fpm container_name :app-data-container volumes :- ./www/html/:/var/www/html/ commande :"true" mysql :image :mysql:5.7 container_name :mysql-container volumes_from :- environnement mysql-data :MYSQL_ROOT_PASSWORD :secret MYSQL_DATABASE :mydb MYSQL_USER :myuser MYSQL_PASSWORD :mot de passe mysql-data :image :mysql:5.7 container_name :mysql-data-container volumes :- Commande /var/lib/mysql :"true"Enregistrez et fermez le fichier.
Ensuite, modifiez le index.php fichier et apportez quelques modifications pour tester la connexion à la base de données.
nano ~/docker-project/www/html/index.phpEffectuez les modifications suivantes :
Bonjour le monde ! Bonjour le monde !
$database="madb" ; $user ="monutilisateur" ; $password ="mot de passe" ; $host ="mysql" ; $connection =new PDO("mysql:host={$host};dbname={$database};charset=utf8", $user, $password); $query =$connection->query("SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_TYPE='BASE TABLE'"); $tables =$query->fetchAll(PDO::FETCH_COLUMN); if (empty($tables)) { echo "
Il n'y a pas de tables dans la base de données \"{$database}\".
" ; } else { echo "La base de données \"{$database}\" contient les tables suivantes :
" ; echo "
- " ; foreach ($tables as $table) { echo "
- {$table} " ; } echo "