Kurz: Vytvoření vícekontejnerové aplikace (verze Preview) ve službě Web App for Containers

Poznámka:

Kontejnery sajdkáře (Preview) budou ve službě App Service úspěšné pro vícekontenerové aplikace. Pokud chcete začít, přečtěte si kurz: Konfigurace kontejneru sajdkáře pro vlastní kontejner ve službě Aplikace Azure Service (Preview).

Služba Web App for Containers poskytuje flexibilní způsob, jak používat image Dockeru. V tomto kurzu zjistíte, jak vytvořit vícekontejnerovou aplikaci pomocí WordPressu a MySQL. K dokončení tohoto kurzu použijete Cloud Shell. Ke spuštění těchto příkazů také můžete použít nástroj příkazového řádku Azure CLI (verze 2.0.32 nebo novější).

V tomto kurzu se naučíte:

  • Převést konfiguraci Docker Compose tak, aby fungovala se službou Web App for Containers
  • Nasadit vícekontejnerovou aplikaci do Azure
  • Přidání nastavení aplikace
  • Použít trvalé úložiště pro kontejnery
  • Připojit se ke službě Azure Database for MySQL
  • Řešení chyb

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

Požadavky

K dokončení tohoto kurzu potřebujete zkušenosti s Docker Compose.

Stažení ukázky

V tomto kurzu použijete soubor compose z Dockeru, ale upravíte ho tak, aby zahrnoval Azure Database for MySQL, trvalé úložiště a Redis. Tento konfigurační soubor najdete mezi ukázkami Azure. V následující ukázce si všimněte, že depends_on je nepodporovaná možnost a je ignorována. Podporované možnosti konfigurace najdete v tématu Možnosti 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:

Ve službě Cloud Shell vytvořte adresář kurzu a přejděte do něj.

mkdir tutorial

cd tutorial

Potom spusťte následující příkaz, pomocí kterého do tohoto adresáře kurzu naklonujete úložiště ukázkové aplikace. Pak přejděte do adresáře multicontainerwordpress.

git clone https://github.com/Azure-Samples/multicontainerwordpress

cd multicontainerwordpress

Vytvoření skupiny zdrojů

Skupina prostředků je logický kontejner, do kterého se nasazují a spravují prostředky Azure, jako jsou webové aplikace, databáze a účty úložiště. Později se například můžete rozhodnout odstranit celou skupinu prostředků v jednom jednoduchém kroku.

Ve službě Cloud Shell pomocí příkazu az group create vytvořte skupinu prostředků. Následující příklad vytvoří skupinu prostředků s názvem myResourceGroup v umístění USA – středojih. Pokud chcete zobrazit všechna podporovaná umístění pro službu App Service v Linuxu na úrovni Standard, spusťte příkaz az appservice list-locations --sku S1 --linux-workers-enabled.

az group create --name myResourceGroup --location "South Central US"

Obvykle budete svoji skupinu prostředků a prostředky vytvářet v oblasti, kterou máte blízko.

Po dokončení příkazu se ve výstupu JSON zobrazí vlastnosti skupiny prostředků.

Vytvoření plánu služby Azure App Service

Ve službě Cloud Shell pomocí příkazu az appservice plan create vytvořte ve skupině prostředků plán služby App Service.

Následující příklad vytvoří plán služby App Service s názvem myAppServicePlan v cenové úrovni Standard (--sku S1) a v kontejneru Linuxu (--is-linux).

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku S1 --is-linux

Po vytvoření plánu služby App Service se ve službě Cloud Shell zobrazí podobné informace jako v následujícím příkladu:

{
  "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 s kontejnery WordPressu a MySQL

Vytvoření aplikace Docker Compose

Ve službě Cloud Shell pomocí příkazu az webapp create vytvořte vícekontejnerovou webovou aplikaci v plánu služby App Service myAppServicePlan. Nezapomeňte nahradit <název> aplikace jedinečným názvem aplikace.

az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml

Po vytvoření webové aplikace se ve službě Cloud Shell zobrazí podobný výstup jako v následujícímu příkladu:

{
  "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. >
}

Přechod do aplikace

Přejděte do nasazené aplikace na adrese http://<app-name>.azurewebsites.net. Načtení aplikace může pár minut trvat. Když se zobrazí chyba, ještě chvíli počkejte a pak aktualizujte prohlížeč. Pokud máte problémy a chcete je vyřešit, prohlédněte si protokoly kontejneru.

Ukázková vícekontejnerová aplikace ve službě Web App for Containers

Blahopřejeme, vytvořili jste vícekontejnerovou aplikaci ve službě Web App for Containers. Dále aplikaci nakonfigurujete tak, aby používala službu Azure Database for MySQL. Tentokrát nebudete instalovat WordPress.

Připojení k produkční databázi

Kontejnery databáze se nedoporučuje používat v produkčním prostředí. Místní kontejnery nejsou škálovatelné. Místo toho použijete službu Azure Database for MySQL, která je škálovatelná.

Vytvoření serveru Azure Database for MySQL

Příkazem az mysql server create vytvořte server Azure Database for MySQL.

V následujícím příkazu nahraďte název vašeho serveru MySQL, kde se zobrazí zástupný symbol mysql-server-name> (platné znaky jsou a-z, 0-9a -).< Tento název je součástí názvu hostitele serveru MySQL (<mysql-server-name>.database.windows.net) a musí být globálně jedinečný.

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

Vytvoření serveru může trvat několik minut. Po vytvoření serveru MySQL se ve službě Cloud Shell zobrazí podobné informace jako v následujícím příkladu:

{
  "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",
  ...
}

Konfigurace brány firewall serveru

Pomocí příkazu az mysql server firewall-rule create vytvořte pro svůj server MySQL pravidlo brány firewall umožňující klientská připojení. Pokud je jako počáteční i koncová adresa IP nastavená hodnota 0.0.0.0, je brána firewall otevřená jen pro ostatní prostředky 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

Tip

Pravidlo brány firewall můžete dál omezit použitím jenom odchozích IP adres, které vaše aplikace používá.

Vytvoření databáze WordPressu

az mysql db create --resource-group myResourceGroup --server-name <mysql-server-name> --name wordpress

Po vytvoření databáze se ve službě Cloud Shell zobrazí podobné informace jako v následujícím příkladu:

{
  "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"
}

Konfigurace proměnných databáze ve WordPressu

Kvůli připojení aplikace WordPress k tomuto novému serveru MySQL nakonfigurujete několik proměnných prostředí specifických pro WordPress včetně cesty k certifikační autoritě SSL definované pomocí MYSQL_SSL_CA. Níže uvedená vlastní image obsahuje kořenový certifikát Baltimore CyberTrust od společnosti DigiCert.

K provedení těchto změn použijte příkaz az webapp config appsettings set ve službě Cloud Shell. Nastavení aplikace rozlišují velká a malá písmena a jsou oddělená mezerami.

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"

Po vytvoření nastavení aplikace se ve službě Cloud Shell zobrazí podobné informace jako v následujícím příkladu:

[
  {
    "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"
  }
]

Další informace o proměnných prostředí najdete v tématu Konfigurace proměnných prostředí.

Použití vlastní image pro protokol TLS/SSL MySQL a další konfigurace

Ve výchozím nastavení používá Azure Database for MySQL protokol TLS/SSL. WordPress vyžaduje další konfiguraci pro použití protokolu TLS/SSL s MySQL. Oficiální image WordPressu neposkytuje další konfiguraci, ale vlastní image byla připravena pro vaše pohodlí. V praxi byste požadované změny přidali do své vlastní image.

Tato vlastní image vychází z „oficiální image“ WordPressu v Centru Dockeru. Pro službu Azure Database for MySQL byly v této vlastní imagi provedeny následující změny:

Následující změny byly provedeny pro Redis (bude použito později):

Abyste mohli tuto vlastní image použít, aktualizujete soubor docker-compose-wordpress.yml. V Cloud Shellu otevřete textový editor a změňte image: wordpress možnost použití image: mcr.microsoft.com/azuredocs/multicontainerwordpress. Kontejner databáze už nepotřebujete. Odeberte z konfiguračního souboru oddíly db, environment, depends_on a volumes. Soubor by měl připomínat následující kód:

version: '3.3'

services:
   wordpress:
     image: mcr.microsoft.com/azuredocs/multicontainerwordpress
     ports:
       - "8000:80"
     restart: always

Aktualizace aplikace o novou konfiguraci

Ve službě Cloud Shell změňte příkazem az webapp config container set konfiguraci vícekontejnerové webové aplikace. Nezapomeňte nahradit <název> aplikace názvem webové aplikace, kterou jste vytvořili dříve.

az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml

Po změně konfigurace aplikace se ve službě Cloud Shell zobrazí podobné informace jako v následujícím příkladu:

[
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICB3b3JkcHJlc3M6CiAgICAgaW1hZ2U6IG1zYW5nYXB1L3dvcmRwcmVzcwogICAgIHBvcnRzOgogICAgICAgLSAiODAwMDo4MCIKICAgICByZXN0YXJ0OiBhbHdheXM="
  }
]

Přechod do aplikace

Přejděte do nasazené aplikace na adrese http://<app-name>.azurewebsites.net. Aplikace teď používá službu Azure Database for MySQL.

Ukázková vícekontejnerová aplikace ve službě Web App for Containers

Přidání trvalého úložiště

Ve více kontejnerech se teď provozuje služba Web App for Containers. Pokud ale teď nainstalujete WordPress a později aplikaci restartujete, zjistíte, že instalace WordPressu zmizela. Konfigurace Docker Compose totiž momentálně ukazuje na umístění úložiště uvnitř vašeho kontejneru. Soubory nainstalované do tohoto kontejneru se po restartování aplikace nezachovají. V této části přidáte trvalé úložiště do kontejneru WordPress.

Konfigurace proměnných prostředí

Pokud chcete použít trvalé úložiště, povolíte toto nastavení ve službě App Service. K provedení této změny použijte příkaz az webapp config appsettings set ve službě Cloud Shell. Nastavení aplikace rozlišují velká a malá písmena a jsou oddělená mezerami.

az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE

Po vytvoření nastavení aplikace se ve službě Cloud Shell zobrazí podobné informace jako v následujícím příkladu:

[
  < JSON data removed for brevity. >
  {
    "name": "WORDPRESS_DB_NAME",
    "slotSetting": false,
    "value": "wordpress"
  },
  {
    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
    "slotSetting": false,
    "value": "TRUE"
  }
]

Úprava konfiguračního souboru

V Cloud Shellu otevřete soubor docker-compose-wordpress.yml v textovém editoru.

Možnost volumes mapuje systém souborů na určitý adresář uvnitř kontejneru. ${WEBAPP_STORAGE_HOME} je proměnná prostředí ve službě App Service, která je namapovaná na trvalé úložiště vaší aplikace. Tuto proměnnou prostředí použijete u možnosti volumes, aby se soubory WordPressu nainstalovaly do trvalého úložiště místo do kontejneru. Proveďte v tomto souboru následující změny:

Do sekce wordpress přidejte možnost volumes tak, aby vypadala jako následující kód:

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

Aktualizace aplikace o novou konfiguraci

Ve službě Cloud Shell změňte příkazem az webapp config container set konfiguraci vícekontejnerové webové aplikace. Nezapomeňte nahradit <název> aplikace jedinečným názvem aplikace.

az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml

Po spuštění příkazu se zobrazí výstup podobný následujícímu příkladu:

[
  {
    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
    "slotSetting": false,
    "value": "TRUE"
  },
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo="
  }
]

Přechod do aplikace

Přejděte do nasazené aplikace na adrese http://<app-name>.azurewebsites.net.

Kontejner WordPressu teď používá službu Azure Database for MySQL a trvalé úložiště.

Přidání kontejneru Redis

„Oficiální image“ WordPressu neobsahuje závislosti pro Redis. Tyto závislosti a dodatečná konfigurace potřebná pro použití Redis s WordPressem byly připraveny v této vlastní imagi. V praxi byste požadované změny přidali do své vlastní image.

Tato vlastní image vychází z „oficiální image“ WordPressu v Centru Dockeru. V této vlastní imagi byly provedeny následující změny pro Redis:

Přidejte kontejner Redis na konec konfiguračního souboru tak, aby vypadal jako v následujícím příkladu:

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

Konfigurace proměnných prostředí

Abyste mohli použít Redis, povolíte ve službě App Service nastavení WP_REDIS_HOST. Jde o povinné nastavení, které WordPressu umožňuje komunikovat s hostitelem Redis. K provedení této změny použijte příkaz az webapp config appsettings set ve službě Cloud Shell. Nastavení aplikace rozlišují velká a malá písmena a jsou oddělená mezerami.

az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WP_REDIS_HOST="redis"

Po vytvoření nastavení aplikace se ve službě Cloud Shell zobrazí podobné informace jako v následujícím příkladu:

[
  < JSON data removed for brevity. >
  {
    "name": "WORDPRESS_DB_USER",
    "slotSetting": false,
    "value": "adminuser"
  },
  {
    "name": "WP_REDIS_HOST",
    "slotSetting": false,
    "value": "redis"
  }
]

Aktualizace aplikace o novou konfiguraci

Ve službě Cloud Shell změňte příkazem az webapp config container set konfiguraci vícekontejnerové webové aplikace. Nezapomeňte nahradit <název> aplikace jedinečným názvem aplikace.

az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file compose-wordpress.yml

Po spuštění příkazu se zobrazí výstup podobný následujícímu příkladu:

[
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo="
  }
]

Přechod do aplikace

Přejděte do nasazené aplikace na adrese http://<app-name>.azurewebsites.net.

Dokončete tento postup a nainstalujte WordPress.

Připojení WordPressu k Redis

Přihlaste se ke správci WordPressu. V levém navigačním panelu vyberte Moduly plug-in a pak vyberte Nainstalované moduly plug-in.

Výběr modulů plug-in pro WordPress

Zobrazí se všechny moduly plug-in.

Na stránce s moduly plug-in najděte Mezipaměť objektů Redis a klikněte na Aktivovat.

Aktivace Redis

Klikněte na Nastavení.

Kliknutí na Nastavení

Klikněte na tlačítko Povolit mezipaměť objektů.

Kliknutí na tlačítko Povolit mezipaměť objektů

WordPress se připojí k serveru Redis. Na stejné stránce se zobrazí stav připojení.

WordPress se připojí k serveru Redis. Stav připojení se zobrazí na stejné stránce.

Blahopřejeme, připojili jste WordPress k Redis. Aplikace připravená do produkce teď používá službu Azure Database for MySQL, trvalé úložiště a Redis. Plán služby App Service teď škálovat na více instancí.

Nalezení protokolů kontejneru Dockeru

Pokud při používání více kontejnerů narazíte na problémy, můžete přechodem na adresu https://<app-name>.scm.azurewebsites.net/api/logs/docker zpřístupnit protokoly kontejneru.

Zobrazí se výstup podobný následujícímu příkladu:

[
   {
      "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"
   }
]

Můžete si prohlédnout protokoly pro jednotlivé kontejnery a další protokol pro nadřazený proces. Protokol zobrazíte tak, že do prohlížeče zkopírujete příslušnou hodnotu href.

Vyčištění nasazení

Po spuštění ukázkového skriptu můžete pomocí následujícího příkazu odebrat skupinu prostředků a všechny k ní přidružené prostředky.

az group delete --name myResourceGroup

Další kroky

V tomto kurzu jste se naučili, jak:

  • Převést konfiguraci Docker Compose tak, aby fungovala se službou Web App for Containers
  • Nasadit vícekontejnerovou aplikaci do Azure
  • Přidání nastavení aplikace
  • Použít trvalé úložiště pro kontejnery
  • Připojit se ke službě Azure Database for MySQL
  • Řešení chyb

V dalším kurzu se dozvíte, jak zabezpečit aplikaci pomocí vlastní domény a certifikátu.

Nebo se podívejte na další zdroje informací: