Deployment av Python Flask app Container

By . Latest revision .

Vi tar en titt på hur vi kan driftsätta vårt Python/Flask API i en Docker Container.

Vi ska nu gå igenom en laboration med momenten

Skapa ett konto på Docker Hub
Skapa en container med Docker som innehåller en Python app
Publicera containern på Docker Hub
Skapa en Azure Web App
Publicera containern i webappen

En grundförutsättning för laborationen är att Docker installeras, du kan läsa om installationen här.

#Skapa en Python Flask app Docker Container

Steg 1: enligt Docker Hub’s instruktion Steg 1 - Skapa ett Docker Id

Steg 2: enligt Docker Hub’s instruktion Steg 2 - Skapa ett repository

Steg 3: enligt Docker Hub’s instruktion Steg 3 - Installera Docker på din dator

Steg 4: Lägg till en Dockerfile i din katalog där du har ditt Python API. Dockerfile bör innehålla nedanstående.

# Skapar ett lager/sätter en basimage för Python 3.8 Detta lager är read-only.
FROM python:3.8

# Sätt vilken folder som är working directory i containern
WORKDIR /code
COPY . .
RUN pip install -r requirements.txt

EXPOSE 5000

# Command att köra när containern startar
CMD [ "python", "./app.py" ]

I ditt API lägger du även till att vi vill starta igång appen längst ner. Vi gör det med if __name__ == "__main__": konstruktionen enligt:

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

När detta är gjort hoppar vi över punkt 1 men följer punkt 2-5 enligt Docker Hub’s instruktion Steg 4 - Bygg och publicera en Docker image till Docker Hub från din dator.

Innan du går vidare försäkrar du dig om att docker run fungerar lokalt på din dator. Är svårt att felsöka på Azure så smidigare att göra lokalt. Du kan göra det med följande kommandon.

$ docker build -t <docker hub användarenamn>/<image namn du väljer själv> .
$ docker run -p 5050:5000 <docker hub användarenamn>/<image namn du väljer själv>

Du bör nu kunna komma åt ditt Flask API på url’n http://localhost:5050. Konstruktionen -p 5050:5000 gör så att vi mappar port 5000 inne i docker containern till port 5050 utanför.

Steg 5: Skapa en Azure Web App för Docker image

Gå till https://portal.azure.com och skapa en ny WebApp.

Basics

  • Välj denna gången att publicera Docker Container istället för Code.

  • Välj Linux som Operating System

  • Om du redan har en Linux AppServicePlan så återanvänd den.

  • Gå vidare till Next: Docker >

Docker basics

Docker

  • Välj att publicera en Single Container

  • Image Source är Docker Hub där din image är publicerad

  • Access Type är den access type du valde att ditt repository skulle ha i steg 2, labben säger Private.

  • Username och Password är ditt Docker Id och lösenord från steg 1.

  • Image and tag följer strukturen {docker id}/{reponamn}:{tag} där taggen latest ger senast publicerade imagen.

  • Gå vidare till Review + Create

  • Om allt valideras OK så gå vidare med Create

Docker basics

Uppstart

Nu skapas webapp-resursen upp och när det är klart kan du gå in på webappen i portal.azure.com och titta i fliken Deployment Center (Preview) för att följa hur din Docker image hämtas från Docker Hub och startas upp.

När din docker image är initialiserad och redo att ta emot requests så kan du surfa till den och kontrollera att allt funkar som förväntat.

Docker basics

Skulle det vara att något inte fungerar på grund av någon konfiguration som var fel då du skapade din webapp så går det att ändra under Deployment Center (Preview) -> Settings

Docker basics

Sammanfattning

Du har nu skapat ett Docker Hub repository, publicerat en Docker image i repot, och använt imagen för att publicera en python app till en Azure Web App.

Genom att skapa en Docker image kan du vara säker på att den Docker image som du skapar och testar lokalt kommer fungera på samma sätt även på andra platser och miljöer.

#Revision history

  • 2021-12-18: (A, efo) Skapad inför VT2022.

Document source.