Kurz: Vytvoření vícekontejnerové aplikace (verze Preview) ve službě Web App for Containers
Poznámka
Vícenásobný kontejner je ve verzi 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 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 pro vytvoření z Docker, 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. 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 prostředků
Skupina prostředků je logický kontejner, ve kterém 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.
V Cloud Shell vytvořte skupinu prostředků pomocí az group create příkazu. 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
V Cloud Shell vytvořte pomocí příkazu plán App Service ve skupině prostředků az appservice plan create .
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 <app-name> 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.

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
Pomocí příkazu vytvořte server Azure Database for MySQL az mysql server create .
V následujícím příkazu nahraďte název serveru MySQL, kde se zobrazí zástupný symbol < MySQL-Server-Name> (platné znaky jsou a-z , 0-9 a - ). 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
Vytvořte pravidlo brány firewall pro server MySQL, aby bylo možné připojit klienta pomocí az mysql server firewall-rule create příkazu. 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@<mysql-server-name>" 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@<mysql-server-name>"
},
{
"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 MySQL TLS/SSL 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í TLS/SSL s MySQL. Oficiální image WordPressu neposkytuje další konfiguraci, ale vlastní image je připravená 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:
- Do MySQL byl přidán soubor kořenového certifikátu Baltimore Cyber Trust pro SSL.
- V souboru wp-config.php WordPressu se používá nastavení aplikace pro certifikát certifikační autority MySQL SSL.
- Byla přidána definice WordPressu pro MYSQL_CLIENT_FLAGS potřebná pro MySQL SSL.
Následující změny byly provedeny pro Redis (bude použito později):
- Bylo přidáno rozšíření PHP pro Redis verze 4.0.2.
- Byl přidán program unzip potřebný k rozbalení souborů.
- Byl přidán modul plug-in Mezipaměť objektů Redis 1.3.8 pro WordPress.
- V souboru wp-config.php WordPressu se používá nastavení aplikace pro název hostitele Redis.
Abyste mohli tuto vlastní image použít, aktualizujete soubor docker-compose-wordpress.yml. Ve službě Cloud Shell otevřete textový editor nano zadáním příkazu nano docker-compose-wordpress.yml. image: wordpress změňte tak, aby se používalo 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
Uložte změny a editor nano zavřete. K uložení použijte příkaz ^O a k zavření příkaz ^X.
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 <app-name> 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.

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 do svého kontejneru WordPress trvalé úložiště .
Konfigurace proměnných prostředí
Pokud chcete použít trvalé úložiště, povolte toto nastavení v rámci 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
Ve službě Cloud Shell otevřete textový editor nano zadáním příkazu nano docker-compose-wordpress.yml.
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 <app-name> 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:
- Bylo přidáno rozšíření PHP pro Redis verze 4.0.2.
- Byl přidán program unzip potřebný k rozbalení souborů.
- Byl přidán modul plug-in Mezipaměť objektů Redis 1.3.8 pro WordPress.
- V souboru wp-config.php WordPressu se používá nastavení aplikace pro název hostitele 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@<mysql-server-name>"
},
{
"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 <app-name> 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 WordPress. V levém navigačním panelu vyberte moduly plug-in a pak vyberte nainstalované moduly plug-in.

Zobrazí se všechny moduly plug-in.
Na stránce s moduly plug-in najděte Mezipaměť objektů Redis a klikněte na Aktivovat.

klikněte na Nastavení.

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

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

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. Kapacitu plánu služby App Service teď můžete horizontálně navýšit 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:
- 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
Přejděte k dalšímu kurzu, kde se dozvíte, jak namapovat vlastní název DNS na svou aplikaci.
Nebo si prohlédněte další zdroje informací: