Tutoriel : Créer une application multiconteneur (préversion) dans Web App pour conteneurs
Remarque
Les conteneurs sidecar (préversion) remplaceront les applications multiconteneur dans App Service. Pour commencer, consultez Didacticiel : Configurer un conteneur sidecar pour un conteneur personnalisé dans Azure App Service (préversion).
Web App pour conteneurs fournit une solution souple d’utilisation des images Docker. Dans ce didacticiel, vous allez apprendre à créer une application à plusieurs conteneurs à l’aide de WordPress et de MySQL. Vous allez effectuer ce tutoriel dans Cloud Shell, mais vous pouvez également exécuter ces commandes localement avec l’outil en ligne de commande Azure CLI (2.0.32 ou ultérieur).
Dans ce tutoriel, vous allez apprendre à :
- Convertir une configuration Docker Compose pour travailler avec Web App pour conteneurs
- Déployer une application à plusieurs conteneurs vers Azure
- Ajouter des paramètres d’application
- Utiliser le stockage persistant pour vos conteneurs
- Se connecter à la base de données Azure pour MySQL
- Résoudre les erreurs
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
Prérequis
Pour suivre ce tutoriel, vous devez connaître Docker Compose.
Télécharger l’exemple
Pour ce tutoriel, vous utilisez le fichier de composition de Docker, mais vous le modifiez pour inclure Azure Database pour MySQL, le stockage persistant et Redis. Le fichier de configuration se trouve dans les exemples Azure. Dans l’exemple ci-dessous, notez que depends_on
est une option non prise en charge et est ignoré. Pour connaître les options de configuration prises en charge, consultez Options Docker Compose.
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
Dans Cloud Shell, créez un répertoire pour le tutoriel, puis accédez à ce répertoire.
mkdir tutorial
cd tutorial
Exécutez ensuite la commande suivante pour cloner le dépôt de l’exemple d’application dans le répertoire de votre tutoriel. Accédez ensuite au répertoire multicontainerwordpress
.
git clone https://github.com/Azure-Samples/multicontainerwordpress
cd multicontainerwordpress
Créer un groupe de ressources
Un groupe de ressources est un conteneur logique dans lequel les ressources Azure, comme les applications web, les bases de données et les comptes de stockage, sont déployées et managées. Par exemple, vous pouvez choisir de supprimer le groupe de ressources complet ultérieurement en une seule étape.
Dans Cloud Shell, créez un groupe de ressources avec la commande az group create
. L’exemple suivant crée un groupe de ressources nommé myResourceGroup à l’emplacement USA Centre Sud. Pour afficher tous les emplacements pris en charge pour App Service sous Linux au niveau Standard, exécutez la commande az appservice list-locations --sku S1 --linux-workers-enabled
.
az group create --name myResourceGroup --location "South Central US"
Vous créez généralement votre groupe de ressources et les ressources dans une région proche de chez vous.
Une fois la commande terminée, une sortie JSON affiche les propriétés du groupe de ressources.
Créer un plan Azure App Service
Dans Cloud Shell, créez un plan App Service dans le groupe de ressources avec la commande az appservice plan create
.
L’exemple suivant crée un plan App Service nommé myAppServicePlan
dans le niveau tarifaire Standard (--sku S1
) et un conteneur Linux (--is-linux
).
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku S1 --is-linux
Une fois le plan App Service créé, Cloud Shell affiche des informations similaires à l’exemple suivant :
{ "adminSiteName": null, "appServicePlanName": "myAppServicePlan", "geoRegion": "South Central US", "hostingEnvironmentProfile": null, "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan", "kind": "linux", "location": "South Central US", "maximumNumberOfWorkers": 1, "name": "myAppServicePlan", < JSON data removed for brevity. > "targetWorkerSizeId": 0, "type": "Microsoft.Web/serverfarms", "workerTierName": null }
Docker Compose avec conteneurs WordPress et MySQL
Création d’une application Docker Compose
Dans Cloud Shell, créez une application web multiconteneur dans le plan App Service myAppServicePlan
avec la commande az webapp create. N’oubliez pas de remplacer <app-name> par un nom d’application unique.
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml
Une fois l’application web créée, Cloud Shell affiche une sortie similaire à l’exemple suivant :
{ "additionalProperties": {}, "availabilityState": "Normal", "clientAffinityEnabled": true, "clientCertEnabled": false, "cloningInfo": null, "containerSize": 0, "dailyMemoryTimeQuota": 0, "defaultHostName": "<app-name>.azurewebsites.net", "enabled": true, < JSON data removed for brevity. > }
Accéder à l’application
Accédez à l’application déployée dans (http://<app-name>.azurewebsites.net
). Le chargement de l’application peut prendre plusieurs minutes. Si vous recevez une erreur, attendez quelques minutes supplémentaires, puis actualisez le navigateur. Si vous rencontrez des difficultés et souhaitez résoudre les problèmes, consultez les journaux d’activité du conteneur.
Félicitations, vous avez créé une application à plusieurs conteneurs dans Web App pour conteneurs. Ensuite, vous devez configurer votre application pour utiliser Azure Database pour MySQL. N’installez pas WordPress pour le moment.
Connexion à la base de données de production
Il n’est pas recommandé d’utiliser des conteneurs de base de données dans un environnement de production. Les conteneurs locaux ne sont pas évolutifs. Au lieu de cela, vous allez utiliser Azure Database pour MySQL qui peut être mis à l’échelle.
Création d’un serveur Azure Database pour MySQL
Créez un serveur Azure Database pour MySQL avec la commande az mysql server create
.
Dans la commande suivante, indiquez le nom unique de votre propre serveur MySQL là où se trouve l’espace réservé <mysql-server-name> (les caractères valides sont a-z
, 0-9
et -
). Ce nom fait partie du nom d’hôte du serveur MySQL (<mysql-server-name>.database.windows.net
) et doit donc être globalement unique.
az mysql server create --resource-group myResourceGroup --name <mysql-server-name> --location "South Central US" --admin-user adminuser --admin-password My5up3rStr0ngPaSw0rd! --sku-name B_Gen5_1 --version 5.7
La création du serveur peut prendre quelques minutes. Une fois le serveur MySQL créé, Cloud Shell affiche des informations similaires à l’exemple suivant :
{ "administratorLogin": "adminuser", "administratorLoginPassword": null, "fullyQualifiedDomainName": "<mysql-server-name>.database.windows.net", "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>", "location": "southcentralus", "name": "<mysql-server-name>", "resourceGroup": "myResourceGroup", ... }
Configuration d’un pare-feu de serveur
Créez une règle de pare-feu pour votre serveur MySQL afin d’autoriser les connexions client à l’aide de la commande az mysql server firewall-rule create
. Lorsque les adresses IP de début et de fin sont définies sur 0.0.0.0, le pare-feu est ouvert uniquement pour les autres ressources Azure.
az mysql server firewall-rule create --name allAzureIPs --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0
Conseil
Vous pouvez être encore plus restrictif dans votre règle de pare-feu en choisissant uniquement les adresses IP sortantes que votre application utilise.
Création de la base de données WordPress
az mysql db create --resource-group myResourceGroup --server-name <mysql-server-name> --name wordpress
Une fois la base de données créée, Cloud Shell affiche des informations similaires à l’exemple suivant :
{ "additionalProperties": {}, "charset": "latin1", "collation": "latin1_swedish_ci", "id": "/subscriptions/12db1644-4b12-4cab-ba54-8ba2f2822c1f/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>/databases/wordpress", "name": "wordpress", "resourceGroup": "myResourceGroup", "type": "Microsoft.DBforMySQL/servers/databases" }
Configuration des variables de la base de données dans WordPress
Pour connecter l’application WordPress à ce nouveau serveur MySQL, vous devez configurer quelques variables d’environnement spécifiques à WordPress, y compris le chemin d’accès de l’autorité de certification SSL défini par MYSQL_SSL_CA
. Le certificat racine CyberTrust Baltimore de DigiCert est fourni dans l’image personnalisée ci-dessous.
Pour effectuer ces modifications, utilisez la commande az webapp config appsettings set dans Cloud Shell. Les paramètres d’application respectent la casse et sont séparés par des espaces.
az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WORDPRESS_DB_HOST="<mysql-server-name>.mysql.database.azure.com" WORDPRESS_DB_USER="adminuser" WORDPRESS_DB_PASSWORD="My5up3rStr0ngPaSw0rd!" WORDPRESS_DB_NAME="wordpress" MYSQL_SSL_CA="BaltimoreCyberTrustroot.crt.pem"
Une fois le paramètre d’application créé, Cloud Shell affiche des informations similaires à l’exemple suivant :
[ { "name": "WORDPRESS_DB_HOST", "slotSetting": false, "value": "<mysql-server-name>.mysql.database.azure.com" }, { "name": "WORDPRESS_DB_USER", "slotSetting": false, "value": "adminuser" }, { "name": "WORDPRESS_DB_NAME", "slotSetting": false, "value": "wordpress" }, { "name": "WORDPRESS_DB_PASSWORD", "slotSetting": false, "value": "My5up3rStr0ngPaSw0rd!" }, { "name": "MYSQL_SSL_CA", "slotSetting": false, "value": "BaltimoreCyberTrustroot.crt.pem" } ]
Pour plus d’informations sur les variables d’environnement, consultez Configurer des variables d’environnement.
Utiliser une image personnalisée pour le protocole TLS/SSL de MySQL et d’autres configurations
Par défaut, TLS/SSL est utilisé par Azure Database pour MySQL. WordPress nécessite une configuration supplémentaire pour utiliser TLS/SSL avec MySQL. « L’image officielle » de WordPress ne fournit pas la configuration supplémentaire, mais une image personnalisée a été préparée pour vous simplifier la tâche. En pratique, vous devez ajouter les modifications souhaitées à votre propre image.
L’image personnalisée est basée sur « l’image officielle » de WordPress provenant du Hub Docker. Les modifications suivantes ont été apportées dans cette image personnalisée pour Azure Database pour MySQL :
- Ajoute le fichier de certificat racine de CyberTrust Baltimore pour SSL à MySQL.
- Utilise le paramètre d’application pour le certificat d’autorité de certification SSL de MySQL dans le fichier WordPress wp-config.php.
- Ajoute une définition WordPress pour MYSQL_CLIENT_FLAGS (requise pour SSL de MySQL).
Les modifications suivantes ont été apportées pour Redis (à utiliser dans une section ultérieure) :
- Ajoute une extension PHP pour Redis v4.0.2.
- Ajoute la décompression requise pour l’extraction du fichier.
- Ajoute le plug-in WordPress Redis Object Cache 1.3.8.
- Utilise le paramètre d’application pour le nom d’hôte Redis dans le fichier WordPress wp-config.php.
Pour utiliser l’image personnalisée, vous devez mettre à jour votre fichier docker-compose-wordpress.yml. Dans Cloud Shell, ouvrez un éditeur de texte et remplacez image: wordpress
pour utiliser image: mcr.microsoft.com/azuredocs/multicontainerwordpress
. Vous n’avez plus besoin du conteneur de base de données. Supprimez les sections db
, environment
, depends_on
et volumes
du fichier de configuration. Votre fichier doit ressembler au code suivant :
version: '3.3'
services:
wordpress:
image: mcr.microsoft.com/azuredocs/multicontainerwordpress
ports:
- "8000:80"
restart: always
Mise à jour avec la nouvelle configuration
Dans Cloud Shell, reconfigurez votre application web multiconteneur avec la commande az webapp config container set. N’oubliez pas de remplacer <app-name> par le nom de l’application web créée précédemment.
az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml
Une fois l’application reconfigurée, Cloud Shell affiche des informations similaires à celles de l’exemple suivant :
[ { "name": "DOCKER_CUSTOM_IMAGE_NAME", "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICB3b3JkcHJlc3M6CiAgICAgaW1hZ2U6IG1zYW5nYXB1L3dvcmRwcmVzcwogICAgIHBvcnRzOgogICAgICAgLSAiODAwMDo4MCIKICAgICByZXN0YXJ0OiBhbHdheXM=" } ]
Accéder à l’application
Accédez à l’application déployée dans (http://<app-name>.azurewebsites.net
). L’application utilise maintenant Azure Database pour MySQL.
Ajout de stockage persistant
Votre conteneur à plusieurs applications s’exécute maintenant dans Web App pour conteneurs. Toutefois, si vous installez WordPress maintenant et redémarrez votre application plus tard, vous verrez que l’installation de WordPress a disparu. Cela se produit parce que votre configuration Docker Compose pointe actuellement vers un emplacement de stockage à l’intérieur de votre conteneur. Les fichiers installés dans le conteneur ne sont pas conservés après le redémarrage de l’application. Dans cette section, vous allez ajouter du stockage persistant à votre conteneur WordPress.
Configuration des variables d’environnement
Pour utiliser le stockage persistant, vous devez activer ce paramètre dans App Service. Pour faire cette modification, utilisez la commande az webapp config appsettings set dans Cloud Shell. Les paramètres d’application respectent la casse et sont séparés par des espaces.
az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE
Une fois le paramètre d’application créé, Cloud Shell affiche des informations similaires à l’exemple suivant :
[ < JSON data removed for brevity. > { "name": "WORDPRESS_DB_NAME", "slotSetting": false, "value": "wordpress" }, { "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE", "slotSetting": false, "value": "TRUE" } ]
Modification du fichier de configuration
Dans le Cloud Shell, ouvrez le fichier docker-compose-wordpress.yml
dans un éditeur de texte.
L’option volumes
mappe le système de fichiers sur un répertoire dans le conteneur. ${WEBAPP_STORAGE_HOME}
est une variable d’environnement d’App Service mappée sur le stockage persistant de votre application. Vous allez utiliser cette variable d’environnement dans l’option des volumes pour que les fichiers WordPress soient installés dans le stockage persistant plutôt que dans le conteneur. Apportez les modifications suivantes au fichier :
Dans la section wordpress
, ajoutez une option volumes
afin d’obtenir le code suivant :
version: '3.3'
services:
wordpress:
image: mcr.microsoft.com/azuredocs/multicontainerwordpress
volumes:
- ${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html
ports:
- "8000:80"
restart: always
Mise à jour avec la nouvelle configuration
Dans Cloud Shell, reconfigurez votre application web multiconteneur avec la commande az webapp config container set. N’oubliez pas de remplacer <app-name> par un nom d’application unique.
az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml
Après son exécution, la commande retourne un résultat semblable à l’exemple suivant :
[ { "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE", "slotSetting": false, "value": "TRUE" }, { "name": "DOCKER_CUSTOM_IMAGE_NAME", "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo=" } ]
Accéder à l’application
Accédez à l’application déployée dans (http://<app-name>.azurewebsites.net
).
Le conteneur WordPress utilise maintenant Azure Database pour MySQL et le stockage persistant.
Ajout d’un conteneur Redis
« L’image officielle » de WordPress n’inclut pas les dépendances pour Redis. Ces dépendances et la configuration supplémentaire requise pour utiliser Redis avec WordPress ont été préparées pour vous dans cette image personnalisée. En pratique, vous devez ajouter les modifications souhaitées à votre propre image.
L’image personnalisée est basée sur « l’image officielle » de WordPress provenant du Hub Docker. Les modifications suivantes ont été apportées dans cette image personnalisée pour Redis :
- Ajoute une extension PHP pour Redis v4.0.2.
- Ajoute la décompression requise pour l’extraction du fichier.
- Ajoute le plug-in WordPress Redis Object Cache 1.3.8.
- Utilise le paramètre d’application pour le nom d’hôte Redis dans le fichier WordPress wp-config.php.
Ajoutez le conteneur redis en bas du fichier de configuration afin qu’il ressemble à l’exemple suivant :
version: '3.3'
services:
wordpress:
image: mcr.microsoft.com/azuredocs/multicontainerwordpress
ports:
- "8000:80"
restart: always
redis:
image: mcr.microsoft.com/oss/bitnami/redis:6.0.8
environment:
- ALLOW_EMPTY_PASSWORD=yes
restart: always
Configuration des variables d’environnement
Pour utiliser Redis, vous devez allez devoir activer ce paramètre, WP_REDIS_HOST
, dans App Service. Pour que WordPress communique avec l’hôte Redis, ce paramètre est obligatoire. Pour faire cette modification, utilisez la commande az webapp config appsettings set dans Cloud Shell. Les paramètres d’application respectent la casse et sont séparés par des espaces.
az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WP_REDIS_HOST="redis"
Une fois le paramètre d’application créé, Cloud Shell affiche des informations similaires à l’exemple suivant :
[ < JSON data removed for brevity. > { "name": "WORDPRESS_DB_USER", "slotSetting": false, "value": "adminuser" }, { "name": "WP_REDIS_HOST", "slotSetting": false, "value": "redis" } ]
Mise à jour avec la nouvelle configuration
Dans Cloud Shell, reconfigurez votre application web multiconteneur avec la commande az webapp config container set. N’oubliez pas de remplacer <app-name> par un nom d’application unique.
az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file compose-wordpress.yml
Après son exécution, la commande retourne un résultat semblable à l’exemple suivant :
[ { "name": "DOCKER_CUSTOM_IMAGE_NAME", "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo=" } ]
Accéder à l’application
Accédez à l’application déployée dans (http://<app-name>.azurewebsites.net
).
Suivez la procédure et installez WordPress.
Connexion de WordPress à Redis
Connectez-vous à l’interface d’administration de WordPress. Dans le volet de navigation gauche, sélectionnez Plugins (Extensions), puis sélectionnez Installed Plugins (Extensions installées).
Afficher toutes les extensions ici
Dans la page des extensions, recherchez Redis Object Cache et cliquez sur Activate (Activer).
Cliquez sur Paramètres.
Cliquez sur le bouton Enable Object Cache (Activer Object Cache).
WordPress se connecte au serveur Redis. L’état de la connexion apparaît sur la même page.
Félicitations, vous avez connecté WordPress à Redis. L’application prête pour la production utilise maintenant Azure Database pour MySQL, le stockage persistant et Redis. Vous pouvez maintenant effectuer un scale-out de votre plan App Service à plusieurs instances.
Recherche des journaux d’activité de conteneur Docker
Si vous rencontrez des problèmes avec l’utilisation de plusieurs conteneurs, vous pouvez accéder aux journaux d’activité dans : https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Le résultat ressemble à l’exemple suivant :
[ { "machineName":"RD00XYZYZE567A", "lastUpdated":"2018-05-10T04:11:45Z", "size":25125, "href":"https://<app-name>.scm.azurewebsites.net/api/vfs/LogFiles/2018_05_10_RD00XYZYZE567A_docker.log", "path":"/home/LogFiles/2018_05_10_RD00XYZYZE567A_docker.log" } ]
Vous voyez un journal pour chaque conteneur et un journal supplémentaire pour le processus parent. Copiez la valeur href
respective dans le navigateur pour afficher le journal.
Nettoyer le déploiement
Une fois l’exemple de script exécuté, la commande suivante permet de supprimer le groupe de ressources et toutes les ressources associées.
az group delete --name myResourceGroup
Étapes suivantes
Dans ce didacticiel, vous avez appris à :
- Convertir une configuration Docker Compose pour travailler avec Web App pour conteneurs
- Déployer une application à plusieurs conteneurs vers Azure
- Ajouter des paramètres d’application
- Utiliser le stockage persistant pour vos conteneurs
- Se connecter à la base de données Azure pour MySQL
- Résoudre les erreurs
Passez au tutoriel suivant pour apprendre à sécuriser votre application avec un domaine personnalisé et un certificat.
Ou consultez les autres ressources :
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour