Azure Container Apps express (önizleme) için yerel olarak uygulama geliştirme ve test edin

Azure Container Apps express'e dağıtmadan önce kapsayıcınızı yerel olarak derleyebilir ve test edebilirsiniz. Bu makalede görüntü oluşturma, Docker veya Docker Compose ile yerel olarak çalıştırma, kayıt defterine gönderme ve dağıtımı doğrulama işlemi gösterilmektedir.

Note

Komutları çalıştırmadan önce kod listesinde yer tutucuları değerlerinizle değiştirin. Örneğin, gibi <CONTAINER_APP_NAME> bir metni kapsayıcı uygulamanızın adıyla değiştirin.

Prerequisites

Express uygulamanızı yerel olarak çalıştırmak için aşağıdaki öğeler gereklidir:

  • Docker Desktop veya yerel olarak yüklenmiş uyumlu bir kapsayıcı çalışma zamanı.
  • Azure Container Apps express’in çekebileceği bir kapsayıcı kayıt defterine erişim.
  • Azure CLI yükleme ve dağıtım doğrulaması için oturum açma.

Yerel geliştirme iş akışı

Azure Container Apps express standart Open Container Initiative (OCI) kapsayıcılarını çalıştırdığından yerel geliştirme iş akışınız şu işlemi izler:

  • Uygulamanızı kodlayın
  • Konteyneri oluşturun
  • Yerel olarak test et
  • Kayıt defterine gönderme
  • Container Apps Express'e dağıtın

Özel SDK, CLI veya yapılandırma biçimi gerekmez. Uygulamanız yerel olarak bir kapsayıcıda çalışıyorsa Azure Container Apps express üzerinde çalışır.

Konteyner imajınızı oluşturun

Uygulamanızın, Azure Container Apps express’in çalıştırabileceği bir kapsayıcı görüntüsü oluşturmak için bir Dockerfile’a ve derleme adımına ihtiyacı vardır.

Bu Dockerfile, bir HTTP bağlantı noktasını dinleyen bir kapsayıcı imajı oluşturur. Bağlantı noktasını 3000dinleyen örnek bir Docker dosyası aşağıda verilmiştir.

FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Yerel yapılandırma birkaç belirli ayar gerektirir. Uygulamanız şu şekilde olmalıdır:

  • Tek bir HTTP bağlantı noktasını (Azure Container Apps express'te targetPort olarak yapılandırdığınız bağlantı noktası) dinleyin.
  • İdeal olarak 5 saniyeden kısa sürede hızlı bir şekilde başlayın.
  • Günlükleri stdout ve stderr konumlarına yazın. Azure Container Apps express bu akışları otomatik olarak yakalar.

Görüntü oluşturma

Komutunu kullanarak docker build Dockerfile'ınızdan yerel bir görüntü oluşturun.

docker build -t <CONTAINER_APP_NAME>:dev .

Docker ile yerel olarak test edin

Dağıtmadan önce çalıştığını doğrulamak için kapsayıcı görüntünüzü Docker ile yerel olarak çalıştırın.

Kapsayıcınızı aşağıdaki komutla çalıştırın:

docker run -d \
  -p 8080:3000 \
  -e DATABASE_URL="postgres://localhost:5432/mydb" \
  -e LOG_LEVEL="debug" \
  --name <CONTAINER_APP_NAME> \
  <CONTAINER_APP_NAME>:dev

Ardından sistem durumu uç noktasını ve uygulamanın kendisini isteyerek uygulamanın çalışıp çalışmadığını denetleyin.

curl http://localhost:8080/health
curl http://localhost:8080/

Kapsayıcı günlüklerini görüntüleme

Kapsayıcınızın çıktısını gerçek zamanlı olarak aktarmak için docker logs kullanın.

docker logs -f <CONTAINER_APP_NAME>

Dur ve temizle

Testi tamamladığınızda yerel kaynakları boşaltmak için kapsayıcıyı durdurun ve kaldırın.

docker stop <CONTAINER_APP_NAME> && docker rm <CONTAINER_APP_NAME>

Ortam eşdeğerliği

Azure Container Apps express çalışma zamanını yerel olarak eşleştirmek için aşağıdaki yapılandırmayı doğrulayın:

Aspect Local Container Apps express
Bağlantı noktası bağlama -p 8080:3000 targetPort: 3000
Ortam değişkenleri -e KEY=value Kapsayıcı uygulaması ortam değişkenleri
Secrets -e SECRET=value Kapsayıcı uygulama gizlilik bilgileri
CPU/bellek Docker kaynak sınırları CPU/bellek ayırma

Kaynak sınırlarının benzetimini gerçekleştirme

docker run komutunu kullanarak Azure Container Apps express kaynak kısıtlamalarını yerel olarak taklit edin.

docker run -d \
  --cpus="0.5" \
  --memory="1g" \
  -p 8080:3000 \
  <CONTAINER_APP_NAME>:dev

Docker Compose ile test edin

Veritabanları ve önbellekler gibi yerel bağımlılıkları olan uygulamalar için Docker Compose'u kullanın:

# docker-compose.yml
services:
  app:
    build: .
    ports:
      - "8080:3000"
    environment:
      - DATABASE_URL=postgres://postgres:password@db:5432/mydb
      - REDIS_URL=redis://cache:6379
    depends_on:
      - db
      - cache

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    ports:
      - "5432:5432"

  cache:
    image: redis:7-alpine
    ports:
      - "6379:6379"

docker compose up Oluştur dosyanızda tanımlanan tüm hizmetleri derlemek ve başlatmak için komutunu kullanın.

docker compose up --build

Note

Azure Container Apps express'te veritabanları ve önbellekler gibi dış bağımlılıklarınızı ayrı ayrı Azure hizmetler olarak barındırmanız veya genel uç noktalar aracılığıyla erişilebilir hale getirmeniz gerekir. Azure Container Apps express yerleşik yönetilen veritabanları veya önbellekler sağlamaz.

Kapsayıcı kayıt deposuna gönderme

Görüntünüzün yerel olarak çalıştığını doğruladıktan sonra, Azure Container Apps express'in çekebileceği bir kayıt defterine gönderin.

Azure Container Registry (Azure Konteyner Kayıt Defteri)

Azure Container Registry (ACR) üzerinde kayıt defterinizde oturum açın, görüntüyü etiketleyin ve gönderin.

# Log in to ACR
az acr login --name <REGISTRY_NAME>

# Tag for ACR
docker tag <CONTAINER_APP_NAME>:dev <REGISTRY_NAME>.azurecr.io/<CONTAINER_APP_NAME>:v1

# Push
docker push <REGISTRY_NAME>.azurecr.io/<CONTAINER_APP_NAME>:v1

Docker Hub

Resminizi etiketleyip Docker Hub gönderme.

docker tag <CONTAINER_APP_NAME>:dev mydockerhub/<CONTAINER_APP_NAME>:v1
docker push mydockerhub/<CONTAINER_APP_NAME>:v1

GitHub Container Kayıt Defteri

Görüntünüzü etiketleyin ve GitHub Container Registry'ye gönderin.

docker tag <CONTAINER_APP_NAME>:dev ghcr.io/<ORGANIZATION_NAME>/<CONTAINER_APP_NAME>:v1
docker push ghcr.io/<ORGANIZATION_NAME>/<CONTAINER_APP_NAME>:v1

Dağıtımı test et

Görüntüyü gönderdikten sonra Azure Container Apps express'e dağıtın ve dağıtımı denetleyin.

# Deploy
az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP_NAME> \
  --image <REGISTRY_NAME>.azurecr.io/<CONTAINER_APP_NAME>:v1

# Get the URL
az containerapp show \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP_NAME> \
  --query properties.configuration.ingress.fqdn \
  --output tsv

# Check the endpoint
curl https://<APP_URL>/health

Geliştirme ipuçları

Aşağıdaki ipuçları, Azure Container Apps express için derleme yaparken geliştirme iş akışınızı kolaylaştırmanıza yardımcı olur.

ACR ile hızlı yineleme döngüsü kullanma

Hızlı geliştirme için, görüntüleri yerel olarak çekmeden veya göndermeden bulutta görüntü oluşturmak için kullanın az acr build .

az acr build \
  --registry <REGISTRY_NAME> \
  --image <CONTAINER_APP_NAME>:latest \
  .

Ardından uygulamanızı güncelleştirin:

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP_NAME> \
  --image <REGISTRY_NAME>.azurecr.io/<CONTAINER_APP_NAME>:latest

Kayıt tutma en iyi uygulamalarını izleyin

Log Analytics daha kolay sorgulamak için stdout'a yapılandırılmış JSON günlükleri yazın:

// Node.js example
console.log(JSON.stringify({
  level: "info",
  message: "Request handled",
  method: "GET",
  path: "/api/users",
  duration_ms: 23,
  status: 200
}));

SIGTERM ile düzgün kapatmayı yönetin

Aşamalı güncellemeler sırasında düzgün kapatmalar için SIGTERM işleme:

process.on('SIGTERM', () => {
  console.log('SIGTERM received, shutting down gracefully');
  server.close(() => {
    process.exit(0);
  });
});