Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Tip
Risposta breve: usare Kompose per lo scaffolding rapido, Move2Kube per una modernizzazione più ampia, Docker Compose Bridge se si usa Docker Desktop e Podman per esportare da contenitori o pod in esecuzione. Quindi impacchetta i risultati con Helm o Kustomize e itera con Skaffold o Tilt.
Strumenti principali: Kompose, Move2Kube, Docker Compose Bridge, Podman, Helm, Kustomize, Skaffold, Tilt e conversione assistita da intelligenza artificiale.
In questa esercitazione si prepara un'applicazione multi-contenitore da usare in Kubernetes. È possibile usare questa esercitazione se si inizia con una nuova app di esempio o si adattano i concetti di Docker Compose per un'app di cui si intende eseguire la migrazione a Servizio Azure Kubernetes (AKS). Si usano strumenti di sviluppo esistenti come Docker Compose per compilare e testare localmente l'applicazione. Scopri come:
- Clonare il codice sorgente di un'applicazione di esempio da GitHub.
- Creare un'immagine del container dal codice sorgente dell'applicazione di esempio.
- Testare l'applicazione multicontenitore in un ambiente Docker locale.
Important
A partire da zero? Usa questo tutorial per preparare e testare un'app di esempio per AKS. Uso già di Docker Compose? Vedere la documentazione di Kubernetes per la migrazione di Docker Compose a Kubernetes e la panoramica della migrazione del servizio Azure Kubernetes per indicazioni più generali sulla pianificazione.
Al termine, l'applicazione seguente viene eseguita nell'ambiente di sviluppo locale:
Nei tutorial successivi, verrà caricata l'immagine del contenitore in un Registro Container di Azure (ACR) e poi distribuita in un cluster del servizio Azure Kubernetes.
Operazioni preliminari
Questa esercitazione presuppone una conoscenza di base dei concetti principali di Docker, ad esempio contenitori, immagini del contenitore e comandi docker. Per una panoramica sulle nozioni di base dei contenitori, vedere Get started with Docker (Introduzione a Docker).
Per completare questa esercitazione, è necessario un ambiente di sviluppo Docker locale in cui sono in esecuzione i contenitori Linux. Docker fornisce pacchetti che configurano Docker in un Mac, Windows o Linux.
Nota
Azure Cloud Shell non include i componenti Docker necessari per completare ogni passaggio di queste esercitazioni. È pertanto consigliabile usare un ambiente di sviluppo completo di Docker.
Ottenere il codice dell'applicazione
L'applicazione sample usata in questa esercitazione è un'app front-store di base, incluse le distribuzioni e i servizi kubernetes seguenti:
- Vetrina di vendita: applicazione Web che consente ai clienti di visualizzare i prodotti ed effettuare ordini.
- Servizio prodotto: mostra le informazioni sul prodotto.
- Servizio ordini: effettua ordini.
- RabbitMQ: coda di messaggi per una coda di ordini.
Creare una directory nel computer e passare a tale directory nella sessione del terminale, ad esempio Bash. In questo esempio viene usata una directory denominata demorepo , ma è possibile usare qualsiasi nome desiderato.
mkdir demorepo cd demorepoUsare git per clonare l'applicazione di esempio nell'ambiente di sviluppo.
git clone https://github.com/Azure-Samples/aks-store-demo.gitPassare alla directory clonata.
cd aks-store-demo
Esaminare il file Docker Compose
L'applicazione di esempio che crei in questo tutorial utilizza il file YAML docker-compose-quickstart dal repository clonato.
La tabella seguente riepiloga le principali impostazioni predefinite del file Compose di esempio, così da poter vedere rapidamente quali servizi, porte e dipendenze vengono utilizzati nell'esercitazione:
| Service | Fonte | Porta esposta | Impostazioni chiave |
|---|---|---|---|
| RabbitMQ | Immagine rabbitmq:4.3.2-management-alpine |
15672, 5672 |
Nome utente usernamepredefinito, password password |
| Ordinare il servizio | src/order-service |
3000 |
Si connette a RabbitMQ sulla porta 5672 e usa la coda orders |
| Servizio prodotto | src/product-service |
3002 |
Utilizzazioni AI_SERVICE_URL=http://ai-service:5001/ |
| Vetrina del negozio | src/store-front |
8080 |
Chiama il servizio di prodotto su 3002 e il servizio ordini su 3000 |
services:
rabbitmq:
image: rabbitmq:4.3.2-management-alpine
container_name: 'rabbitmq'
restart: always
environment:
- "RABBITMQ_DEFAULT_USER=username"
- "RABBITMQ_DEFAULT_PASS=password"
ports:
- 15672:15672
- 5672:5672
healthcheck:
test: ["CMD", "rabbitmqctl", "status"]
interval: 30s
timeout: 10s
retries: 5
networks:
- backend_services
order-service:
build: src/order-service
container_name: 'order-service'
restart: always
ports:
- 3000:3000
healthcheck:
test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://order-service:3000/health"]
interval: 30s
timeout: 10s
retries: 5
environment:
- ORDER_QUEUE_HOSTNAME=rabbitmq
- ORDER_QUEUE_PORT=5672
- ORDER_QUEUE_USERNAME=username
- ORDER_QUEUE_PASSWORD=password
- ORDER_QUEUE_NAME=orders
networks:
- backend_services
depends_on:
rabbitmq:
condition: service_healthy
product-service:
build: src/product-service
container_name: 'product-service'
restart: always
ports:
- 3002:3002
healthcheck:
test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://product-service:3002/health"]
interval: 30s
timeout: 10s
retries: 5
environment:
- AI_SERVICE_URL=http://ai-service:5001/
networks:
- backend_services
store-front:
build: src/store-front
container_name: 'store-front'
restart: always
ports:
- 8080:8080
healthcheck:
test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://store-front:80/health"]
interval: 30s
timeout: 10s
retries: 5
environment:
- VUE_APP_PRODUCT_SERVICE_URL=http://product-service:3002/
- VUE_APP_ORDER_SERVICE_URL=http://order-service:3000/
networks:
- backend_services
depends_on:
- product-service
- order-service
networks:
backend_services:
driver: bridge
Creare immagini del contenitore ed eseguire l'applicazione
Docker Compose può essere usato per automatizzare la compilazione di immagini del contenitore e la distribuzione di applicazioni multicontenitore.
Assicurarsi che Docker sia in esecuzione in modalità contenitore Linux prima di eseguire i comandi seguenti.
Dalla radice del repository clonato
aks-store-democreare l'immagine del contenitore, scaricare l'immagine RabbitMQ e avviare l'applicazione usando ildocker composecomando :docker compose -f docker-compose-quickstart.yml up -dVisualizzare le immagini create usando il comando
docker images.docker imagesL'output di esempio condensato seguente mostra le immagini create:
REPOSITORY TAG IMAGE ID aks-store-demo-product-service latest 72f5cd7e6b84 aks-store-demo-order-service latest 54ad5de546f9 aks-store-demo-store-front latest 1125f85632ae ...Visualizzare i contenitori in esecuzione usando il comando
docker ps.docker psL'output di esempio condensato seguente mostra quattro contenitori in esecuzione:
CONTAINER ID IMAGE f27fe74cfd0a aks-store-demo-product-service df1eaa137885 aks-store-demo-order-service b3ce9e496e96 aks-store-demo-store-front 31df28627ffa rabbitmq:4.3.2-management-alpine
Testare l'applicazione in locale
Per visualizzare l'applicazione in esecuzione, passare a http://localhost:8080 in un Web browser locale. L'applicazione di esempio viene caricata, come illustrato nell'esempio seguente:
In questa pagina è possibile visualizzare i prodotti, aggiungerli al carrello e quindi effettuare un ordine.
Eseguire la migrazione dei propri file Compose
Se un'applicazione è già definita in un file Docker Compose, è possibile usare questa esercitazione come riferimento per la convalida locale, quindi convertire la configurazione compose esistente in manifesti Kubernetes. Usare strumenti come Kompose, Move2Kube, Docker Compose Bridge o Podman per convertire le definizioni docker Compose in risorse Kubernetes. Per l'intero processo di conversione end-to-end, consulta la documentazione di Kubernetes per la migrazione da Docker Compose a Kubernetes e la panoramica della migrazione di AKS, se esegui anche la migrazione da un altro orchestratore o da un altro processo di modernizzazione.
Scegliere uno strumento di conversione
Usare questa tabella quando è necessario un confronto rapido delle opzioni più comuni di Compose-to-Kubernetes.
| Strumento | Riepilogo una riga |
|---|---|
| Kompose | Struttura di base rapida da Compose a Kubernetes; esegui kompose convert; metti in conto la pulizia manuale di storage e probe. |
| Move2Kube | Flusso di lavoro di modernizzazione più esteso; esegui move2kube plan -s ./path && move2kube transform; più oneroso dei convertitori a file singolo. |
| Docker Compose Bridge | Percorso di conversione orientato a Docker Desktop; run docker compose bridge convert -o ./k8s/. Per informazioni dettagliate sul supporto corrente, vedere la documentazione di Docker. |
| Podman | Esportare file YAML da contenitori o pod in esecuzione; eseguire podman kube generate mypod > k8s.yaml; ideale per i flussi di lavoro basati su Podman. |
| Helm | File manifesto di modelli e pacchetti per distribuzioni ripetute; eseguire helm create mychart; meglio dopo la conversione. |
| Kustomize | Applica le modifiche specifiche dell'ambiente in sovrapposizione; esegui kubectl apply -k .; ideale dopo la conversione. |
| Skaffold | Crea un ciclo di sviluppo interno per Kubernetes; esegui skaffold init; non è un convertitore diretto. |
| Inclinazione | Aggiornamento in tempo reale dello sviluppo locale su Kubernetes; esegui tilt up; richiede un flusso di lavoro incentrato su Kubernetes. |
| Conversione assistita dall'intelligenza artificiale | Creare una bozza o confrontare i manifesti con l'intelligenza artificiale, quindi convalidare l'output prima della distribuzione. |
Quale strumento devo scegliere?
- Se vuoi un rapido modello di verifica o manifesti di avvio, usa Kompose.
- Se si usa Docker Desktop e si vuole un percorso nativo docker, usare Docker Compose Bridge.
- Se si dispone di un maggiore impegno di migrazione o modernizzazione multiservizio, usare Move2Kube.
- Se si desidera esportare da container o pod in esecuzione, utilizzare Podman.
- Se sono già presenti manifesti e sono necessari pacchetti o sovrapposizioni, usare Helm o Kustomize.
- Se è necessario un ciclo di sviluppo Kubernetes locale dopo la conversione, usare Skaffold o Tilt.
- Se vuoi bozze di file manifest o spiegazioni sulla migrazione, usa l'assistenza dell'IA e convalidane il risultato rispetto alla documentazione ufficiale di Kubernetes e AKS.
Altri strumenti da considerare:
- 8gwifi.org Convertitore YAML di Kubernetes: utile per esperimenti online rapidi con piccoli file Compose.
- Okteto: utile quando si vuole un ciclo di sviluppo Kubernetes remoto o cloud per i team delle applicazioni.
- Devtron: utile quando si desidera un workflow di piattaforma per il rilascio su Kubernetes dopo la conversione.
- Portainer: utile quando si vuole un contenitore basato sull'interfaccia utente e un'esperienza di gestione kubernetes.
Converti i tuoi file Compose
Usare i comandi copiabili seguenti come punto di partenza:
kompose convert
move2kube plan -s ./path && move2kube transform
docker compose bridge convert -o ./k8s/
podman kube generate mypod > k8s.yaml
skaffold init
Esempio di conversione di Kompose
Lo strumento Kompose open source converte le impostazioni comuni di Docker Compose in oggetti Kubernetes, ad esempio distribuzioni e servizi.
In Windows installare Kompose con il comando seguente:
curl -L https://github.com/kubernetes/kompose/releases/latest/download/kompose-windows-amd64.exe -o kompose.exePer altre opzioni di installazione, vedere le istruzioni di installazione di Kompose.
Eseguire Kompose dalla directory che contiene il
docker-compose.ymlfile.kompose convertEsamina i file YAML di Kubernetes generati prima di distribuirli in AKS.
Conversione assistita dall'intelligenza artificiale
È possibile usare un assistente di intelligenza artificiale per creare manifesti Kubernetes, confrontare le impostazioni compose con gli equivalenti kubernetes o spiegare perché una conversione richiede modifiche manuali.
Prompt di esempio generico:
Convert this docker-compose.yml into production-ready Kubernetes manifests. Use Apps/v1, move secrets to Kubernetes Secret objects, map local volumes to PersistentVolumeClaims, and add readiness and liveness probes for the web service.
Prompt di esempio per AKS:
Convert this docker-compose.yml into AKS-ready Kubernetes manifests. Target an AKS cluster, push images to Azure Container Registry, use Apps/v1 objects, move secrets to Kubernetes Secret objects, map local volumes to Azure Files or Azure Disks-backed PersistentVolumeClaims, and add readiness and liveness probes for the web service.
Esaminare sempre l'output di intelligenza artificiale prima di applicarlo. Convalidare i valori apiVersion, le richieste e i limiti delle risorse, le classi di archiviazione, l'esposizione del servizio e le sonde di integrità.
Gestire i problemi di traduzione comuni
Come vengono gestiti i volumi?
Compose volumes richiede spesso volumi permanenti Kubernetes e una classe di archiviazione. In AKS, sostituire i mount locali con servizi quali Azure Disks o File di Azure.
Cosa sostituisce depends_on?
Compose depends_on non applica l'idoneità del runtime in Kubernetes. Sostituirlo con probe di idoneità, probe di avvio o logica del contenitore init quando necessario.
Come si gestiscono i segreti e i valori dell'ambiente?
I valori di ambiente di Compose diventano spesso risorse Kubernetes ConfigMap o Secret integrazioni con Azure Key Vault.
Che cosa succede alle porte e al traffico in ingresso?
Gli oggetti Compose ports vengono mappati agli oggetti Kubernetes Service e talvolta alle risorse Ingress o Gateway API, a seconda di come si pubblica l'applicazione.
Come si traducono i controlli di integrità?
Le impostazioni di Compose healthcheck di solito diventano probe Kubernetes di integrità e prontezza.
Cosa succede alle reti Compose?
Le reti di Compose di solito vengono tradotte nel rilevamento dei servizi di Kubernetes tramite i servizi e il DNS del cluster, invece che tramite reti bridge personalizzate.
Come si esegue il test in locale con Kubernetes?
Dopo la conversione, distribuire i manifesti generati in un ambiente Kubernetes locale, ad esempio kind o minikube, quindi usare Skaffold o Tilt se si vuole un ciclo edit-build-deploy più veloce.
Applica modifiche specifiche di AKS dopo la conversione
Kompose offre un punto di partenza, ma in genere è necessario apportare modifiche manuali per AKS:
- Aggiornare i riferimenti alle immagini in modo che puntino al Registro Azure Container (ACR).
- Sostituisci l'archiviazione locale e i bind mount con archiviazione persistente, ad esempio Azure Disks o File di Azure, a seconda delle esigenze del carico di lavoro.
- Sostituire i segreti di Compose o i valori specifici dell'ambiente con Secret di Kubernetes, ConfigMap o le integrazioni di Azure Key Vault.
- Rivedi le impostazioni di rete e di esposizione, ad esempio
LoadBalancer, ingress o la configurazione del gateway, in base a come vuoi pubblicare l'app in AKS. - Controllare se i componenti con stato devono rimanere come distribuzioni o passare a modelli come StatefulSets quando è necessario un comportamento stabile di identità o archiviazione.
- Convalidare le richieste di risorse, i probe e i presupposti di ordinamento di avvio perché i comportamenti di Compose,
depends_onad esempio, non si traducono direttamente nel comportamento di runtime di Kubernetes.
Flusso di lavoro post-conversione
- Convertire il file Compose con uno strumento come Kompose, Move2Kube, Docker Compose Bridge, Podman o una bozza esaminata dall'intelligenza artificiale.
- Esaminare e rafforzare i manifesti correggendo archiviazione, segreti, esposizione del servizio, probe e riferimenti alle immagini.
- Creare pacchetti dei manifest con Helm oppure applicare modifiche specifiche dell'ambiente con Kustomize.
- Esegui il push delle immagini in un registro come ACR, quindi distribuisci con GitOps, CI/CD o flussi di lavoro diretti
kubectl.
Sequenza di esempio: kompose convert -> esaminare i manifest -> eseguire il push delle immagini in ACR -> aggiornare i riferimenti delle immagini ->kubectl apply o helm install.
Pulire le risorse
Se è stato seguito il flusso di lavoro Docker Compose, è possibile arrestare e rimuovere i contenitori in esecuzione.
Non eliminare le immagini del contenitore perché vengono usate nell'esercitazione successiva. Se hai seguito il flusso di lavoro di Azure Developer CLI, usa azd down invece di docker compose down.
Arrestare e rimuovere le istanze e le risorse del contenitore usando il comando docker compose down.
docker compose down
Comandi dell'interfaccia della riga di comando per sviluppatori Azure
Quando si usa azd, non esistono dipendenze manuali dell'immagine del contenitore.
azd gestisce il provisioning, la distribuzione e la pulizia delle applicazioni e dei cluster con i comandi azd up e azd down, in modo analogo a Docker.
È possibile personalizzare i passaggi di preparazione per usare Terraform o Bicep prima di distribuire il cluster nella sezione infra del azure.yaml. Per impostazione predefinita, questo progetto usa Terraform:
infra:
provider: terraform
path: infra/terraform
Se si vuole modificare il provider in Bicep, aggiornare il file azure.yaml come indicato di seguito:
infra:
provider: bicep
path: infra/bicep
Passaggi successivi
Interfaccia CLI di Azure
In questa esercitazione è stata creata un'applicazione di esempio, sono state create immagini del contenitore per l'applicazione e quindi è stata testata l'applicazione. Si è appreso come:
- Clonare il codice sorgente di un'applicazione di esempio da GitHub.
- Creare un'immagine del container dal codice sorgente dell'applicazione di esempio.
- Testare l'applicazione multicontenitore in un ambiente Docker locale.
Nel prossimo tutorial, imparerai come archiviare le immagini di contenitori in un ACR.
CLI per sviluppatori di Azure
In questa esercitazione è stata clonata un'applicazione di esempio usando azd. Si è appreso come:
- Clonare un modello di esempio
azdda GitHub. - Visualizza dove vengono utilizzate le immagini dei container nel codice sorgente dell'applicazione di esempio.
Nell'esercitazione successiva si apprenderà come creare un cluster usando il modello azd clonato.