Självstudier: Skapa en app med flera containrar (förhandsversion) med Web App for Containers
Kommentar
Sidovagnscontainrar (förhandsversion) lyckas med appar med flera containrar i App Service. Kom igång genom att läsa Självstudie: Konfigurera en sidovagnscontainer för anpassad container i Azure App Service (förhandsversion).
Med Web App for Containers får du ett flexibelt sätt att använda Docker-avbildningar. I den här självstudien lär du dig hur du skapar en app med flera container med hjälp av WordPress och MySQL. Du genomför den här självstudiekursen i Cloud Shell men du kan även köra dessa kommandon lokalt med kommandoradsgränssnittet Azure CLI (2.0.32 eller senare).
I den här självstudien lär du dig att:
- Konvertera en Docker Compose-konfiguration så att den fungerar med Web App for Containers
- Distribuera en app med flera containrar till Azure
- Lägga till appinställningar
- Använda beständig lagring för containrarna
- Ansluta till Azure Database for MySQL
- Felsöka fel
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Förutsättningar
För att slutföra den här självstudien behöver du erfarenhet av Docker Compose.
Hämta exemplet
I den här självstudien använder du skrivfilen från Docker, men du ändrar den så att den inkluderar Azure Database for MySQL, beständig lagring och Redis. Konfigurationsfilen finns på Azure Samples (Azure-exempel). Observera att i exemplet nedan är det ett alternativ som depends_on
inte stöds och ignoreras. Mer information om konfigurationsalternativ som stöds finns i Alternativ för 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:
Skapa en självstudiekatalog i Cloud Shell och byt sedan till den.
mkdir tutorial
cd tutorial
Kör sedan följande kommando för att klona lagringsplatsen för exempelprogrammet till din självstudiekatalog. Ändra sedan till katalogen multicontainerwordpress
.
git clone https://github.com/Azure-Samples/multicontainerwordpress
cd multicontainerwordpress
Skapa en resursgrupp
En resursgrupp är en logisk container där Azure-resurser, till exempel webbappar, databaser och lagringskonton, distribueras och hanteras. Du kan exempelvis välja att ta bort hela resursgruppen i ett enkelt steg längre fram.
Skapa i Cloud Shell en resursgrupp med kommandot az group create
. I följande exempel skapas en resursgrupp med namnet myResourceGroup på platsen South Central US (USA, södra centrala). Om du vill se alla platser som stöds för App Service på Linux på Standard-nivån kör du kommandot az appservice list-locations --sku S1 --linux-workers-enabled
.
az group create --name myResourceGroup --location "South Central US"
Du skapar vanligtvis din resursgrupp och resurserna i en region nära dig.
När kommandot har slutförts visar JSON-utdata resursgruppens egenskaper.
Skapa en Azure App Service-plan
Skapa i Cloud Shell en App Service-plan i resursgruppen med kommandot az appservice plan create
.
I följande exempel skapas en App Service-plan med namnet myAppServicePlan
i prisnivån Standard (--sku S1
) och i en Linux-container (--is-linux
).
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku S1 --is-linux
När App Service-planen har skapats visas information av Cloud Shell. Informationen ser ut ungefär som i följande exempel:
{ "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 med WordPress- och MySQL-containrar
Skapa en Docker Compose-app
I Cloud Shell skapar du en webbapp med flera containrar i myAppServicePlan
App Service-planen med kommandot az webapp create. Glöm inte att ersätta <appnamn> med ett unikt appnamn.
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml
När webbappen har skapats visar en Cloud Shell utdata liknande den i följande exempel:
{ "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. > }
Bläddra till appen
Bläddra till den distribuerade appen på (http://<app-name>.azurewebsites.net
). Det kan ta några minuter att läsa in appen. Om du får ett fel väntar du ytterligare ett par minuter och uppdaterar sedan webbläsaren. Om du har problem och vill felsöka kan du granska containerloggarna.
Grattis! Du har skapat en app med flera containrar i Web App for Containers. Därefter konfigurerar du appen för att använda Azure Database for MySQL. Installera inte WordPress just nu.
Ansluta till produktionsdatabasen
Det är inte rekommenderat att använda databascontainrar i en produktionsmiljö. Lokala containrar är inte skalbara. I stället använder du Azure Database for MySQL som kan skalas.
Skapa en Azure Database för MySQL-server
Skapa en Azure Database for MySQL-server med kommandot az mysql server create
.
I följande kommando ersätter du mySQL-servernamnet där platshållaren mysql-server-name> visas< (giltiga tecken är a-z
, 0-9
och -
). Det här namnet är en del av MySQL-serverns värdnamn (<mysql-server-name>.database.windows.net
) och den måste vara globalt unik.
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
Det kan ta några minuter att skapa servern. När MySQL-servern skapas visar Cloud Shell information som ser ut ungefär så här:
{ "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", ... }
Konfigurera serverbrandväggen
Skapa en brandväggsregel för MySQL-servern för att tillåta klientanslutningar med hjälp av kommandot az mysql server firewall-rule create
. När både start-IP och slut-IP har angetts till 0.0.0.0 öppnas brandväggen endast för andra Azure-resurser.
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
Dricks
Du kan begränsa brandväggsregeln ännu mer genom att endast använda de utgående IP-adresser som används av din app.
Skapa WordPress-databasen
az mysql db create --resource-group myResourceGroup --server-name <mysql-server-name> --name wordpress
När databasen skapas visar Cloud Shell information som ser ut ungefär så här:
{ "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" }
Konfigurera databasvariabler i WordPress
För att ansluta WordPress-appen till den nya MySQL-servern konfigurerar du ett par WordPress-specifika miljövariabler, inklusive sökvägen för certifikatutfärdare för SSL som definieras av MYSQL_SSL_CA
. Baltimore CyberTrust Root från DigiCert tillhandahålls i den anpassade avbildningen nedan.
Du kan göra dessa ändringar med hjälp av kommandot az webapp config appsettings set i Cloud Shell. Appinställningar är skifteslägeskänsliga och avgränsas med blanksteg.
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"
När appinställningen har skapats visar Cloud Shell information som ser ut ungefär som i följande exempel:
[ { "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" } ]
Mer information om miljövariabler finns i Konfigurera miljövariabler.
Använda en anpassad avbildning för MySQL TLS/SSL och andra konfigurationer
Som standard används TLS/SSL av Azure Database for MySQL. WordPress kräver ytterligare konfiguration för att använda TLS/SSL med MySQL. WordPress "officiella avbildning" ger inte den ytterligare konfigurationen, men en anpassad avbildning har förberetts för din bekvämlighet. I vanliga fall skulle du ha lagt till önskade ändringar i en egen avbildning.
Den anpassade avbildningen är baserad på den officiella avbildningen av WordPress från Docker Hub. Följande ändringar har gjorts i den här anpassade avbildningen för Azure Database for MySQL:
- Lägger till Baltimore Cyber Trust Root-certifikatfilen för SSL i MySQL.
- Använder appinställning för MySQL SSL-certifikatutfärdarcertifikat i WordPress wp-config.php.
- Lägger till WordPress-definition för MYSQL_CLIENT_FLAGS som behövs för MySQL SSL.
Följande ändringar har gjorts för Redis (används i ett senare avsnitt):
- Lägger till PHP-tillägg för Redis v4.0.2.
- Lägger till uppackning som behövs för extrahering av filer.
- Lägger till WordPress-pluginprogrammet Redis Object Cache 1.3.8.
- Använder appinställningen för Redis-värdnamnet i WordPress wp-config.php.
Om du vill använda den anpassade avbildningen uppdaterar du filen docker-compose-wordpress.yml. I Cloud Shell öppnar du en textredigerare och ändrar image: wordpress
till att använda image: mcr.microsoft.com/azuredocs/multicontainerwordpress
. Du behöver inte längre databascontainern. Ta bort avsnittet db
, environment
, depends_on
och volumes
från konfigurationsfilen. Din fil ska se ut som följande kod:
version: '3.3'
services:
wordpress:
image: mcr.microsoft.com/azuredocs/multicontainerwordpress
ports:
- "8000:80"
restart: always
Uppdatera appen med ny konfiguration
I Cloud Shell konfigurerar du om webappen med flera containrar med kommandot az webapp config container set. Glöm inte att ersätta <appnamn> med namnet på webbappen som du skapade tidigare.
az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml
När webbappen har konfigurerats om visar Cloud Shell information liknande den i följande exempel:
[ { "name": "DOCKER_CUSTOM_IMAGE_NAME", "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICB3b3JkcHJlc3M6CiAgICAgaW1hZ2U6IG1zYW5nYXB1L3dvcmRwcmVzcwogICAgIHBvcnRzOgogICAgICAgLSAiODAwMDo4MCIKICAgICByZXN0YXJ0OiBhbHdheXM=" } ]
Bläddra till appen
Bläddra till den distribuerade appen på (http://<app-name>.azurewebsites.net
). Appen använder nu Azure Database for MySQL.
Lägga till beständig lagring
Din app med flera containrar körs nu i Web App for Containers. Men om du installerar WordPress nu och startar om appen senare märker du att WordPress-installationen är borta. Det beror på att Docker Compose-konfigurationen för närvarande pekar på en lagringsplats inne i containern. Filerna som installeras i containern bevaras inte när appen startas om. I det här avsnittet lägger du till beständig lagring i WordPress-containern.
Konfigurera miljövariabler
Om du vill använda beständig lagring aktiverar du den här inställningen i App Service. Du kan göra denna ändring med hjälp av kommandot az webapp config appsettings set i Cloud Shell. Appinställningar är skifteslägeskänsliga och avgränsas med blanksteg.
az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE
När appinställningen har skapats visar Cloud Shell information som ser ut ungefär som i följande exempel:
[ < JSON data removed for brevity. > { "name": "WORDPRESS_DB_NAME", "slotSetting": false, "value": "wordpress" }, { "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE", "slotSetting": false, "value": "TRUE" } ]
Ändra konfigurationsfilen
Öppna filen docker-compose-wordpress.yml
i en textredigerare i Cloud Shell.
Alternativet volumes
mappar filsystemet till en katalog i containern. ${WEBAPP_STORAGE_HOME}
är en miljövariabel i App Service som är mappad till beständig lagring för din app. Du använder miljövariabeln i volymalternativet så att WordPress-filerna installeras i den beständiga lagringen i stället för containern. Gör följande ändringar i filen:
I avsnittet wordpress
lägger du till ett volumes
-alternativ så att det ser ut som i följande kod:
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
Uppdatera appen med ny konfiguration
I Cloud Shell konfigurerar du om webappen med flera containrar med kommandot az webapp config container set. Glöm inte att ersätta <appnamn> med ett unikt appnamn.
az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml
När kommandot körs visas utdata som ser ut ungefär som i följande exempel:
[ { "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE", "slotSetting": false, "value": "TRUE" }, { "name": "DOCKER_CUSTOM_IMAGE_NAME", "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo=" } ]
Bläddra till appen
Bläddra till den distribuerade appen på (http://<app-name>.azurewebsites.net
).
Nu används Azure Database for MySQL och beständig lagring i WordPress-containern.
Lägga till Redis-container
Den officiella avbildningen för WordPress innehåller inte beroenden för Redis. Dessa beroenden och ytterligare konfiguration som behövs för att använda Regis med WordPress har förberetts för dig i den här anpassade avbildningen. I vanliga fall skulle du ha lagt till önskade ändringar i en egen avbildning.
Den anpassade avbildningen är baserad på den officiella avbildningen av WordPress från Docker Hub. Följande ändringar har gjorts i den här anpassade avbildningen för Redis:
- Lägger till PHP-tillägg för Redis v4.0.2.
- Lägger till uppackning som behövs för extrahering av filer.
- Lägger till WordPress-pluginprogrammet Redis Object Cache 1.3.8.
- Använder appinställningen för Redis-värdnamnet i WordPress wp-config.php.
Lägg till Redis-containern i slutet av konfigurationsfilen som i följande exempel:
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
Konfigurera miljövariabler
Aktivera inställningen WP_REDIS_HOST
i App Service så att du kan använda Redis. Det här är en obligatorisk inställning för att WordPress ska kunna kommunicera med Redis-värden. Du kan göra denna ändring med hjälp av kommandot az webapp config appsettings set i Cloud Shell. Appinställningar är skifteslägeskänsliga och avgränsas med blanksteg.
az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WP_REDIS_HOST="redis"
När appinställningen har skapats visar Cloud Shell information som ser ut ungefär som i följande exempel:
[ < JSON data removed for brevity. > { "name": "WORDPRESS_DB_USER", "slotSetting": false, "value": "adminuser" }, { "name": "WP_REDIS_HOST", "slotSetting": false, "value": "redis" } ]
Uppdatera appen med ny konfiguration
I Cloud Shell konfigurerar du om webappen med flera containrar med kommandot az webapp config container set. Glöm inte att ersätta <appnamn> med ett unikt appnamn.
az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file compose-wordpress.yml
När kommandot körs visas utdata som ser ut ungefär som i följande exempel:
[ { "name": "DOCKER_CUSTOM_IMAGE_NAME", "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo=" } ]
Bläddra till appen
Bläddra till den distribuerade appen på (http://<app-name>.azurewebsites.net
).
Utför stegen och installera WordPress.
Ansluta WordPress till Redis
Logga in på WordPress-administratören. I det vänstra navigeringsfältet väljer du Plugin-program och sedan Installerade plugin-program.
Visa alla plugin-program här
På sidan för plugin-program letar du rätt på Redis Object Cache och klickar på Aktivera.
Klicka på Inställningar.
Klicka på Enable Object Cache (Aktivera Object Cache).
WordPress ansluter till Redis-servern. Anslutningens status visas på samma sida.
Gratulerar! Du har anslutit WordPress till Redis. Den produktionsklara appen använder nu Azure Database for MySQL, beständig lagring och Redis. Nu kan du skala ut din App Service-plan till flera instanser.
Hitta loggar för Docker-containrar
Om du stöter på problem när du använder flera containrar kan du se loggar för containrarna genom att gå till: https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
Utdata ser ut ungefär som i följande exempel:
[ { "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" } ]
Du ser en logg för varje container och ytterligare en logg för den överordnade processen. Kopiera respektive href
-värde till webbläsaren om du vill visa loggen.
Rensa distribution
När exempelskriptet har körts kan följande kommando användas för att ta bort resursgruppen och alla resurser som är kopplade till den.
az group delete --name myResourceGroup
Nästa steg
I den här självstudiekursen lärde du dig att:
- Konvertera en Docker Compose-konfiguration så att den fungerar med Web App for Containers
- Distribuera en app med flera containrar till Azure
- Lägga till appinställningar
- Använda beständig lagring för containrarna
- Ansluta till Azure Database for MySQL
- Felsöka fel
Gå vidare till nästa självstudie för att lära dig hur du skyddar din app med en anpassad domän och ett certifikat.
Eller kolla in andra resurser: