Självstudie: skapa en anpassad avbildning och köra i App Service från ett privat registerTutorial: Build a custom image and run in App Service from a private registry

App Service tillhandahåller inbyggda Docker-avbildningar i Linux med stöd för vissa versioner, till exempel php 7,3 och Node. js 10,14.App Service provides built-in Docker images on Linux with support for specific versions, such as PHP 7.3 and Node.js 10.14. App Service använder Docker-behållar tekniken för att vara värd för både inbyggda avbildningar och anpassade avbildningar som en plattform som en tjänst.App Service uses the Docker container technology to host both built-in images and custom images as a platform as a service. I den här självstudien får du lära dig hur du skapar en anpassad avbildning och kör den i App Service.In this tutorial, you learn how to build a custom image and run it in App Service. Det här mönstret är användbart när de inbyggda avbildningarna inte inkluderar ditt språkval eller när ditt program kräver en specifik konfiguration som inte ingår i de inbyggda avbildningarna.This pattern is useful when the built-in images don't include your language of choice, or when your application requires a specific configuration that isn't provided within the built-in images.

I den här guiden får du lära dig hur man:In this tutorial, you learn how to:

  • Distribuera en anpassad avbildning till ett privat behållar registerDeploy a custom image to a private container registry
  • Kör den anpassade avbildningen i App ServiceRun the custom image in App Service
  • Konfigurera miljövariablerConfigure environment variables
  • Uppdatera och distribuera om avbildningenUpdate and redeploy the image
  • Få åtkomst till diagnostikloggarAccess diagnostic logs
  • Anslut till containern med SSHConnect to the container using SSH

Om du inte har en Azure-prenumeration kan du skapa ettkostnadsfritt konto innan du börjar.If you don't have an Azure subscription, create a free account before you begin.

KravPrerequisites

För att slutföra den här kursen behöver du:To complete this tutorial, you need:

Hämta exempletDownload the sample

Öppna terminalfönstret och kör följande kommando för att klona exempelappens lagringsplats till din lokala dator. Ändra sedan till katalogen som innehåller exempelkoden.In a terminal window, run the following command to clone the sample app repository to your local machine, then change to the directory that contains the sample code.

git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input
cd docker-django-webapp-linux

Skapa avbildningen från Docker-filenBuild the image from the Docker file

På Git-lagringsplatsen tar du en titt på Dockerfile.In the Git repository, take a look at Dockerfile. Den här filen beskriver Python-miljön som krävs för att köra programmet.This file describes the Python environment that is required to run your application. Dessutom konfigurerar avbildningen en SSH-server för säker kommunikation mellan containern och värden.Additionally, the image sets up an SSH server for secure communication between the container and the host.

FROM python:3.4

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
    && apt-get install -y --no-install-recommends openssh-server \
    && echo "$SSH_PASSWD" | chpasswd 

COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/
    
RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222
#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]

Bygg Docker-avbildningen med kommandot docker build.Build the Docker image with the docker build command.

docker build --tag mydockerimage .

Testa att versionen fungerar genom att köra Docker-containern.Test that the build works by running the Docker container. Utfärda kommandot docker run och skicka avbildningens namn och tagg.Issue the docker run command and pass the name and tag of the image to it. Se till att ange porten som använder argumentet -p.Be sure to specify the port using the -p argument.

docker run -p 8000:8000 mydockerimage

Verifiera att webbappen och containern fungerar som de ska genom att bläddra till http://localhost:8000.Verify the web app and container are functioning correctly by browsing to http://localhost:8000.

Testa webbappen lokalt

Använda Azure Cloud ShellUse Azure Cloud Shell

Azure-värdar Azure Cloud Shell, en interaktiv gränssnitts miljö som du kan använda via webbläsaren.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Du kan använda antingen bash eller PowerShell med Cloud Shell för att arbeta med Azure-tjänster.You can use either Bash or PowerShell with Cloud Shell to work with Azure services. Du kan använda Cloud Shell förinstallerade kommandona för att köra koden i den här artikeln utan att behöva installera något i din lokala miljö.You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Starta Azure Cloud Shell:To start Azure Cloud Shell:

AlternativOption Exempel/länkExample/Link
Välj Prova i det övre högra hörnet av ett kodblock.Select Try It in the upper-right corner of a code block. Om du väljer testa kopieras inte koden automatiskt till Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Exempel på hur du provar Azure Cloud Shell
Gå till https://shell.azure.com, eller Välj knappen Starta Cloud Shell för att öppna Cloud Shell i webbläsaren.Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. starta Cloud Shell i ett nytt fönsterLaunch Cloud Shell in a new window
Välj knappen Cloud Shell på Meny raden längst upp till höger i Azure Portal.Select the Cloud Shell button on the menu bar at the upper right in the Azure portal. Cloud Shell-knappen i Azure Portal

För att köra koden i den här artikeln i Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Starta Cloud Shell.Start Cloud Shell.

  2. Kopiera koden genom att klicka på kopierings knappen på ett kodblock.Select the Copy button on a code block to copy the code.

  3. Klistra in koden i Cloud Shell-sessionen genom att välja Ctrl+Shift+V på Windows och Linux eller genom att välja cmd+Shift+V på MacOS.Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Välj RETUR för att köra koden.Select Enter to run the code.

Distribuera appen till AzureDeploy app to Azure

Om du vill skapa en app som använder avbildningen som du nyss har skapat kör du Azure CLI-kommandon som skapar en resurs grupp, push-överför avbildningen och skapar sedan App Service plan-webbappen för att köra den.To create an app that uses the image you just created, you run Azure CLI commands that create a resource group, pushes the image, and then creates the App Service plan web app to run it.

Skapa en resursgruppCreate a resource group

En resursgrupp är en logisk container som Azure-resurser (t.ex. webbappar, databaser och lagringskonton) distribueras och hanteras i.A resource group is a logical container into which Azure resources like web apps, databases, and storage accounts are deployed and managed. Du kan exempelvis välja att ta bort hela resursgruppen i ett enkelt steg längre fram.For example, you can choose to delete the entire resource group in one simple step later.

Skapa i Cloud Shell en resursgrupp med kommandot az group create.In the Cloud Shell, create a resource group with the az group create command. I följande exempel skapas en resursgrupp med namnet myResourceGroup på platsen Europa, västra.The following example creates a resource group named myResourceGroup in the West Europe location. Om du vill se alla platser som stöds för App Service på Linux på Basic-nivån kör du kommandot az appservice list-locations --sku B1 --linux-workers-enabled.To see all supported locations for App Service on Linux in Basic tier, run the az appservice list-locations --sku B1 --linux-workers-enabled command.

az group create --name myResourceGroup --location "West Europe"

Du skapar vanligtvis din resursgrupp och resurserna i en region nära dig.You generally create your resource group and the resources in a region near you.

När kommandot har slutförts visar JSON-utdata resursgruppens egenskaper.When the command finishes, a JSON output shows you the resource group properties.

Skapa ett Azure Container RegistryCreate an Azure Container Registry

I Cloud Shell använder du kommandot az acr create för att skapa ett Azure Container Registry.In the Cloud Shell, use the az acr create command to create an Azure Container Registry.

az acr create --name <azure-container-registry-name> --resource-group myResourceGroup --sku Basic --admin-enabled true

Logga in på Azure Container RegistrySign in to Azure Container Registry

Om du vill skicka en avbildning till registret måste du autentisera med det privata registret.To push an image to the registry, you need to authenticate with the private registry. I Cloud Shell använder du kommandot az acr show för att hämta autentiseringsuppgifterna från registret som du skapade.In the Cloud Shell, use the az acr show command to retrieve the credentials from the registry you created.

az acr credential show --name <azure-container-registry-name>

Utdata visar två lösen ord tillsammans med användar namnet.The output reveals two passwords along with the user name.

{
  "passwords": [
    {
      "name": "password",
      "value": "{password}"
    },
    {
      "name": "password2",
      "value": "{password}"
    }
  ],
  "username": "<registry-username>"
}

Från det lokala terminalfönstret loggar du in på Azure Container Registry med kommandot docker login, som du ser i följande exempel.From your local terminal window, sign in to the Azure Container Registry using the docker login command, as shown in the following example. Ersätt <Azure-Container-Registry-name > och <registry-username > med värden för registret.Replace <azure-container-registry-name> and <registry-username> with values for your registry. När du uppmanas till det skriver du ett av lösen orden från föregående steg.When prompted, type in one of the passwords from the previous step.

docker login <azure-container-registry-name>.azurecr.io --username <registry-username>

Bekräfta att inloggningen lyckades.Confirm that the login succeeds.

Push-överför avbildningen till Azure Container RegistryPush image to Azure Container Registry

Tagga den lokala avbildningen för Azure Container Registry.Tag your local image for the Azure Container Registry. Ett exempel:For example:

docker tag mydockerimage <azure-container-registry-name>.azurecr.io/mydockerimage:v1.0.0

Push-överför avbildningen med kommandot docker push.Push the image by using the docker push command. Tagga avbildningen med namnet på registret följt av avbildningens namn och tagg.Tag the image with the name of the registry, followed by your image name and tag.

docker push <azure-container-registry-name>.azurecr.io/mydockerimage:v1.0.0

Kontrol lera att push-åtgärden har slutförts i Cloud Shell.Back in the Cloud Shell, verify that the push is successful.

az acr repository list -n <azure-container-registry-name>

Du bör få följande utdata.You should get the following output.

[
  "mydockerimage"
]

Skapa apptjänstplanCreate App Service plan

Skapa i Cloud Shell en App Service-plan i resursgruppen med kommandot az appservice plan create.In the Cloud Shell, create an App Service plan in the resource group with the az appservice plan create command.

I följande exempel skapas en App Service plan med namnet myAppServicePlan på den kostnads fria pris nivån (--sku F1) och i en Linux-behållare (--is-linux).The following example creates an App Service plan named myAppServicePlan in the Free pricing tier (--sku F1) and in a Linux container (--is-linux).

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

När App Service-planen har skapats visas information av Azure CLI. Informationen ser ut ungefär som i följande exempel:When the App Service plan has been created, the Azure CLI shows information similar to the following example:

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "linux",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Skapa webbappCreate web app

Skapa i Cloud Shell en webbapp i myAppServicePlan App Service-planen med kommandot az webapp create.In the Cloud Shell, create a web app in the myAppServicePlan App Service plan with the az webapp create command. Ersätt <app-name > med ett unikt namn på appen och <Azure-Container-registry-Name > med ditt register namn.Replace <app-name> with a unique app name, and <azure-container-registry-name> with your registry name.

az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --deployment-container-image-name <azure-container-registry-name>.azurecr.io/mydockerimage:v1.0.0

När webbappen har skapats visar Azure CLI utdata liknande den i följande exempel:When the web app has been created, the Azure CLI shows output similar to the following example:

{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Konfigurera autentiseringsuppgifter för registret i en webbappConfigure registry credentials in web app

För att App Service ska kunna hämta den privata avbildningen behöver den information om registret och avbildningen.For App Service to pull the private image, it needs information about your registry and image. I Cloud Shell anger du dem med kommandot az webapp config container set .In the Cloud Shell, provide them with the az webapp config container set command. Ersätt <app-name > , <Azure-Container-registry-name > , <registry-username > och <Password > .Replace <app-name>, <azure-container-registry-name>, <registry-username>, and <password>.

az webapp config container set --name <app-name> --resource-group myResourceGroup --docker-custom-image-name <azure-container-registry-name>.azurecr.io/mydockerimage:v1.0.0 --docker-registry-server-url https://<azure-container-registry-name>.azurecr.io --docker-registry-server-user <registry-username> --docker-registry-server-password <password>

Anteckning

När du använder ett annat register än Docker Hub måste --docker-registry-server-url formateras som https:// följt av registrets fullständigt kvalificerade domän namn.When using a registry other than Docker Hub, --docker-registry-server-url must be formatted as https:// followed by the fully qualified domain name of the registry.

Konfigurera miljövariablerConfigure environment variables

De flesta Docker-avbildningar använder anpassade miljövariabler, till exempel en annan port än 80.Most Docker images use custom environment variables, such as a port other than 80. Du anger App Service om porten som avbildningen använder med hjälp av inställningen WEBSITES_PORT app.You tell App Service about the port that your image uses by using the WEBSITES_PORT app setting. GitHub-sidan för Python-exemplet i den här självstudien visar att du behöver ställa in WEBSITES_PORT8000.The GitHub page for the Python sample in this tutorial shows that you need to set WEBSITES_PORT to 8000.

Om du vill konfigurera appinställningar använder du kommandot az webapp config appsettings set i Cloud Shell.To set app settings, use the az webapp config appsettings set command in the Cloud Shell. Appinställningar är skifteslägeskänsliga och avgränsas med blanksteg.App settings are case-sensitive and space-separated.

az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_PORT=8000

Testa webbappenTest the web app

Verifiera att webbappen fungerar genom att bläddra till den (http://<app-name>.azurewebsites.net).Verify that the web app works by browsing to it (http://<app-name>.azurewebsites.net).

Anteckning

Första gången du öppnar appen kan det ta lite tid eftersom App Service måste hämta hela avbildningen.The first time you access the app, it may take some time because App Service needs to pull the entire image. Om tids gränsen för webbläsaren uppdateras, behöver du bara uppdatera sidan.If the browser times out, just refresh the page.

Testa webbappens portkonfiguration

Ändra och distribuera om appenChange web app and redeploy

I din lokala Git-lagringsplats öppnar du app/templates/app/index.html.In your local Git repository, open app/templates/app/index.html. Leta reda på det första HTML-elementet och ändra det.Locate the first HTML element and change it to.

<nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
      <div class="navbar-header">
        <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a>
      </div>
    </div>
  </nav>

När du har ändrat Python-filen och sparat den måste du återskapa och push-överföra den nya Docker-avbildningen.Once you've modified the Python file and saved it, you must rebuild and push the new Docker image. Starta sedan om webbappen för att ändringarna ska börja gälla.Then restart the web app for the changes to take effect. Använd samma kommandon som du tidigare har använt i den här självstudien.Use the same commands that you have previously used in this tutorial. Du kan referera till att bygga avbildningen från Docker-filen och push-avbildningen till Azure Container Registry.You can refer to Build the image from the Docker file and Push image to Azure Container Registry. Testa webbappen genom att följa anvisningarna i Testa webbappen.Test the web app by following the instructions in Test the web app.

Få åtkomst till diagnostikloggarAccess diagnostic logs

Du kan komma åt konsolen loggar som genereras från i behållaren.You can access the console logs generated from inside the container. Först aktiverar loggning genom att köra följande kommando i Cloud Shell:First, turn on container logging by running the following command in the Cloud Shell:

az webapp log config --name <app-name> --resource-group myResourceGroup --docker-container-logging filesystem

När containerloggning har aktiverats kör du följande kommando för att visa loggströmmen:Once container logging is turned on, run the following command to see the log stream:

az webapp log tail --name <app-name> --resource-group myResourceGroup

Om du inte ser konsolloggarna omedelbart kan du titta efter igen efter 30 sekunder.If you don't see console logs immediately, check again in 30 seconds.

Anteckning

Du kan även Granska loggfilerna från webbläsaren https://<app-name>.scm.azurewebsites.net/api/logs/docker.You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Om du vill stoppa loggströmningen när som helst, Skriv Ctrl + C.To stop log streaming at any time, type Ctrl+C.

Aktivera SSH-anslutningarEnable SSH connections

SSH möjliggör säker kommunikation mellan en container och en klient.SSH enables secure communication between a container and a client. Din anpassade avbildning måste vara konfigurerad för att du ska kunna aktivera SSH-anslutningen till din behållare.To enable SSH connection to your container, your custom image must be configured for it. Låt oss ta en titt på den exempel lagrings plats som redan har den konfiguration som krävs.Let's take a look at the sample repository that already has the necessary configuration.

  • I Dockerfileinstallerar följande kod SSH-servern och anger också inloggnings uppgifterna.In the Dockerfile, the following code installs the SSH server and also sets the sign-in credentials.

    ENV SSH_PASSWD "root:Docker!"
    RUN apt-get update \
            && apt-get install -y --no-install-recommends dialog \
            && apt-get update \
      && apt-get install -y --no-install-recommends openssh-server \
      && echo "$SSH_PASSWD" | chpasswd 
    

    Anteckning

    Den här konfigurationen tillåter inga externa anslutningar till containern.This configuration does not allow external connections to the container. SSH är endast tillgängligt via webbplatsen för Kudu/SCM.SSH is available only through the Kudu/SCM Site. Kudu/SCM-webbplatsen autentiseras med ditt Azure-konto.The Kudu/SCM site is authenticated with your Azure account.

  • Dockerfile kopierar sshd_config -filen i lagrings platsen till katalogen /etc/ssh/ .The Dockerfile copies the sshd_config file in the repository to the /etc/ssh/ directory.

    COPY sshd_config /etc/ssh/
    
  • Dockerfile exponerar port 2222 i behållaren.The Dockerfile exposes port 2222 in the container. Det är en intern port som endast är åtkomlig via containrar inom ett privat virtuellt nätverks nätverksbrygga.It is an internal port accessible only by containers within the bridge network of a private virtual network.

    EXPOSE 8000 2222
    
  • Inmatnings skriptet startar SSH-servern.The entry script starts the SSH server.

    #!/bin/bash
    service ssh start
    

Öppna SSH-anslutning till containerOpen SSH connection to container

SSH-anslutningen är bara tillgänglig via kudu-webbplatsen, som är tillgänglig på https://<app-name>.scm.azurewebsites.net.SSH connection is available only through the Kudu site, which is accessible at https://<app-name>.scm.azurewebsites.net.

Anslut genom att gå till https://<app-name>.scm.azurewebsites.net/webssh/host och logga in med ditt Azure-konto.To connect, browse to https://<app-name>.scm.azurewebsites.net/webssh/host and sign in with your Azure account.

Du omdirigeras därefter till en sida som visar en interaktiv konsol.You are then redirected to a page displaying an interactive console.

Du kanske vill verifiera att vissa program körs i containern.You may wish to verify that certain applications are running in the container. Om du vill inspektera containern och verifiera körningsprocesserna utfärdar du kommandot top i kommandotolken.To inspect the container and verify running processes, issue the top command at the prompt.

top

Kommandot top tillgängliggör alla körningsprocesser i en container.The top command exposes all running processes in a container.

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 1 root      20   0  945616  35372  15348 S  0.0  2.1   0:04.63 node
20 root      20   0   55180   2776   2516 S  0.0  0.2   0:00.00 sshd
42 root      20   0  944596  33340  15352 S  0.0  1.9   0:05.80 node /opt/s+
56 root      20   0   59812   5244   4512 S  0.0  0.3   0:00.93 sshd
58 root      20   0   20228   3128   2664 S  0.0  0.2   0:00.00 bash
62 root      20   0   21916   2272   1944 S  0.0  0.1   0:03.15 top
63 root      20   0   59812   5344   4612 S  0.0  0.3   0:00.03 sshd
65 root      20   0   20228   3140   2672 S  0.0  0.2   0:00.00 bash
71 root      20   0   59812   5380   4648 S  0.0  0.3   0:00.02 sshd
73 root      20   0   20228   3160   2696 S  0.0  0.2   0:00.00 bash
77 root      20   0   21920   2304   1972 R  0.0  0.1   0:00.00 top

Grattis!Congratulations! Du har konfigurerat en anpassad Linux-behållare i App Service.You've configured a custom Linux container in App Service.

Rensa distributionClean up deployment

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.After the sample script has been run, the following command can be used to remove the resource group and all resources associated with it.

az group delete --name myResourceGroup

Nästa stegNext steps

Vad du lärt dig:What you learned:

  • Distribuera en anpassad avbildning till ett privat behållar registerDeploy a custom image to a private container registry
  • Kör den anpassade avbildningen i App ServiceRun the custom image in App Service
  • Konfigurera miljövariablerConfigure environment variables
  • Uppdatera och distribuera om avbildningenUpdate and redeploy the image
  • Få åtkomst till diagnostikloggarAccess diagnostic logs
  • Anslut till containern med SSHConnect to the container using SSH

Gå vidare till nästa självstudie där du får lära dig att mappa ett anpassat DNS-namn till appen.Advance to the next tutorial to learn how to map a custom DNS name to your app.

Eller kolla ut andra resurser:Or, check out other resources: