Přehled kontejnerových aplikací Pythonu v Azure

Tento článek popisuje, jak přejít z kódu projektu Pythonu (například webové aplikace) do nasazeného kontejneru Dockeru v Azure. Probíráme obecný proces kontejnerizace, možnosti nasazení kontejnerů v Azure a konfiguraci kontejnerů specifických pro Python v Azure.

Povaha kontejnerů Dockeru je, že vytvoření image Dockeru z kódu a nasazení této image do kontejneru v Azure je podobné napříč programovacími jazyky. Aspekty specifické pro jazyk – Python v tomto případě – jsou v konfiguraci během procesu kontejnerizace v Azure, zejména struktury souboru Dockerfile a konfigurace podporující webové architektury Pythonu, jako jsou Django, Flask a FastAPI.

Scénáře pracovních postupů kontejnerů

Pro vývoj kontejnerů v Pythonu jsou některé typické pracovní postupy pro přechod z kódu do kontejneru:

Scénář Popis Workflow
Dev Vytváření imagí Dockeru v Pythonu ve vývojovém prostředí Kód: Kód git clone do vývojového prostředí (s nainstalovaným Dockerem)

Sestavení: Použijte Docker CLI, VS Code (s rozšířeními), PyCharm (s modulem plug-in). Popsané v části Práce s imagemi a kontejnery Dockeru v Pythonu

Test: Ve vývojovém prostředí v kontejneru Dockeru.

Nabízené oznámení: Do registru, jako je Azure Container Registry, Docker Hub nebo privátní registr.

Nasazení: Do služby Azure z registru.
Hybridní model Z vývojového prostředí sestavte image Dockeru v Pythonu v Azure. Kód: Kód git clone do vývojového prostředí (není nutný k instalaci Dockeru).

Sestavení: VS Code (s rozšířeními), Azure CLI.

Nasdílení změn: do služby Azure Container Registry

Nasazení: Do služby Azure z registru.
Azure Vše v cloudu; Pomocí Azure Cloud Shellu sestavte kód imagí Dockeru v Pythonu z úložiště GitHub. Kód: Úložiště Git Clone GitHub do Azure Cloud Shellu

Sestavení: V Azure Cloud Shellu použijte Azure CLI nebo Docker CLI.

Nabízená oznámení: Do registru, jako je Azure Container Registry, Docker Hub nebo privátní registr.

Nasazení: Do služby Azure z registru.

Konečným cílem těchto pracovních postupů je mít kontejner spuštěný v jednom z prostředků Azure podporujících kontejnery Dockeru, jak je uvedeno v další části.

Vývojové prostředí může být vaše místní pracovní stanice se sadou Visual Studio Code nebo PyCharm, Codespaces (vývojové prostředí hostované v cloudu) nebo Visual Studio Dev Containers (kontejner jako vývojové prostředí).

Možnosti kontejneru nasazení v Azure

Kontejnerové aplikace Pythonu se podporují v následujících službách.

Služba Popis
Web App for Containers Plně spravovaná hostitelská služba pro kontejnerizované webové aplikace, včetně webů a webových rozhraní API. Kontejnerizované webové aplikace ve službě Aplikace Azure Service se můžou škálovat podle potřeby a využívat zjednodušené pracovní postupy CI/CD se službou Docker Hub, Azure Container Registry a GitHubem. Ideální pro vývojáře, kteří snadno využívají plně spravovanou platformu Aplikace Azure Service, ale chtějí také jeden nasaditelný artefakt obsahující aplikaci a všechny její závislosti.

Příklad: Nasazení webové aplikace Flask nebo FastPI ve službě Aplikace Azure Service
Azure Container Apps (ACA) Plně spravovaná služba bezserverového kontejneru využívající Kubernetes a opensourcové technologie, jako jsou Dapr, KEDA a envoy. Na základě osvědčených postupů a optimalizovaných pro kontejnery pro obecné účely. Infrastrukturu clusteru spravuje ACA a přímý přístup k rozhraní Kubernetes API se nepodporuje. Poskytuje mnoho konceptů specifických pro aplikace nad kontejnery, včetně certifikátů, revizí, škálování a prostředí. Ideální pro týmy, které chtějí začít vytvářet mikroslužby kontejnerů bez nutnosti spravovat základní složitost Kubernetes.

Příklad: Nasazení webové aplikace Flask nebo FastPI v Azure Container Apps
Azure Container Instances (ACI) Bezserverová nabídka, která poskytuje jeden pod izolovaných kontejnerů Hyper-V na vyžádání. Místo zřízených prostředků se účtuje spotřeba. Koncepty, jako je škálování, vyrovnávání zatížení a certifikáty, nejsou k dispozici s kontejnery ACI. Uživatelé často komunikují s ACI prostřednictvím jiných služeb; Například AKS pro orchestraci. Ideální, pokud potřebujete méně "názorný" stavební blok, který není v souladu se scénáři, pro které azure Container Apps optimalizujete.

Příklad: Vytvoření image kontejneru pro nasazení do služby Azure Container Instances (Kurz není specifický pro Python, ale uvedené koncepty platí pro všechny jazyky.)
Azure Kubernetes Service (AKS) Plně spravovaná možnost Kubernetes v Azure. Podporuje přímý přístup k rozhraní Kubernetes API a spouští všechny úlohy Kubernetes. Celý cluster se nachází ve vašem předplatném s konfiguracemi a operacemi clusteru v rámci vaší kontroly a odpovědnosti. Ideální pro týmy, které hledají plně spravovanou verzi Kubernetes v Azure.

Příklad: Nasazení clusteru Azure Kubernetes Service pomocí Azure CLI
Azure Functions Řešení řízené událostmi bezserverové funkce jako služba (FAAS). Sdílí mnoho charakteristik s Azure Container Apps v rámci škálování a integrace s událostmi, ale je optimalizovaný pro dočasné funkce nasazené jako kód nebo kontejnery. Ideální pro týmy, které chtějí aktivovat provádění funkcí na událostech; Chcete-li například vytvořit vazbu k jiným zdrojům dat.

Příklad: Vytvoření funkce v Linuxu pomocí vlastního kontejneru

Podrobnější porovnání těchto služeb najdete v tématu Porovnání container Apps s dalšími možnostmi kontejneru Azure.

Virtuální prostředí a kontejnery

Při spouštění projektu Pythonu ve vývojovém prostředí je používání virtuálního prostředí běžným způsobem správy závislostí a zajištění reprodukovatelnosti nastavení projektu. Virtuální prostředí má nainstalovaný interpret, knihovny a skripty Pythonu, které vyžaduje kód projektu spuštěný v daném prostředí. Závislosti pro projekty Pythonu se spravují prostřednictvím souboru requirements.txt .

Tip

U kontejnerů nejsou virtuální prostředí potřeba, pokud je nepoužíváte z testovacích nebo jiných důvodů. Pokud používáte virtuální prostředí, nekopírujte je do image Dockeru. Pomocí souboru .dockerignore je vyloučíte.

Kontejnery Dockeru si můžete představit jako podobné funkce jako virtuální prostředí, ale s dalšími výhodami reprodukovatelnosti a přenositelnosti. Kontejner Dockeru je možné spouštět kdekoli, kde je možné kontejnery spouštět bez ohledu na operační systém.

Kontejner Dockeru obsahuje kód projektu Pythonu a vše, co je potřeba spustit. Abyste se k tomu dostali, musíte sestavit kód projektu Pythonu do image Dockeru a pak vytvořit kontejner, spustitelnou instanci této image.

Pro kontejnerizaci projektů v Pythonu jsou klíčové soubory:

Soubor projektu Popis
requirements.txt Používá se při sestavování image Dockeru k získání správných závislostí do image.
Soubor Dockerfile Slouží k určení způsobu sestavení image Dockeru v Pythonu. Další informace najdete v části Pokyny k souboru Dockerfile pro Python.
.dockerignore Soubory a adresáře v souboru .dockerignore se nekopírují do image Dockeru COPY pomocí příkazu v souboru Dockerfile. Soubor .dockerignore podporuje vzory vyloučení podobné souborům .gitignore . Další informace naleznete v souboru .dockerignore.

Vyloučení souborů pomáhá s výkonem sestavení image, ale mělo by se také použít k tomu, aby se zabránilo přidávání citlivých informací do image, kde je možné je zkontrolovat. Například . dockerignore by měl obsahovat řádky pro ignorování .env a .venv (virtuální prostředí).

Nastavení kontejneru pro webové architektury

Webové architektury mají výchozí porty, na kterých naslouchají webovým požadavkům. Při práci s některými řešeními kontejneru Azure je potřeba zadat port, na kterém kontejner naslouchá, který bude přijímat provoz.

Webová architektura Port
Django 8000
Baňky 5000 nebo 5002
FastAPI (uvicorn) 8000 nebo 80

Následující tabulka ukazuje, jak nastavit port pro rozdílná řešení kontejnerů Azure.

Řešení kontejneru Azure Nastavení portu webové aplikace
Web App for Containers Služba App Service ve výchozím nastavení předpokládá, že váš vlastní kontejner naslouchá na portu 80 nebo portu 8080. Pokud váš kontejner naslouchá jinému portu, nastavte v aplikaci App Service nastavení aplikace WEBSITES_PORT. Další informace najdete v tématu Konfigurace vlastního kontejneru pro službu Aplikace Azure Service.
Azure Containers Apps Azure Container Apps umožňuje zveřejnit aplikaci kontejneru pro veřejný web, pro vaši virtuální síť nebo jiné kontejnerové aplikace v rámci vašeho prostředí povolením příchozího přenosu dat. Nastavte příchozí přenos dat targetPort na port, na který kontejner naslouchá příchozím požadavkům. Koncový bod příchozího přenosu dat aplikace je vždy vystavený na portu 443. Další informace najdete v tématu Nastavení příchozího přenosu dat HTTPS nebo TCP v Azure Container Apps.
Azure Container Instances, Azure Kubernetes Během vytváření kontejneru nastavte port. Musíte zajistit, aby vaše řešení bylo webové rozhraní, aplikační server (například gunicorn, uvicorn) a webový server (například nginx). Můžete například vytvořit dva kontejnery, jeden kontejner s webovou architekturou a aplikačním serverem a jinou architekturu s webovým serverem. Dva kontejnery komunikují na jednom portu a kontejner webového serveru zveřejňuje 80/443 pro externí požadavky.

Python Dockerfile

Soubor Dockerfile je textový soubor, který obsahuje pokyny k vytvoření image Dockeru. První řádek uvádí, že základní image začíná. Tento řádek následuje pokyny k instalaci požadovaných programů, kopírování souborů a dalších pokynů k vytvoření pracovního prostředí. Například některé příklady specifické pro Python pro klíčové pokyny pythonového souboru Dockerfile se zobrazují v následující tabulce.

Pokyn Účel Příklad
FROM Nastaví základní image pro další pokyny. FROM python:3.8-slim
VYSTAVIT Říká Dockeru, že kontejner naslouchá na zadaných síťových portech za běhu. EXPOSE 5000
KOPÍROVAT Zkopíruje soubory nebo adresáře ze zadaného zdroje a přidá je do systému souborů kontejneru v zadané cílové cestě. COPY . /app
SPUSTIT Spustí příkaz uvnitř image Dockeru. Můžete například vyžádat závislosti. Příkaz se spustí jednou v době sestavení. RUN python -m pip install -r requirements.txt
CMD Příkaz poskytuje výchozí nastavení pro spuštění kontejneru. K dispozici může být pouze jedna instrukce CMD. CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]

Příkaz sestavení Dockeru sestaví image Dockeru ze souboru Dockerfile a kontextu. Kontext sestavení je sada souborů umístěných v zadané cestě nebo adrese URL. Obvykle vytvoříte image z kořenového adresáře projektu Pythonu a cesta příkazu sestavení je ". Jak je znázorněno v následujícím příkladu.

docker build --rm --pull  --file "Dockerfile"  --tag "mywebapp:latest"  .

Proces sestavení může odkazovat na libovolný soubor v kontextu. Sestavení může například pomocí instrukce COPY odkazovat na soubor v kontextu. Tady je příklad souboru Dockerfile pro projekt Pythonu pomocí architektury Flask :

FROM python:3.8-slim

EXPOSE 5000

# Keeps Python from generating .pyc files in the container.
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

# Install pip requirements.
COPY requirements.txt .
RUN python -m pip install -r requirements.txt

WORKDIR /app
COPY . /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder.
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

# Provides defaults for an executing container; can be overridden with Docker CLI.
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]

Soubor Dockerfile můžete vytvořit ručně nebo ho vytvořit automaticky pomocí VS Code a rozšíření Dockeru. Další informace najdete v tématu Generování souborů Dockeru.

Příkaz sestavení Dockeru je součástí rozhraní příkazového řádku Dockeru. Pokud používáte idEs, jako je VS Code nebo PyCharm, příkazy uživatelského rozhraní pro práci s imagemi Dockeru volají příkaz sestavení za vás a automatizují zadávání možností.

Práce s imagemi a kontejnery Dockeru v Pythonu

VS Code a PyCharm

Práce v integrovaném vývojovém prostředí (IDE) pro vývoj kontejnerů Pythonu není nutná, ale může zjednodušit mnoho úloh souvisejících s kontejnery. Tady je několik věcí, které můžete dělat s VS Code a PyCharm.

  • Stáhněte a sestavte image Dockeru.

    • Vytvářejte image ve vývojovém prostředí.
    • Vytváření imagí Dockeru v Azure bez nainstalovaného Dockeru ve vývojovém prostředí (Pro PyCharm použijte Azure CLI k vytváření imagí v Azure.)
  • Vytvořte a spusťte kontejnery Dockeru z existující image, načítané image nebo přímo ze souboru Dockerfile.

  • Spouštění vícekontejnerových aplikací pomocí Docker Compose

  • Připojení a pracovat s registry kontejnerů, jako jsou Docker Hub, GitLab, JetBrains Space, Docker V2 a další místní registry Dockeru.

  • (pouze VS Code) Přidejte soubory Dockerfile a Docker compose, které jsou přizpůsobené vašemu projektu Pythonu.

Pokud chcete nastavit VS Code a PyCharm pro spouštění kontejnerů Dockeru ve vývojovém prostředí, postupujte následovně.

Pokud jste to ještě neudělali, nainstalujte Azure Tools for VS Code.

Pokyny Snímek obrazovky
Krok 1: Pomocí kombinace kláves SHIFT + ALT + A otevřete rozšíření Azure a potvrďte, že jste připojení k Azure.

Na panelu rozšíření VS Code můžete také vybrat ikonu Azure .

Pokud nejste přihlášení, vyberte Přihlásit se k Azure a postupujte podle pokynů.

Pokud máte potíže s přístupem k předplatnému Azure, může to být proto, že se nacházíte za proxy serverem. Pokud chcete vyřešit problémy s připojením, přečtěte si téma Síťové Připojení iony v editoru Visual Studio Code.
Screenshot showing how Azure Tools looks once signed in.Screenshot showing how Azure Tools looks if you aren't signed in.
Krok 2: Pomocí kombinace kláves CTRL + SHIFT + X otevřete rozšíření, vyhledejte rozšíření Dockeru a nainstalujte rozšíření.

Na panelu rozšíření VS Code můžete také vybrat ikonu Rozšíření .
Screenshot showing how to add Docker extension to VS Code.
Krok 3: Vyberte ikonu Dockeru na panelu rozšíření, rozbalte image a klikněte pravým tlačítkem myši na image, která se spustí jako kontejner. Screenshot showing how to use the Docker extension in VS Code to run a container from a Docker image.
Krok 4: Monitorování výstupu spuštění Dockeru v okně terminálu Screenshot showing an example of running a container in VS Code.

Azure CLI a Docker CLI

S imagemi a kontejnery Dockeru v Pythonu můžete pracovat také pomocí Azure CLI a Rozhraní příkazového řádku Dockeru. VS Code i PyCharm mají terminály, kde můžete tyto rozhraní CLI spustit.

Rozhraní příkazového řádku použijte, když chcete jemně ovládat argumenty sestavení a spouštění a pro automatizaci. Například následující příkaz ukazuje, jak pomocí azure CLI az acr build zadat název image Dockeru.

az acr build --registry <registry-name> \
  --resource-group <resource-group> \
  --target pythoncontainerwebapp:latest .

Jako další příklad vezměte v úvahu následující příkaz, který ukazuje, jak použít příkaz spuštění rozhraní příkazového řádku Dockeru. Příklad ukazuje, jak spustit kontejner Dockeru, který komunikuje s instancí MongoDB ve vašem vývojovém prostředí mimo kontejner. Různé hodnoty pro dokončení příkazu se dají snadněji automatizovat při zadání v příkazovém řádku.

docker run --rm -it \
  --publish <port>:<port> --publish 27017:27017 \
  --add-host mongoservice:<your-server-IP-address> \
  --env CONNECTION_STRING=mongodb://mongoservice:27017 \
  --env DB_NAME=<database-name> \
  --env COLLECTION_NAME=<collection-name> \
  containermongo:latest  

Další informace o tomto scénáři najdete v tématu Sestavení a otestování kontejnerizované webové aplikace v Pythonu místně.

Proměnné prostředí v kontejnerech

Projekty Pythonu často využívají proměnné prostředí k předávání dat do kódu. Můžete například zadat informace o připojení k databázi v proměnné prostředí, aby bylo možné je během testování snadno změnit. Nebo při nasazování projektu do produkčního prostředí je možné připojení k databázi změnit tak, aby odkazovat na instanci produkční databáze.

Balíčky jako python-dotenv se často používají ke čtení párů klíč-hodnota ze souboru .env a jejich nastavení jako proměnné prostředí. Soubor .env je užitečný při spuštění ve virtuálním prostředí, ale nedoporučuje se při práci s kontejnery. Nekopírujte soubor .env do image Dockeru, zejména pokud obsahuje citlivé informace a kontejner se zveřejní. Pomocí souboru .dockerignore vyloučíte soubory z kopírování do image Dockeru. Další informace najdete v části Virtuální prostředí a kontejnery v tomto článku.

Proměnné prostředí můžete do kontejnerů předat několika způsoby:

  1. Definice v souboru Dockerfile jako pokyny ENV .
  2. Předané jako --build-arg argumenty pomocí příkazu Docker build .
  3. Předané jako --secret argumenty pomocí příkazu docker buildu a back-endu BuildKit .
  4. Předané jako --env nebo --env-file argumenty pomocí příkazu Docker Run .

První dvě možnosti mají stejnou nevýhodu jako výše u souborů .env , konkrétně že pevně zakódujete potenciálně citlivé informace do image Dockeru. Můžete zkontrolovat image Dockeru a zobrazit proměnné prostředí, například pomocí příkazu docker image zkontrolovat.

Třetí možnost buildKitu umožňuje předávat tajné informace, které se mají použít v souboru Dockerfile k vytváření imagí Dockeru bezpečným způsobem, který se neuloží do konečné image.

Čtvrtá možnost předání proměnných prostředí příkazem Docker Run znamená, že image Dockeru neobsahuje proměnné. Proměnné jsou ale stále viditelné při kontrole instance kontejneru (například při kontrole kontejneru Dockeru). Tato možnost může být přijatelná, pokud je přístup k instanci kontejneru řízený nebo ve scénářích testování nebo vývoje.

Tady je příklad předávání proměnných prostředí pomocí příkazu Spuštění rozhraní příkazového řádku Dockeru a použití argumentu --env .

# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>

docker run --rm -it \
  --publish $PORT:$PORT \
  --env CONNECTION_STRING=<connection-info> \
  --env DB_NAME=<database-name> \
  <dockerimagename:tag>

Pokud používáte VS Code nebo PyCharm, možnosti uživatelského rozhraní pro práci s imagemi a kontejnery nakonec používají příkazy Rozhraní příkazového řádku Dockeru, jako je příkaz uvedený výše.

Nakonec se určení proměnných prostředí při nasazování kontejneru v Azure liší od použití proměnných prostředí ve vývojovém prostředí. Příklad:

  • U služby Web App for Containers nakonfigurujete nastavení aplikace během konfigurace služby App Service. Tato nastavení jsou dostupná pro kód aplikace jako proměnné prostředí a přístupná pomocí standardního vzoru os.environ . Hodnoty můžete po počátečním nasazení v případě potřeby změnit. Další informace najdete v tématu Nastavení aplikace pro Access jako proměnné prostředí.

  • Pro Azure Container Apps nakonfigurujete proměnné prostředí během počáteční konfigurace aplikace kontejneru. Následná úprava proměnných prostředí vytvoří revizi kontejneru. Kromě toho azure Container Apps umožňuje definovat tajné kódy na úrovni aplikace a pak na ně odkazovat v proměnných prostředí. Další informace najdete v tématu Správa tajných kódů v Azure Container Apps.

Jako další možnost můžete použít service Připojení or, který vám pomůže připojit výpočetní služby Azure k dalším backingovým službám. Tato služba konfiguruje nastavení sítě a informace o připojení (například generování proměnných prostředí) mezi výpočetními službami a cílovými backingovými službami v rovině správy.

Zobrazení protokolů kontejneru

Prohlédněte si protokoly instancí kontejneru a zobrazte výstup diagnostických zpráv z kódu a při řešení potíží v kódu kontejneru. Tady je několik způsobů, jak zobrazit protokoly při spuštění kontejneru ve vývojovém prostředí:

  • Spuštění kontejneru s VS Code nebo PyCharm, jak je znázorněno v části VS Code a PyCharm, můžete zobrazit protokoly v terminálových oknech otevřených při spuštění Dockeru.

  • Pokud používáte příkaz Pro spuštění Rozhraní příkazového řádku Dockeru s interaktivním příznakem-it, zobrazí se výstup za příkazem.

  • V Docker Desktopu můžete také zobrazit protokoly pro spuštěný kontejner.

Při nasazování kontejneru v Azure máte také přístup k protokolům kontejneru. Tady je několik služeb Azure a přístup k protokolům kontejnerů na webu Azure Portal.

Služba Azure Přístup k protokolům na webu Azure Portal
Web App for Containers Přejděte do části Diagnostika a řešení problémů a zobrazte protokoly. Diagnostika je inteligentní a interaktivní prostředí, které vám pomůže řešit potíže s aplikací bez nutnosti konfigurace. Pokud chcete zobrazit protokoly v reálném čase, přejděte do streamu protokolu monitorování - . Podrobnější dotazy protokolu a konfigurace najdete v dalších prostředcích v části Monitorování.
Azure Container Apps Přejděte k prostředku prostředí Diagnostika a řešení problémů s řešením problémů s prostředím. Častěji budete chtít zobrazit protokoly kontejneru. V prostředku kontejneru v části Správa revizí aplikace - vyberte revizi a odtud můžete zobrazit protokoly systému a konzoly. Podrobnější dotazy a konfigurace protokolů najdete v části Monitorování prostředků.
Azure Container Instances Přejděte do prostředku Kontejnery a vyberte Protokoly.

Pro stejné služby uvedené výše tady jsou příkazy Azure CLI pro přístup k protokolům.

Služba Azure Příkaz Azure CLI pro přístup k protokolům
Web App for Containers az webapp log
Azure Container Apps az containerapps logs
Azure Container Instances az container logs

K dispozici je také podpora zobrazení protokolů ve VS Code. Musíte mít nainstalované nástroje Azure Tools for VS Code . Níže je příklad zobrazení protokolů Služby Web Apps for Containers (App Service) ve VS Code.

Screenshot showing how to view logs in VS Code for Web Apps for Containers.

Další kroky